You can subscribe to this list here.
| 2007 |
Jan
|
Feb
|
Mar
(57) |
Apr
(16) |
May
(12) |
Jun
(12) |
Jul
(42) |
Aug
(25) |
Sep
(8) |
Oct
(8) |
Nov
(8) |
Dec
(23) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2008 |
Jan
(28) |
Feb
(22) |
Mar
(19) |
Apr
(66) |
May
(50) |
Jun
(22) |
Jul
(28) |
Aug
(36) |
Sep
(35) |
Oct
(38) |
Nov
(19) |
Dec
(35) |
| 2009 |
Jan
(39) |
Feb
(16) |
Mar
(29) |
Apr
(36) |
May
(7) |
Jun
(12) |
Jul
(17) |
Aug
(14) |
Sep
(16) |
Oct
(9) |
Nov
(8) |
Dec
(9) |
| 2010 |
Jan
(10) |
Feb
(6) |
Mar
(10) |
Apr
(22) |
May
(5) |
Jun
(20) |
Jul
(20) |
Aug
(19) |
Sep
(13) |
Oct
(14) |
Nov
(7) |
Dec
(11) |
| 2011 |
Jan
(23) |
Feb
(20) |
Mar
(45) |
Apr
(13) |
May
(12) |
Jun
(24) |
Jul
(15) |
Aug
(18) |
Sep
(7) |
Oct
(4) |
Nov
(8) |
Dec
(8) |
| 2012 |
Jan
(7) |
Feb
(8) |
Mar
(12) |
Apr
(3) |
May
(8) |
Jun
(8) |
Jul
(7) |
Aug
(4) |
Sep
(3) |
Oct
(2) |
Nov
(1) |
Dec
(5) |
| 2013 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
(4) |
Jun
(1) |
Jul
(1) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
(1) |
Feb
|
Mar
(15) |
Apr
(3) |
May
(5) |
Jun
(4) |
Jul
(6) |
Aug
(5) |
Sep
(10) |
Oct
(5) |
Nov
(6) |
Dec
(2) |
| 2015 |
Jan
(7) |
Feb
(7) |
Mar
(6) |
Apr
(4) |
May
(2) |
Jun
(7) |
Jul
(6) |
Aug
(6) |
Sep
(2) |
Oct
(4) |
Nov
(2) |
Dec
(2) |
| 2016 |
Jan
(2) |
Feb
(7) |
Mar
(3) |
Apr
(3) |
May
(4) |
Jun
(5) |
Jul
(4) |
Aug
(1) |
Sep
(2) |
Oct
(4) |
Nov
|
Dec
(9) |
| 2017 |
Jan
(3) |
Feb
(2) |
Mar
(8) |
Apr
(4) |
May
(8) |
Jun
(6) |
Jul
(7) |
Aug
(6) |
Sep
(7) |
Oct
(1) |
Nov
(4) |
Dec
(6) |
| 2018 |
Jan
(7) |
Feb
|
Mar
(2) |
Apr
|
May
(2) |
Jun
(1) |
Jul
(2) |
Aug
(2) |
Sep
|
Oct
|
Nov
(2) |
Dec
(2) |
| 2019 |
Jan
(1) |
Feb
|
Mar
|
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: subversion c. n. <tra...@li...> - 2019-04-05 20:32:05
|
Revision: 1718
http://sourceforge.net/p/transims/code/1718
Author: davidroden
Date: 2019-04-05 20:32:00 +0000 (Fri, 05 Apr 2019)
Log Message:
-----------
TRANSIMS Version 7.3 Trunk Update
Modified Paths:
--------------
version7/trunk/Transims70/AddLRSData/AddLRSData.vcxproj
version7/trunk/Transims70/ArcJoin/ArcJoin.vcxproj
version7/trunk/Transims70/ArcNet/ArcNet.cpp
version7/trunk/Transims70/ArcNet/ArcNet.hpp
version7/trunk/Transims70/ArcNet/ArcNet.vcxproj
version7/trunk/Transims70/ArcNet/Control.cpp
version7/trunk/Transims70/ArcNet/Draw_Driver.cpp
version7/trunk/Transims70/ArcNet/Draw_Links.cpp
version7/trunk/Transims70/ArcNet/Draw_Route.cpp
version7/trunk/Transims70/ArcNet/Get_Location_Data.cpp
version7/trunk/Transims70/ArcNet/Get_Parking_Data.cpp
version7/trunk/Transims70/ArcNet/Get_Stop_Data.cpp
version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj
version7/trunk/Transims70/ArcPlan/ArcPlan.vcxproj
version7/trunk/Transims70/ArcPlan/Get_Stop_Data.cpp
version7/trunk/Transims70/ArcRider/ArcRider.cpp
version7/trunk/Transims70/ArcRider/ArcRider.vcxproj
version7/trunk/Transims70/ArcRider/Control.cpp
version7/trunk/Transims70/ArcRider/Write_Riders.cpp
version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.vcxproj
version7/trunk/Transims70/Converge_Service/Converge_Service.vcxproj
version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj
version7/trunk/Transims70/CountSum/CountSum.vcxproj
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_Connections.cpp
version7/trunk/Transims70/Data_Service/Read_Drivers.cpp
version7/trunk/Transims70/Data_Service/Read_Locations.cpp
version7/trunk/Transims70/Data_Service/Read_Stops.cpp
version7/trunk/Transims70/Data_Service/Write_Locations.cpp
version7/trunk/Transims70/Data_Service/Write_Stops.cpp
version7/trunk/Transims70/Draw_Service/Control.cpp
version7/trunk/Transims70/Draw_Service/Draw_Service.cpp
version7/trunk/Transims70/Draw_Service/Draw_Service.vcxproj
version7/trunk/Transims70/EventSum/EventSum.vcxproj
version7/trunk/Transims70/FileFormat/FileFormat.cpp
version7/trunk/Transims70/FileFormat/FileFormat.vcxproj
version7/trunk/Transims70/File_Service/Driver_File.cpp
version7/trunk/Transims70/File_Service/File_Service.vcxproj
version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
version7/trunk/Transims70/File_Service/Line_File.cpp
version7/trunk/Transims70/File_Service/Link_Data_File.cpp
version7/trunk/Transims70/File_Service/Location_File.cpp
version7/trunk/Transims70/File_Service/Stop_File.cpp
version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
version7/trunk/Transims70/Fratar/Fratar.vcxproj
version7/trunk/Transims70/GTFSData/Build_Routes.cpp
version7/trunk/Transims70/GTFSData/Build_Shapes.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_Shapes.cpp
version7/trunk/Transims70/GTFSData/Read_Stop_Times.cpp
version7/trunk/Transims70/GTFSData/Read_Stops.cpp
version7/trunk/Transims70/Gravity/Gravity.vcxproj
version7/trunk/Transims70/GridData/Control.cpp
version7/trunk/Transims70/GridData/GridData.cpp
version7/trunk/Transims70/GridData/GridData.hpp
version7/trunk/Transims70/GridData/GridData.vcxproj
version7/trunk/Transims70/GridData/Link_Grid.cpp
version7/trunk/Transims70/Include/Control_Service.hpp
version7/trunk/Transims70/Include/Data_Service.hpp
version7/trunk/Transims70/Include/Draw_Service.hpp
version7/trunk/Transims70/Include/File_Service.hpp
version7/trunk/Transims70/Include/Location_File.hpp
version7/trunk/Transims70/Include/Router_Service.hpp
version7/trunk/Transims70/Include/Shape_Tools.hpp
version7/trunk/Transims70/Include/Stop_Data.hpp
version7/trunk/Transims70/Include/Stop_File.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/TypeDefs.hpp
version7/trunk/Transims70/Include/User_Program.hpp
version7/trunk/Transims70/IntControl/IntControl.vcxproj
version7/trunk/Transims70/LineSum/LineSum.vcxproj
version7/trunk/Transims70/LinkData/LinkData.vcxproj
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/LinkSum/LinkSum.vcxproj
version7/trunk/Transims70/LocationData/Control.cpp
version7/trunk/Transims70/LocationData/Execute.cpp
version7/trunk/Transims70/LocationData/LocationData.cpp
version7/trunk/Transims70/LocationData/LocationData.hpp
version7/trunk/Transims70/LocationData/LocationData.vcxproj
version7/trunk/Transims70/LocationData/Read_Boundary.cpp
version7/trunk/Transims70/MatrixData/MatrixData.vcxproj
version7/trunk/Transims70/ModeChoice/ModeChoice.vcxproj
version7/trunk/Transims70/NJFare2/NJFare2.vcxproj
version7/trunk/Transims70/NetDiff/NetDiff.vcxproj
version7/trunk/Transims70/NetFix/NetFix.vcxproj
version7/trunk/Transims70/NetMerge/NetMerge.vcxproj
version7/trunk/Transims70/NetPrep/Control.cpp
version7/trunk/Transims70/NetPrep/Input_Links.cpp
version7/trunk/Transims70/NetPrep/NetPrep.cpp
version7/trunk/Transims70/NetPrep/NetPrep.hpp
version7/trunk/Transims70/NetPrep/NetPrep.vcxproj
version7/trunk/Transims70/NewFormat/NewFormat.vcxproj
version7/trunk/Transims70/NewLandUse/NewLandUse.vcxproj
version7/trunk/Transims70/PNRSplit/PNRSplit.vcxproj
version7/trunk/Transims70/PathSkim/PathSkim.vcxproj
version7/trunk/Transims70/PerfPrep/PerfPrep.vcxproj
version7/trunk/Transims70/PlanCompare/PlanCompare.vcxproj
version7/trunk/Transims70/PlanPrep/PlanPrep.vcxproj
version7/trunk/Transims70/PlanSelect/Control.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.hpp
version7/trunk/Transims70/PlanSelect/PlanSelect.vcxproj
version7/trunk/Transims70/PlanSelect/Read_Plans.cpp
version7/trunk/Transims70/PlanSum/Control.cpp
version7/trunk/Transims70/PlanSum/Execute.cpp
version7/trunk/Transims70/PlanSum/PlanSum.cpp
version7/trunk/Transims70/PlanSum/PlanSum.hpp
version7/trunk/Transims70/PlanSum/PlanSum.vcxproj
version7/trunk/Transims70/PlanSum/PlanSum.vcxproj.filters
version7/trunk/Transims70/PlanSum/Plan_Processing.cpp
version7/trunk/Transims70/PlanSum/Process_Plan.cpp
version7/trunk/Transims70/PlanSum/Write_Details.cpp
version7/trunk/Transims70/PlanSum/Write_Groups.cpp
version7/trunk/Transims70/PlanTrips/PlanTrips.cpp
version7/trunk/Transims70/PlanTrips/PlanTrips.vcxproj
version7/trunk/Transims70/PlanTrips/Put_Trip_Data.cpp
version7/trunk/Transims70/PlanTrips/Read_Plan.cpp
version7/trunk/Transims70/ProblemSelect/ProblemSelect.vcxproj
version7/trunk/Transims70/Progression/Progression.vcxproj
version7/trunk/Transims70/Relocate/Relocate.vcxproj
version7/trunk/Transims70/Reschedule/Reschedule.vcxproj
version7/trunk/Transims70/RiderSum/Group_Rider_Report.cpp
version7/trunk/Transims70/RiderSum/RiderSum.cpp
version7/trunk/Transims70/RiderSum/RiderSum.vcxproj
version7/trunk/Transims70/RiderSum/Write_Group_Rider.cpp
version7/trunk/Transims70/RiderSum/Write_Stop_Group.cpp
version7/trunk/Transims70/RiderSum/Write_Stop_VehTypes.cpp
version7/trunk/Transims70/RoutePrep/Control.cpp
version7/trunk/Transims70/RoutePrep/Execute.cpp
version7/trunk/Transims70/RoutePrep/RoutePrep.cpp
version7/trunk/Transims70/RoutePrep/RoutePrep.hpp
version7/trunk/Transims70/RoutePrep/RoutePrep.vcxproj
version7/trunk/Transims70/RoutePrep/RoutePrep.vcxproj.filters
version7/trunk/Transims70/Router/Control.cpp
version7/trunk/Transims70/Router/Execute.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router/Router.hpp
version7/trunk/Transims70/Router/Router.vcxproj
version7/trunk/Transims70/Router_Service/Build_Path.cpp
version7/trunk/Transims70/Router_Service/Drive_Path.cpp
version7/trunk/Transims70/Router_Service/Drive_Plan.cpp
version7/trunk/Transims70/Router_Service/Execute.cpp
version7/trunk/Transims70/Router_Service/Parking_Access.cpp
version7/trunk/Transims70/Router_Service/Path_Builder.hpp
version7/trunk/Transims70/Router_Service/Router_Service.cpp
version7/trunk/Transims70/Router_Service/Router_Service.vcxproj
version7/trunk/Transims70/Router_Service/Trace_Path.cpp
version7/trunk/Transims70/Router_Service/Transit_Plan.cpp
version7/trunk/Transims70/Select_Service/Select_Service.vcxproj
version7/trunk/Transims70/SimSubareas/SimSubareas.vcxproj
version7/trunk/Transims70/Simulator/Simulator.vcxproj
version7/trunk/Transims70/Simulator_Service/Simulator_Service.vcxproj
version7/trunk/Transims70/SubareaNet/SubareaNet.vcxproj
version7/trunk/Transims70/SubareaPlans/SubareaPlans.vcxproj
version7/trunk/Transims70/SysLib/Dbfile/Db_Base.cpp
version7/trunk/Transims70/SysLib/Program/Date_Time.cpp
version7/trunk/Transims70/SysLib/Program/Function.cpp
version7/trunk/Transims70/SysLib/Program/Get_Token.cpp
version7/trunk/Transims70/SysLib/Program/Input_Output.cpp
version7/trunk/Transims70/SysLib/Program/Program_Code.cpp
version7/trunk/Transims70/SysLib/Service/Control_Service.cpp
version7/trunk/Transims70/SysLib/Service/Execution_Service.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/SysLib.vcxproj
version7/trunk/Transims70/SysLib/Tools/Dtime.cpp
version7/trunk/Transims70/SysLib/Tools/Shape_Tools.cpp
version7/trunk/Transims70/SysLib/Tools/String.cpp
version7/trunk/Transims70/SysLib/Tools/Time_Periods.cpp
version7/trunk/Transims70/TcadLib/TcadLib.vcxproj
version7/trunk/Transims70/TppLib/TppLib.vcxproj
version7/trunk/Transims70/TransimsNet/TransimsNet.vcxproj
version7/trunk/Transims70/TransitAccess/TransitAccess.vcxproj
version7/trunk/Transims70/TransitNet/Control.cpp
version7/trunk/Transims70/TransitNet/Data_Setup.cpp
version7/trunk/Transims70/TransitNet/Execute.cpp
version7/trunk/Transims70/TransitNet/Station_Access.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/Control.cpp
version7/trunk/Transims70/TripPrep/Execute.cpp
version7/trunk/Transims70/TripPrep/Read_Trips.cpp
version7/trunk/Transims70/TripPrep/TripPrep.cpp
version7/trunk/Transims70/TripPrep/TripPrep.hpp
version7/trunk/Transims70/TripPrep/TripPrep.vcxproj
version7/trunk/Transims70/TripPrep/TripPrep.vcxproj.filters
version7/trunk/Transims70/TripSum/Control.cpp
version7/trunk/Transims70/TripSum/Execute.cpp
version7/trunk/Transims70/TripSum/Group_Report.cpp
version7/trunk/Transims70/TripSum/Read_Trips.cpp
version7/trunk/Transims70/TripSum/Top_100_Report.cpp
version7/trunk/Transims70/TripSum/TripSum.cpp
version7/trunk/Transims70/TripSum/TripSum.hpp
version7/trunk/Transims70/TripSum/TripSum.vcxproj
version7/trunk/Transims70/TripSum/Write_Group_File.cpp
version7/trunk/Transims70/TripSum/Write_Link_Trips.cpp
version7/trunk/Transims70/TripSum/Write_Loc_Trips.cpp
version7/trunk/Transims70/TripSum/Write_Zone_Trips.cpp
version7/trunk/Transims70/Validate/Validate.vcxproj
version7/trunk/Transims70/VissimXML/VissimXML.vcxproj
version7/trunk/Transims70/VolSpdData/VolSpdData.vcxproj
version7/trunk/Transims70/ZoneData/ZoneData.vcxproj
Added Paths:
-----------
version7/trunk/Transims70/DynusTPrep/
version7/trunk/Transims70/File_Service/Service_Summary_File.cpp
version7/trunk/Transims70/GTFSData/Build_Network.cpp
version7/trunk/Transims70/Include/Service_Summary.hpp
version7/trunk/Transims70/Include/Service_Summary_File.hpp
version7/trunk/Transims70/PlanSum/Write_Zone_Skims.cpp
version7/trunk/Transims70/RoutePrep/Build_Service.cpp
version7/trunk/Transims70/RoutePrep/Service_Summary.cpp
version7/trunk/Transims70/TransitNet/Merge_Routes.cpp
version7/trunk/Transims70/TransitNet/Stop_Node_Access.cpp
version7/trunk/Transims70/TripPrep/Growth_Factors.cpp
Property Changed:
----------------
version7/trunk/Transims70/x64/Release/
Modified: version7/trunk/Transims70/AddLRSData/AddLRSData.vcxproj
===================================================================
--- version7/trunk/Transims70/AddLRSData/AddLRSData.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/AddLRSData/AddLRSData.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{D8F6A781-48CC-46AA-9CFC-E74F7E774ABB}</ProjectGuid>
<RootNamespace>AddLRSData</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcJoin/ArcJoin.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcJoin/ArcJoin.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcJoin/ArcJoin.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -21,7 +21,7 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{59BB6487-B680-448F-AFF8-AC671FABEEBC}</ProjectGuid>
<RootNamespace>ArcJoin</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/ArcNet.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/ArcNet.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -11,7 +11,7 @@
ArcNet::ArcNet (void) : Draw_Service ()
{
Program ("ArcNet");
- Version (0);
+ Version (3);
Title ("Generate ArcView Shapefiles from a TRANSIMS Network");
System_File_Type optional_files [] = {
@@ -28,7 +28,7 @@
};
int draw_service_keys [] = {
DRAW_NETWORK_LANES, LANE_WIDTH, CENTER_ONEWAY_LINKS,
- LINK_DIRECTION_OFFSET, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
+ LINK_DIRECTION_OFFSET, SPLIT_LINK_DIRECTIONS, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
LOCATION_SIDE_OFFSET, SIGN_SIDE_OFFSET, SIGN_SETBACK, TRANSIT_STOP_SIDE_OFFSET,
TRANSIT_DIRECTION_OFFSET, TRANSIT_OVERLAP_FLAG, DRAW_ONEWAY_ARROWS, ONEWAY_ARROW_LENGTH,
ONEWAY_ARROW_SIDE_OFFSET, CURVED_CONNECTION_FLAG, 0
@@ -76,7 +76,7 @@
AB_Map_Flag (true);
route_flag = schedule_flag = driver_flag = service_flag = route_node_flag = false;
- timing_flag = subzone_flag = analysis_flag = centerline_flag = false;
+ timing_flag = subzone_flag = analysis_flag = centerline_flag = point_data_flag = false;
run_field = service_field = user_field = 0;
}
Modified: version7/trunk/Transims70/ArcNet/ArcNet.hpp
===================================================================
--- version7/trunk/Transims70/ArcNet/ArcNet.hpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/ArcNet.hpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -78,7 +78,7 @@
Points points;
- bool route_flag, schedule_flag, driver_flag, service_flag, route_node_flag;
+ bool route_flag, schedule_flag, driver_flag, service_flag, route_node_flag, point_data_flag;
bool timing_flag, subzone_flag, time_flag, zone_polygon_flag, centerline_flag, analysis_flag;
Dtime time;
Modified: version7/trunk/Transims70/ArcNet/ArcNet.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcNet/ArcNet.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/ArcNet.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{D74738D4-1FFB-4D4E-ADB7-99B350D03F77}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcNet</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcNet/Control.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Control.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -263,6 +263,8 @@
arcview_access.Shape_Type (LINE);
arcview_access.Set_Projection ();
+ point_data_flag = true;
+
Required_File_Check (arcview_access, ACCESS_LINK);
Required_File_Check (arcview_access, LOCATION);
Required_File_Check (arcview_access, PARKING);
@@ -478,6 +480,7 @@
Required_File_Check (arcview_route, TRANSIT_ROUTE);
Required_File_Check (arcview_route, TRANSIT_STOP);
+ point_data_flag = true;
if (!arcview_route.Open (Project_Filename (key))) {
File_Error ("Opening New Arc Transit Route File", arcview_route.Shape_Filename ());
Modified: version7/trunk/Transims70/ArcNet/Draw_Driver.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Draw_Driver.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Draw_Driver.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -11,7 +11,7 @@
void ArcNet::Draw_Driver (void)
{
int j, dir, overlap;
- int route_field, links_field, type_field, notes_field;
+ int route_field, links_field, type_field, name_field, notes_field;
double length, side, side_offset;
bool offset_flag, first;
@@ -22,15 +22,16 @@
Points_Itr pt_itr;
Driver_Itr driver_itr;
Db_Base *file;
-
+ Veh_Type_Data *veh_type_ptr;
+
file = System_File_Base (TRANSIT_DRIVER);
route_field = file->Required_Field ("ROUTE");
links_field = file->Required_Field ("LINKS", "NLINKS", "NUM_LINKS");
type_field = file->Optional_Field ("TYPE", "VEHTYPE", "VEH_TYPE");
+ name_field = file->Optional_Field ("NAME", "ROUTE_NAME", "RTNAME", "DESCRIPTION");
notes_field = file->Optional_Field (NOTES_FIELD_NAMES);
-
Show_Message ("Draw Transit Driver -- Record");
Set_Progress ();
@@ -53,7 +54,11 @@
arcview_driver.Put_Field (route_field, line_itr->Route ());
arcview_driver.Put_Field (links_field, (int) line_itr->driver_array.size ());
- arcview_driver.Put_Field (type_field, line_itr->Type ());
+
+ veh_type_ptr = &veh_type_array [line_itr->Type ()];
+
+ arcview_driver.Put_Field (type_field, veh_type_ptr->Type ());
+ arcview_driver.Put_Field (name_field, line_itr->Name ());
arcview_driver.Put_Field (notes_field, line_itr->Notes ());
//---- create the route shape ----
Modified: version7/trunk/Transims70/ArcNet/Draw_Links.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Draw_Links.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Draw_Links.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -13,16 +13,17 @@
void ArcNet::Draw_Links (void)
{
bool offset_flag, dir_flag, lnk_flag, first;
- int i, link_fld, index, lane, center, num_lanes, cap, type;
+ int i, link_fld, index, lane, center, num_lanes, cap, type, lvalue;
int len_fld, lanes_ab_fld, lanes_ba_fld, cap_ab_fld, cap_ba_fld, lane_cap_ab_fld, lane_cap_ba_fld, len_ratio_fld, ftype_fld;
int spd_ab_fld, spd_ba_fld, fspd_ab_fld, fspd_ba_fld, spd_fac_ab_fld, spd_fac_ba_fld, ft_cap_ab_fld, ft_cap_ba_fld, ft_spd_ab_fld, ft_spd_ba_fld;
int lane_cap_fld, spd_fac_fld, ft_cap_fld, ft_spd_fld;
- double side, start, length, width, ratio, x, y, dx, dy, spd, fspd;
+ double side, start, length, width, ratio, x, y, dx, dy, spd, fspd, value;
Int_Map_Itr map_itr;
Link_Data *link_ptr;
Dir_Data *dir_ptr;
Points_Itr pt_itr;
+ Link_File *link_file = 0;
link_fld = link_db.Optional_Field ("LINK", "ID");
offset_flag = (link_offset != 0.0);
@@ -65,6 +66,10 @@
if (lnk_flag) {
Show_Message (String ("Writing %s -- Record") % arcview_link.File_Type ());
+
+ if (split_dir_flag) {
+ link_file = System_Link_File ();
+ }
} else {
Show_Message (String ("Writing %s -- Record") % arcview_center.File_Type ());
}
@@ -158,6 +163,53 @@
if (arrow_flag) Add_Arrow (points);
arcview_link.insert (arcview_link.end (), points.begin (), points.end ());
+
+ if (split_dir_flag) {
+ if (i == 0) {
+ link_file->Copy_Fields (link_db);
+
+ link_file->Link (link_ptr->Link () * 10);
+ link_file->Lanes_BA (0);
+ link_file->Speed_BA (0);
+ link_file->Fspd_BA (0);
+ link_file->Cap_BA (0);
+
+ arcview_link.Copy_Fields (*link_file);
+
+ if (!arcview_link.Write_Record ()) {
+ Error (String ("Writing %s") % arcview_link.File_Type ());
+ }
+ arcview_link.parts.clear ();
+ arcview_link.clear ();
+
+ link_file->Copy_Fields (link_db);
+
+ link_file->Link (link_ptr->Link () * 10 + 1);
+
+ lvalue = link_file->Node_A ();
+ link_file->Node_A (link_file->Node_B ());
+ link_file->Node_B (lvalue);
+
+ link_file->Lanes_AB (link_file->Lanes_BA ());
+ link_file->Speed_AB (link_file->Speed_BA ());
+ link_file->Fspd_AB (link_file->Fspd_BA ());
+ link_file->Cap_AB (link_file->Cap_BA ());
+ link_file->Lanes_BA (0);
+ link_file->Speed_BA (0);
+ link_file->Fspd_BA (0);
+ link_file->Cap_BA (0);
+
+ value = link_file->Setback_A ();
+ link_file->Setback_A (link_file->Setback_B ());
+ link_file->Setback_B (value);
+
+ lvalue = link_file->Bearing_A ();
+ link_file->Bearing_A (link_file->Bearing_B ());
+ link_file->Bearing_B (lvalue);
+
+ arcview_link.Copy_Fields (*link_file);
+ }
+ }
}
} else {
Modified: version7/trunk/Transims70/ArcNet/Draw_Route.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Draw_Route.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Draw_Route.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -101,21 +101,41 @@
stop_ptr = &stop_array [stop_itr->Stop ()];
- map_itr = dir_map.find (stop_ptr->Link_Dir ());
- dir_index = map_itr->second;
-
count = 0;
length = 0;
- for (i=num_legs - 1; i >= 0; i--) {
- index = line_itr->driver_array [i];
- if (dir_index == index) break;
+ if (stop_ptr->Node () < 0) {
- dir_ptr = &dir_array [index];
- link_ptr = &link_array [dir_ptr->Link ()];
+ map_itr = dir_map.find (stop_ptr->Link_Dir ());
+ dir_index = map_itr->second;
- count++;
- length += UnRound (link_ptr->Length ());
+ for (i = num_legs - 1; i >= 0; i--) {
+ index = line_itr->driver_array [i];
+ if (dir_index == index) break;
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
+ } else {
+
+ for (i = num_legs - 1; i >= 0; i--) {
+ index = line_itr->driver_array [i];
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (dir_ptr->Dir () == 0) {
+ if (link_ptr->Bnode () == stop_ptr->Node ()) break;
+ } else {
+ if (link_ptr->Anode () == stop_ptr->Node ()) break;
+
+ }
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
}
if (i < 0) goto path_error;
@@ -131,21 +151,40 @@
stop_ptr = &stop_array [stop_itr->Stop ()];
- map_itr = dir_map.find (stop_ptr->Link_Dir ());
- dir_index = map_itr->second;
-
count = 0;
length = 0;
- for (i=0; i <= num_legs; i++) {
- index = line_itr->driver_array [i];
- if (dir_index == index) break;
+ if (stop_ptr->Node () < 0) {
+ map_itr = dir_map.find (stop_ptr->Link_Dir ());
+ dir_index = map_itr->second;
- dir_ptr = &dir_array [index];
- link_ptr = &link_array [dir_ptr->Link ()];
+ for (i = 0; i <= num_legs; i++) {
+ index = line_itr->driver_array [i];
+ if (dir_index == index) break;
- count++;
- length += UnRound (link_ptr->Length ());
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
+
+ } else {
+
+ for (i = 0; i <= num_legs; i++) {
+ index = line_itr->driver_array [i];
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (dir_ptr->Dir () == 0) {
+ if (link_ptr->Anode () == stop_ptr->Node ()) break;
+ } else {
+ if (link_ptr->Bnode () == stop_ptr->Node ()) break;
+ }
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
}
if (i > num_legs) goto path_error;
@@ -152,9 +191,10 @@
if (count > 0) {
Warning (String ("Route %d %s has %d links (%.1lf miles) before the first stop") % line_itr->Route () % line_itr->Name () % count % External_Units (length, MILES));
}
+
//---- create transit legs ----
- for (j=1; i <= num_legs; i++) {
+ for (j = 1; i <= num_legs; i++) {
dir_index = line_itr->driver_array [i];
dir_ptr = &dir_array [dir_index];
@@ -163,7 +203,7 @@
link_dir = dir_ptr->Link_Dir ();
link_ptr = &link_array [dir_ptr->Link ()];
-
+
link_len = UnRound (link_ptr->Length ());
side_offset = route_offset;
@@ -190,63 +230,79 @@
}
offset = side_offset;
- //---- check for stops ----
+ if (stop_ptr->Node () < 0) {
- while (stop_ptr->Link_Dir () == link_dir) {
- stop_off = UnRound (stop_ptr->Offset ());
+ //---- check for stops ----
- if (stop_off <= offset) {
- offset = stop_off - 2.0;
- }
- tot_len += length = stop_off - offset;
+ while (stop_ptr->Link_Dir () == link_dir) {
+ stop_off = UnRound (stop_ptr->Offset ());
- Link_Shape (link_ptr, dir, points, offset, length, side);
+ if (stop_off <= offset) {
+ offset = stop_off - 2.0;
+ }
+ tot_len += length = stop_off - offset;
- offset = stop_off;
+ Link_Shape (link_ptr, dir, points, offset, length, side);
- if (j != 1) {
+ offset = stop_off;
- //---- draw the link to the stop ----
+ if (j != 1) {
- pt_itr = points.begin ();
+ //---- draw the link to the stop ----
- if (side == 0.0 && pt_itr != points.end ()) {
- pt_itr++;
+ pt_itr = points.begin ();
+
+ if (side == 0.0 && pt_itr != points.end ()) {
+ pt_itr++;
+ }
+ for (; pt_itr != points.end (); pt_itr++) {
+ arcview_route.push_back (*pt_itr);
+ }
+ pt_itr = --points.end ();
+ } else {
+ //pt_itr = points.begin ();
+ pt_itr = --points.end ();
}
- for (; pt_itr != points.end (); pt_itr++) {
- arcview_route.push_back (*pt_itr);
+ stop_pt_itr = stop_pt.find (stop_ptr->Stop ());
+
+ if (stop_pt_itr != stop_pt.end ()) {
+ arcview_route.push_back (stop_pt_itr->second);
}
- pt_itr = --points.end ();
- } else {
- //pt_itr = points.begin ();
- pt_itr = --points.end ();
- }
- stop_pt_itr = stop_pt.find (stop_ptr->Stop ());
- if (stop_pt_itr != stop_pt.end ()) {
- arcview_route.push_back (stop_pt_itr->second);
- }
+ //---- find the next stop -----
- //---- find the next stop -----
+ if (++j > stops) break;
- if (++j > stops) break;
+ arcview_route.push_back (*pt_itr);
- arcview_route.push_back (*pt_itr);
+ stop_itr++;
- stop_itr++;
+ stop = stop_itr->Stop ();
- stop = stop_itr->Stop ();
+ stop_ptr = &stop_array [stop];
+ }
- stop_ptr = &stop_array [stop];
- }
+ //---- complete the link ----
- //---- complete the link ----
+ if (i < num_legs) {
+ tot_len += length = link_len - offset - side_offset;
- if (i < num_legs) {
- tot_len += length = link_len - offset - side_offset;
+ Link_Shape (link_ptr, dir, points, offset, length, side);
- Link_Shape (link_ptr, dir, points, offset, length, side);
+ pt_itr = points.begin ();
+ if (!offset_flag && pt_itr != points.end ()) {
+ pt_itr++;
+ }
+ for (; pt_itr != points.end (); pt_itr++) {
+ arcview_route.push_back (*pt_itr);
+ }
+ }
+ } else {
+ tot_len += link_len;
+
+ Link_Shape (link_ptr, dir, points, -1, -1, side);
+
pt_itr = points.begin ();
if (!offset_flag && pt_itr != points.end ()) {
Modified: version7/trunk/Transims70/ArcNet/Get_Location_Data.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Get_Location_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Get_Location_Data.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -15,20 +15,34 @@
Point_Map_Stat map_stat;
if (Data_Service::Get_Location_Data (file, location_rec)) {
- if (arcview_location.Is_Open ()) {
- arcview_location.Copy_Fields (file);
-
+ if (point_data_flag || arcview_location.Is_Open ()) {
setback = UnRound (location_rec.Setback ());
side = location_side;
if (setback > side) side = setback;
- Point_Offset (location_rec.Link (), location_rec.Dir (), location_rec.Offset (), side, arcview_location);
+ Point_Offset (location_rec.Link (), location_rec.Dir (), location_rec.Offset (), side, points);
- if (arcview_location.size () == 0) {
+ if (points.size () == 0) {
Warning (String ("Location %d could not be drawn") % location_rec.Location ());
return (false);
- } else if (!arcview_location.Write_Record ()) {
+ }
+ //---- save the location point data ----
+
+ map_stat = location_pt.insert (Point_Map_Data (location_rec.Location (), points [0]));
+
+ if (!map_stat.second) {
+ Warning ("Duplicate Location Record = ") << location_rec.Location ();
+ }
+ }
+
+ if (arcview_location.Is_Open ()) {
+ arcview_location.Copy_Fields (file);
+
+ arcview_location.clear ();
+ arcview_location.push_back (points [0]);
+
+ if (!arcview_location.Write_Record ()) {
Error (String ("Writing %s Location=%d") % arcview_location.File_Type () % location_rec.Location ());
}
Modified: version7/trunk/Transims70/ArcNet/Get_Parking_Data.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Get_Parking_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Get_Parking_Data.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -14,19 +14,31 @@
Park_Nest_Itr nest_itr;
if (Data_Service::Get_Parking_Data (file, parking_rec)) {
- if (arcview_parking.Is_Open ()) {
- arcview_parking.Copy_Fields (file, true);
-
+ if (point_data_flag || arcview_parking.Is_Open ()) {
if (!file.Nested ()) {
- Point_Offset (parking_rec.Link (), parking_rec.Dir (), parking_rec.Offset (), parking_side, arcview_parking);
+ Point_Offset (parking_rec.Link (), parking_rec.Dir (), parking_rec.Offset (), parking_side, points);
+ if (points.size () == 0) {
+ Warning (String ("Parking Lot %d could not be drawn") % parking_rec.Parking ());
+ }
+
//---- save the parking point data ----
- map_stat = parking_pt.insert (Point_Map_Data (parking_rec.Parking (), arcview_parking [0]));
+ map_stat = parking_pt.insert (Point_Map_Data (parking_rec.Parking (), points [0]));
if (!map_stat.second && file.Version () > 40) {
Warning ("Duplicate Parking Record = ") << parking_rec.Parking ();
}
+ }
+ }
+
+ if (arcview_parking.Is_Open ()) {
+ arcview_parking.Copy_Fields (file, true);
+
+ if (!file.Nested ()) {
+ arcview_parking.clear ();
+ arcview_parking.push_back (points [0]);
+
if (file.Num_Nest () == 0) {
file.Blank_Nested_Fields ();
file.Nested (true);
@@ -43,9 +55,7 @@
return (false);
}
}
- if (arcview_parking.size () == 0) {
- Warning (String ("Parking Lot %d could not be drawn") % parking_rec.Parking ());
- } else if (!arcview_parking.Write_Record ()) {
+ if (!arcview_parking.Write_Record ()) {
Error (String ("Writing %s Lot=%d") % arcview_parking.File_Type () % parking_rec.Parking ());
}
parking_rec.clear ();
Modified: version7/trunk/Transims70/ArcNet/Get_Stop_Data.cpp
===================================================================
--- version7/trunk/Transims70/ArcNet/Get_Stop_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcNet/Get_Stop_Data.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -11,28 +11,47 @@
bool ArcNet::Get_Stop_Data (Stop_File &file, Stop_Data &stop_rec)
{
Point_Map_Stat map_stat;
+ XYZ_Point point;
if (Data_Service::Get_Stop_Data (file, stop_rec)) {
- if (arcview_stop.Is_Open ()) {
- arcview_stop.Copy_Fields (file);
- Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, arcview_stop);
+ if (point_data_flag || arcview_stop.Is_Open ()) {
- if (arcview_stop.size () == 0) {
- Warning (String ("Transit Stop %d could not be drawn") % stop_rec.Stop ());
- return (false);
- } else if (!arcview_stop.Write_Record ()) {
- Error (String ("Writing %s Stop=%d") % arcview_stop.File_Type () % stop_rec.Stop ());
+ if (file.Stop_Node ()) {
+ Node_Data *node_ptr = &node_array [stop_rec.Node ()];
+
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
+ point.z = UnRound (node_ptr->Z ());
+
+ } else {
+ Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+
+ if (points.size () == 0) {
+ Warning (String ("Transit Stop %d could not be drawn") % stop_rec.Stop ());
+ return (false);
+ }
+ point = points [0];
}
-
//---- save the location point data ----
- map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), arcview_stop [0]));
+ map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), point));
if (!map_stat.second) {
Warning ("Duplicate Stop Record = ") << stop_rec.Stop ();
}
}
+
+ if (arcview_stop.Is_Open ()) {
+ arcview_stop.Copy_Fields (file);
+
+ arcview_stop.clear ();
+ arcview_stop.push_back (point);
+
+ if (!arcview_stop.Write_Record ()) {
+ Error (String ("Writing %s Stop=%d") % arcview_stop.File_Type () % stop_rec.Stop ());
+ }
+ }
return (true);
}
return (false);
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{26E85782-126B-4A33-A07D-A86D89A22707}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcPerf</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcPlan/ArcPlan.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcPlan/ArcPlan.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcPlan/ArcPlan.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{5E5EFEDA-F28D-4CDF-9E16-FA2F99098A55}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcPlan</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcPlan/Get_Stop_Data.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/Get_Stop_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcPlan/Get_Stop_Data.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -13,8 +13,20 @@
Point_Map_Stat map_stat;
if (Data_Service::Get_Stop_Data (file, stop_rec)) {
- Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+ if (file.Stop_Node ()) {
+ XYZ_Point point;
+ Node_Data *node_ptr = &node_array [stop_rec.Node ()];
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
+ point.x = UnRound (node_ptr->Z ());
+
+ points.clear ();
+ points.push_back (point);
+ } else {
+ Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+ }
+
//---- save the location point data ----
map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), points [0]));
Modified: version7/trunk/Transims70/ArcRider/ArcRider.cpp
===================================================================
--- version7/trunk/Transims70/ArcRider/ArcRider.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcRider/ArcRider.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -11,7 +11,7 @@
ArcRider::ArcRider (void) : Draw_Service ()
{
Program ("ArcRider");
- Version (0);
+ Version (1);
Title ("Ridership File Display Utility");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/ArcRider/ArcRider.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcRider/ArcRider.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcRider/ArcRider.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{8AD523A0-9546-464F-A4F3-0FFE6F3EF185}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcRider</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ArcRider/Control.cpp
===================================================================
--- version7/trunk/Transims70/ArcRider/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcRider/Control.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -47,7 +47,7 @@
line_flag = true;
arcview_line.Add_Field ("ROUTE", DB_INTEGER, 10);
- arcview_line.Add_Field ("NAME", DB_STRING, 40);
+ arcview_line.Add_Field ("NAME", DB_STRING, 60);
arcview_line.Add_Field ("MODE", DB_STRING, 16, TRANSIT_CODE);
arcview_line.Add_Field ("STOPS", DB_INTEGER, 10);
arcview_line.Add_Field ("RUNS", DB_INTEGER, 10);
@@ -85,7 +85,7 @@
sum_flag = true;
arcview_sum.Add_Field ("GROUP", DB_INTEGER, 10);
- arcview_sum.Add_Field ("NAME", DB_STRING, 40);
+ arcview_sum.Add_Field ("NAME", DB_STRING, 60);
arcview_sum.Add_Field ("ROUTES", DB_INTEGER, 10);
arcview_sum.Add_Field ("STOPS", DB_INTEGER, 10);
arcview_sum.Add_Field ("RUNS", DB_INTEGER, 10);
@@ -120,6 +120,9 @@
arcview_rider.Add_Field ("LINK", DB_INTEGER, 10);
arcview_rider.Add_Field ("DIR", DB_INTEGER, 1);
+ if (Notes_Name_Flag ()) {
+ arcview_rider.Add_Field ("NAME", DB_STRING, 40);
+ }
arcview_rider.Add_Field ("SEGMENT", DB_INTEGER, 2);
arcview_rider.Add_Field ("LENGTH", DB_DOUBLE, 10.2, ((Metric_Flag () ? METERS : FEET)));
arcview_rider.Add_Field ("BOARD", DB_INTEGER, 10);
@@ -179,7 +182,7 @@
on_off_flag = group_flag = true;
arcview_group.Add_Field ("GROUP", DB_INTEGER, 10);
- arcview_group.Add_Field ("NAME", DB_STRING, 40);
+ arcview_group.Add_Field ("NAME", DB_STRING, 60);
arcview_group.Add_Field ("BOARD", DB_INTEGER, 10);
arcview_group.Add_Field ("ALIGHT", DB_INTEGER, 10);
arcview_group.Add_Field ("TOTAL", DB_INTEGER, 10);
@@ -216,7 +219,7 @@
arcview_cap.Add_Field ("MODE", DB_STRING, 16);
arcview_cap.Add_Field ("ROUTE", DB_INTEGER, 10);
if (Notes_Name_Flag ()) {
- arcview_cap.Add_Field ("NAME", DB_STRING, 40);
+ arcview_cap.Add_Field ("NAME", DB_STRING, 60);
}
arcview_cap.Add_Field ("TIME", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
arcview_cap.Add_Field ("PERIOD", DB_INTEGER, 4);
Modified: version7/trunk/Transims70/ArcRider/Write_Riders.cpp
===================================================================
--- version7/trunk/Transims70/ArcRider/Write_Riders.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcRider/Write_Riders.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -10,7 +10,7 @@
void ArcRider::Write_Riders (void)
{
- int i, j, link, dir, link_field, dir_field, rider_field, seg_field, len_field, on_field, off_field, notes_field;
+ int i, j, link, dir, link_field, dir_field, name_field, rider_field, seg_field, len_field, on_field, off_field, notes_field;
int stop_num [20], nstop, stop, max_load, riders, seg, board, alight, *load, *enter, *cap_enter, capacity;
int start, end, cap_start, cap_end, runs, run_field, factor_field, cap_field, capfac_field, pen_field, node;
double width, offset, end_offset, len, length, stop_off [20], factor, capfac;
@@ -27,6 +27,7 @@
nstop = stop = start = cap_start = 0;
link_field = arcview_rider.Field_Number ("LINK");
dir_field = arcview_rider.Field_Number ("DIR");
+ name_field = arcview_rider.Field_Number ("NAME");
seg_field = arcview_rider.Field_Number ("SEGMENT");
len_field = arcview_rider.Field_Number ("LENGTH");
on_field = arcview_rider.Field_Number ("BOARD");
@@ -114,6 +115,7 @@
arcview_rider.Put_Field (link_field, link_ptr->Link ());
arcview_rider.Put_Field (dir_field, dir);
+ arcview_rider.Put_Field (name_field, link_ptr->Name ());
length = UnRound (link_ptr->Length ());
Modified: version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ArcSnapshot/ArcSnapshot.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{0C2FB245-D39A-4D92-87B9-5F446B91C6F4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcSnapshot</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/Converge_Service/Converge_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/Converge_Service/Converge_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Converge_Service/Converge_Service.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -74,7 +74,7 @@
<ProjectGuid>{6E283F95-CCA9-4AB8-B287-3B108D9D4D6B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Converge_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -22,7 +22,7 @@
<ProjectGuid>{C547021E-31F8-4DFF-BCFD-0F176E581B95}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ConvertTrips</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/CountSum/CountSum.vcxproj
===================================================================
--- version7/trunk/Transims70/CountSum/CountSum.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/CountSum/CountSum.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -21,7 +21,7 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{F8D36523-F1C2-437B-8D87-C98BED744701}</ProjectGuid>
<RootNamespace>CountSum</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/Data_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Control.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -132,6 +132,7 @@
for (count=0, str_itr = str_list.begin (); str_itr != str_list.end (); str_itr++, count++) {
if (count == 0) continue;
key = *str_itr;
+
key.Parse (parts, "=");
if (parts.size () != 2) {
@@ -154,6 +155,7 @@
} else {
mode = parts [0].Integer ();
num = Transit_Code (parts [1]);
+
if (num == ANY_TRANSIT) {
Error ("Route Mode Map is Out of Range");
}
Modified: version7/trunk/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Data_Service.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -39,7 +39,7 @@
perf_veh_type_map.assign (25, 0);
fare_flag = false;
- num_fare_zone = num_lane_flows = 0;
+ num_fare_zone = num_lane_flows = num_uturns = 0;
turn_shape_setback = TURN_SHAPE_SETBACK;
dat = this;
Modified: version7/trunk/Transims70/Data_Service/Data_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Data_Service.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -57,6 +57,7 @@
<ClInclude Include="..\Include\Route_Nodes_Data.hpp" />
<ClInclude Include="..\Include\Schedule_Data.hpp" />
<ClInclude Include="..\Include\Selection_Data.hpp" />
+ <ClInclude Include="..\Include\Service_Summary.hpp" />
<ClInclude Include="..\Include\Shape_Data.hpp" />
<ClInclude Include="..\Include\Signal_Data.hpp" />
<ClInclude Include="..\Include\Sign_Data.hpp" />
@@ -199,7 +200,7 @@
<ProjectGuid>{551DFC05-B83F-4952-BF03-51AA41B052F4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Data_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -320,6 +321,7 @@
<AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <StructMemberAlignment>Default</StructMemberAlignment>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Modified: version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Data_Service.vcxproj.filters 2019-04-05 20:32:00 UTC (rev 1718)
@@ -206,6 +206,9 @@
<ClInclude Include="..\Include\Travel_Time_Data.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Service_Summary.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Read_Access_Links.cpp">
Modified: version7/trunk/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -21,7 +21,7 @@
Initialize_Connects (file);
- num = 0;
+ num = num_uturns = 0;
while (file.Read ()) {
Show_Progress ();
@@ -52,6 +52,7 @@
continue;
} else {
connect_array.push_back (connect_rec);
+ if (connect_rec.Type () == UTURN) num_uturns++;
}
}
}
Modified: version7/trunk/Transims70/Data_Service/Read_Drivers.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Drivers.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Read_Drivers.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -142,8 +142,33 @@
}
last_index = *driver_itr;
}
- if (stop_ptr->Link_Dir () == dir_ptr->Link_Dir ()) break;
link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (stop_ptr->Node () < 0) {
+ if (stop_ptr->Link_Dir () == dir_ptr->Link_Dir ()) break;
+ } else {
+ if (stop_itr == line_itr->begin ()) {
+ if (dir_ptr->Dir () == 0) {
+ if (stop_ptr->Node () == link_ptr->Anode ()) break;
+ } else {
+ if (stop_ptr->Node () == link_ptr->Bnode ()) break;
+ }
+ } else {
+ if (dir_ptr->Dir () == 0) {
+ if (stop_ptr->Node () == link_ptr->Bnode ()) {
+ length += link_ptr->Length ();
+ offset = 0;
+ break;
+ }
+ } else {
+ if (stop_ptr->Node () == link_ptr->Anode ()) {
+ length += link_ptr->Length ();
+ offset = 0;
+ break;
+ }
+ }
+ }
+ }
length += link_ptr->Length () - offset;
offset = 0;
}
Modified: version7/trunk/Transims70/Data_Service/Read_Locations.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Locations.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Read_Locations.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -146,8 +146,13 @@
if (file.Version () <= 40) return (false);
}
- location_rec.Origin (-1);
- location_rec.Destination (-1);
+ if (file.Origin_Destination ()) {
+ location_rec.Origin (file.Origin ());
+ location_rec.Destination (file.Destination ());
+ } else {
+ location_rec.Origin (-1);
+ location_rec.Destination (-1);
+ }
location_rec.Notes (file.Notes ());
return (true);
}
Modified: version7/trunk/Transims70/Data_Service/Read_Stops.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Stops.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Read_Stops.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -81,21 +81,31 @@
{
int link, dir, offset, use;
+ Int_Map_Itr map_itr;
+
stop_rec.Stop (file.Stop ());
if (stop_rec.Stop () == 0) return (false);
- //---- check/convert the link number ----
+ if (file.Stop_Node ()) {
+ map_itr = node_map.find (file.Node ());
+ if (map_itr == node_map.end ()) return (false);
- link = file.Link ();
- dir = file.Dir ();
- offset = Round (file.Offset ());
+ stop_rec.Node (map_itr->second);
+ } else {
- if (Set_Link_Direction (file, link, dir, offset) == 0) return (false);
-
- stop_rec.Link (link);
- stop_rec.Dir (dir);
- stop_rec.Offset (offset);
+ //---- check/convert the link number ----
+ link = file.Link ();
+ dir = file.Dir ();
+ offset = Round (file.Offset ());
+
+ if (Set_Link_Direction (file, link, dir, offset) == 0) return (false);
+
+ stop_rec.Link (link);
+ stop_rec.Dir (dir);
+ stop_rec.Offset (offset);
+ }
+
//----- optional fields ----
use = file.Use ();
Modified: version7/trunk/Transims70/Data_Service/Write_Locations.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Locations.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Write_Locations.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -56,6 +56,10 @@
}
file.Zone (zone);
+ if (file.Origin_Destination ()) {
+ file.Origin (data.Origin ());
+ file.Destination (data.Destination ());
+ }
file.Notes (data.Notes ());
if (!file.Write ()) {
Modified: version7/trunk/Transims70/Data_Service/Write_Stops.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Stops.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Data_Service/Write_Stops.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -35,15 +35,26 @@
int Data_Service::Put_Stop_Data (Stop_File &file, Stop_Data &data)
{
- Link_Data *link_ptr;
+ if (file.Stop_Node ()) {
+ if (data.Node () < 0) return (0);
- link_ptr = &link_array [data.Link ()];
+ Node_Data *node_ptr = &node_array [data.Node ()];
+ if (node_ptr->Node () < 0) return (0);
+
+ file.Node (node_ptr->Node ());
+ } else {
+ if (data.Link () < 0) return (0);
+
+ Link_Data *link_ptr = &link_array [data.Link ()];
+
+ file.Link (link_ptr->Link ());
+ file.Dir (data.Dir ());
+ file.Offset (UnRound (data.Offset ()));
+ }
file.Stop (data.Stop ());
file.Name (data.Name ());
- file.Link (link_ptr->Link ());
- file.Dir (data.Dir ());
- file.Offset (UnRound (data.Offset ()));
+
file.Use (data.Use ());
file.Type (data.Type ());
file.Space (data.Space ());
Modified: version7/trunk/Transims70/Draw_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Draw_Service/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Draw_Service/Control.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -51,8 +51,12 @@
if (Control_Key_Status (LINK_DIRECTION_OFFSET)) {
link_offset = Get_Control_Double (LINK_DIRECTION_OFFSET);
- if (link_offset == 0.0 && Control_Key_Status (DRAW_AB_DIRECTION)) {
- direction_flag = Get_Control_Flag (DRAW_AB_DIRECTION);
+ if (link_offset == 0.0) {
+ if (Control_Key_Status (DRAW_AB_DIRECTION)) {
+ direction_flag = Get_Control_Flag (DRAW_AB_DIRECTION);
+ }
+ } else if (Control_Key_Status (SPLIT_LINK_DIRECTIONS)) {
+ split_dir_flag = Get_Control_Flag (SPLIT_LINK_DIRECTIONS);
}
}
Modified: version7/trunk/Transims70/Draw_Service/Draw_Service.cpp
===================================================================
--- version7/trunk/Transims70/Draw_Service/Draw_Service.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Draw_Service/Draw_Service.cpp 2019-04-05 20:32:00 UTC (rev 1718)
@@ -12,7 +12,7 @@
{
Service_Level (DRAW_SERVICE);
- lanes_flag = center_flag = direction_flag = overlap_flag = arrow_flag = curve_flag = shape_flag = bandwidth_flag = false;
+ lanes_flag = center_flag = direction_flag = overlap_flag = arrow_flag = curve_flag = shape_flag = bandwidth_flag = split_dir_flag = false;
link_offset = pocket_side = parking_side = location_side = sign_side = sign_setback = 0.0;
stop_side = route_offset = lane_width = arrow_length = arrow_side = 0.0;
@@ -32,6 +32,7 @@
{ LANE_WIDTH, "LANE_WIDTH", LEVEL0, OPT_KEY, FLOAT_KEY, "12.0 feet", "0..150 feet", NO_HELP },
{ CENTER_ONEWAY_LINKS, "CENTER_ONEWAY_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ LINK_DIRECTION_OFFSET, "LINK_DIRECTION_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0 feet", "0..200 feet", NO_HELP },
+ { SPLIT_LINK_DIRECTIONS, "SPLIT_LINK_DIRECTIONS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ DRAW_AB_DIRECTION, "DRAW_AB_DIRECTION", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ POCKET_SIDE_OFFSET, "POCKET_SIDE_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "7.0 feet", "0..300 feet", NO_HELP },
{ PARKING_SIDE_OFFSET, "PARKING_SIDE_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "10.0 feet", "0..600 feet", NO_HELP },
Modified: version7/trunk/Transims70/Draw_Service/Draw_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/Draw_Service/Draw_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/Draw_Service/Draw_Service.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -44,7 +44,7 @@
<ProjectGuid>{BFC302F1-3416-4C9B-B4B1-91763557022A}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Draw_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/EventSum/EventSum.vcxproj
===================================================================
--- version7/trunk/Transims70/EventSum/EventSum.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/EventSum/EventSum.vcxproj 2019-04-05 20:32:00 UTC (rev 1718)
@@ -23,7 +23,7 @@
<ProjectGuid>{36431123-911A-4D5D-A8E9-18C71DB6A9AA}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>EventSum</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/trunk/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/trunk/Transims70/FileFormat/FileFormat.cpp 2019-04-05 20:12:11 UTC (rev 1717)
+++ version7/trunk/Transims70/FileFormat/FileFormat.cpp 2019-04-05 20:32:00 UTC (rev 1718...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2019-04-05 20:12:16
|
Revision: 1717
http://sourceforge.net/p/transims/code/1717
Author: davidroden
Date: 2019-04-05 20:12:11 +0000 (Fri, 05 Apr 2019)
Log Message:
-----------
TRANSIMS Version 7.3 from AECOM branch 1716
SysLib
The Field_Number method was expanded to accept a list of fields names. The logic used to write time data has short binary integers was modified to store rounded seconds rather than decimal seconds. Additional options for water-based travel were added to the facility type, use restrictions, transit mode and trip mode fields. MIDNIGHT and N/A options were added to the time value input options. An additional Sub_Shape method was added to extract a shape between two near-by points.
File_Service
Set_System_File method was added to re-direct the system file processing logic to an additional data file. Origin and Destination fields were added to the default data fields within a Location data file. A new Service Summary File was added for transit route generation. A Node field was added to the Transit Stop file as an alternative to the link-offset location method.
Data_Service
A new Service Summary Data structure was added. Transit Stop processing includes logic for the Node field option. The Transit Driver processing includes logic for stop nodes.
ArcNet 7.3.3
Additional logic was added to improve Transit Driver vehicle and route type mapping. Route and Stop drawing include logic for node-based transit stops. Access link drawing no longer requires output of parking, location and transit stop shapefiles.
ArcRider 7.3.1
Additional name fields were included.
DynusTPrep 7.3.5
New program to convert DynusT networks and trajectory files to TRANSIMS format.
FileFormat 7.3.2
Multiple field name options can now be used to extract data within a user program from a data file.
GridData 7.3.1
LINK_DATA_FILTER control key was added to provide a range for link data processing.
GTFSData 7.3.1
Link and Node input files were made optional and new Link, Node and Shape files can be generated from the GTFS transit routes. When creating link records, the shape between two stops on each route is used. The stops are located at the node using the new transit stop data option. The new waterway options and modes are also used. The line processing logic was modified to base line generation on the route alignment rather than the head sign text.
LinkSum 7.3.1
The updated SysLib, File Service and Data Service logic was included.
LocationData 7.3.1
Logic was added to create a new Zone file coordinates from the centroid of the zone boundary polygons.
PlanSum 7.3.3
NEW_ZONE_SKIM_FILE/FORMAT keys were added to create zone skims from travel plans. Additional logic was added to the station transfer summaries.
PlanTrips 7.3.2
Logic was added to extract the origin-destination types and vehicle type data from the plan file.
RiderSum 7.3.1
Logic was added to the group route profiles to build the stop list from the line with the most stops rather than the lines in line number order.
RoutePrep 7.3.5
Logic was added to edit transit route or build new transit routes for line summary data. New control keys include SERVICE_SUMMARY_FILE, SERVICE_SUMMARY_FORMAT, NEW_SERVICE_SUMMARY_FILE, NEW_SERVICE_SUMMARY_FORMAT, BASE_ROUTE_FILE, BASE_SCHEDULE_FILE, BASE_DRIVER_FILE, SERVICE_PERIOD_STOP_FILE, MAXIMUM_AM_PEAK_PERIOD, MAXIMUM_PM_PEAK_PERIOD, EW_BASE_SCHEDULE_FILE, NEW_LINE_GROUP_FILE. Routes can be extended at the beginning or end of the route and stops can be added in the middle of routes. The new Service Summary file can be used to build new routes and schedules given beginning and ending stations and service periods, headways, and vehicle type shares using route templates by time of day.
Router 7.3.4
Optional compile keys can dump path trees in shapefile format. The node-based origin-destination plan building was enhanced.
TripPrep 7.3.3
New control keys include BASE_TRIP_FILE, BASE_TRIP_FORMAT, GROWTH_TRIP_FILE, GROWTH_TRIP_FORMAT, MINIMUM_GROWTH_FACTOR, and MAXIMUM_GROWTH_FACTOR to calculate origin and destination activity location growth factors from two trip files and apply those growth factors to a different trip file. This is primarily used to apply OD matrix adjustments based on traffic counts to a future year trip file.
TripSum 7.3.3
The logic was updated to calculate trip end totals based on fractional trip weights on each plan.
Modified Paths:
--------------
version7/branches/aecom/Transims70/AddLRSData/AddLRSData.vcxproj
version7/branches/aecom/Transims70/ArcJoin/ArcJoin.vcxproj
version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
version7/branches/aecom/Transims70/ArcNet/ArcNet.hpp
version7/branches/aecom/Transims70/ArcNet/ArcNet.vcxproj
version7/branches/aecom/Transims70/ArcNet/Control.cpp
version7/branches/aecom/Transims70/ArcNet/Draw_Driver.cpp
version7/branches/aecom/Transims70/ArcNet/Draw_Route.cpp
version7/branches/aecom/Transims70/ArcNet/Get_Location_Data.cpp
version7/branches/aecom/Transims70/ArcNet/Get_Parking_Data.cpp
version7/branches/aecom/Transims70/ArcNet/Get_Stop_Data.cpp
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj
version7/branches/aecom/Transims70/ArcPlan/ArcPlan.vcxproj
version7/branches/aecom/Transims70/ArcPlan/Get_Stop_Data.cpp
version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
version7/branches/aecom/Transims70/ArcRider/ArcRider.vcxproj
version7/branches/aecom/Transims70/ArcRider/Control.cpp
version7/branches/aecom/Transims70/ArcRider/Write_Riders.cpp
version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.vcxproj
version7/branches/aecom/Transims70/Converge_Service/Converge_Service.vcxproj
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj
version7/branches/aecom/Transims70/CountSum/CountSum.vcxproj
version7/branches/aecom/Transims70/Data_Service/Control.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Drivers.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Locations.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Stops.cpp
version7/branches/aecom/Transims70/Draw_Service/Draw_Service.vcxproj
version7/branches/aecom/Transims70/EventSum/EventSum.vcxproj
version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.vcxproj
version7/branches/aecom/Transims70/File_Service/Driver_File.cpp
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
version7/branches/aecom/Transims70/File_Service/Line_File.cpp
version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp
version7/branches/aecom/Transims70/File_Service/Location_File.cpp
version7/branches/aecom/Transims70/File_Service/Stop_File.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
version7/branches/aecom/Transims70/Fratar/Fratar.vcxproj
version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Build_Shapes.cpp
version7/branches/aecom/Transims70/GTFSData/Control.cpp
version7/branches/aecom/Transims70/GTFSData/Draw_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Execute.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.hpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj.filters
version7/branches/aecom/Transims70/GTFSData/GTFS_Data.hpp
version7/branches/aecom/Transims70/GTFSData/Read_Shapes.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Stop_Times.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Stops.cpp
version7/branches/aecom/Transims70/Gravity/Gravity.vcxproj
version7/branches/aecom/Transims70/GridData/Control.cpp
version7/branches/aecom/Transims70/GridData/GridData.cpp
version7/branches/aecom/Transims70/GridData/GridData.hpp
version7/branches/aecom/Transims70/GridData/GridData.vcxproj
version7/branches/aecom/Transims70/GridData/Link_Grid.cpp
version7/branches/aecom/Transims70/Include/Control_Service.hpp
version7/branches/aecom/Transims70/Include/Data_Service.hpp
version7/branches/aecom/Transims70/Include/File_Service.hpp
version7/branches/aecom/Transims70/Include/Location_File.hpp
version7/branches/aecom/Transims70/Include/Router_Service.hpp
version7/branches/aecom/Transims70/Include/Shape_Tools.hpp
version7/branches/aecom/Transims70/Include/Stop_Data.hpp
version7/branches/aecom/Transims70/Include/Stop_File.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/TypeDefs.hpp
version7/branches/aecom/Transims70/IntControl/IntControl.vcxproj
version7/branches/aecom/Transims70/LineSum/LineSum.vcxproj
version7/branches/aecom/Transims70/LinkData/LinkData.vcxproj
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
version7/branches/aecom/Transims70/LocationData/Control.cpp
version7/branches/aecom/Transims70/LocationData/Execute.cpp
version7/branches/aecom/Transims70/LocationData/LocationData.cpp
version7/branches/aecom/Transims70/LocationData/LocationData.hpp
version7/branches/aecom/Transims70/LocationData/LocationData.vcxproj
version7/branches/aecom/Transims70/LocationData/Read_Boundary.cpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.vcxproj
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj
version7/branches/aecom/Transims70/NJFare2/NJFare2.vcxproj
version7/branches/aecom/Transims70/NetDiff/NetDiff.vcxproj
version7/branches/aecom/Transims70/NetFix/NetFix.vcxproj
version7/branches/aecom/Transims70/NetMerge/NetMerge.vcxproj
version7/branches/aecom/Transims70/NetPrep/NetPrep.vcxproj
version7/branches/aecom/Transims70/NewFormat/NewFormat.vcxproj
version7/branches/aecom/Transims70/NewLandUse/NewLandUse.vcxproj
version7/branches/aecom/Transims70/PNRSplit/PNRSplit.vcxproj
version7/branches/aecom/Transims70/PathSkim/PathSkim.vcxproj
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.vcxproj
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.vcxproj
version7/branches/aecom/Transims70/PlanSum/Control.cpp
version7/branches/aecom/Transims70/PlanSum/Execute.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.hpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.vcxproj
version7/branches/aecom/Transims70/PlanSum/PlanSum.vcxproj.filters
version7/branches/aecom/Transims70/PlanSum/Plan_Processing.cpp
version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp
version7/branches/aecom/Transims70/PlanSum/Write_Details.cpp
version7/branches/aecom/Transims70/PlanSum/Write_Groups.cpp
version7/branches/aecom/Transims70/PlanTrips/PlanTrips.cpp
version7/branches/aecom/Transims70/PlanTrips/PlanTrips.vcxproj
version7/branches/aecom/Transims70/PlanTrips/Put_Trip_Data.cpp
version7/branches/aecom/Transims70/PlanTrips/Read_Plan.cpp
version7/branches/aecom/Transims70/ProblemSelect/ProblemSelect.vcxproj
version7/branches/aecom/Transims70/Progression/Progression.vcxproj
version7/branches/aecom/Transims70/Relocate/Relocate.vcxproj
version7/branches/aecom/Transims70/Reschedule/Reschedule.vcxproj
version7/branches/aecom/Transims70/RiderSum/Group_Rider_Report.cpp
version7/branches/aecom/Transims70/RiderSum/RiderSum.cpp
version7/branches/aecom/Transims70/RiderSum/RiderSum.vcxproj
version7/branches/aecom/Transims70/RiderSum/Write_Group_Rider.cpp
version7/branches/aecom/Transims70/RiderSum/Write_Stop_Group.cpp
version7/branches/aecom/Transims70/RiderSum/Write_Stop_VehTypes.cpp
version7/branches/aecom/Transims70/RoutePrep/Control.cpp
version7/branches/aecom/Transims70/RoutePrep/Execute.cpp
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.cpp
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.hpp
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.vcxproj
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.vcxproj.filters
version7/branches/aecom/Transims70/Router/Control.cpp
version7/branches/aecom/Transims70/Router/Execute.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router/Router.hpp
version7/branches/aecom/Transims70/Router/Router.vcxproj
version7/branches/aecom/Transims70/Router_Service/Build_Path.cpp
version7/branches/aecom/Transims70/Router_Service/Drive_Path.cpp
version7/branches/aecom/Transims70/Router_Service/Drive_Plan.cpp
version7/branches/aecom/Transims70/Router_Service/Execute.cpp
version7/branches/aecom/Transims70/Router_Service/Parking_Access.cpp
version7/branches/aecom/Transims70/Router_Service/Path_Builder.hpp
version7/branches/aecom/Transims70/Router_Service/Router_Service.cpp
version7/branches/aecom/Transims70/Router_Service/Router_Service.vcxproj
version7/branches/aecom/Transims70/Router_Service/Trace_Path.cpp
version7/branches/aecom/Transims70/Router_Service/Transit_Plan.cpp
version7/branches/aecom/Transims70/Select_Service/Select_Service.vcxproj
version7/branches/aecom/Transims70/SimSubareas/SimSubareas.vcxproj
version7/branches/aecom/Transims70/Simulator/Simulator.vcxproj
version7/branches/aecom/Transims70/Simulator_Service/Simulator_Service.vcxproj
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.vcxproj
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.vcxproj
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Base.cpp
version7/branches/aecom/Transims70/SysLib/Program/Get_Token.cpp
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Execution_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/SysLib.vcxproj
version7/branches/aecom/Transims70/SysLib/Tools/Dtime.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Shape_Tools.cpp
version7/branches/aecom/Transims70/SysLib/Tools/String.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Time_Periods.cpp
version7/branches/aecom/Transims70/TcadLib/TcadLib.vcxproj
version7/branches/aecom/Transims70/TppLib/TppLib.vcxproj
version7/branches/aecom/Transims70/TransimsNet/TransimsNet.vcxproj
version7/branches/aecom/Transims70/TransitAccess/TransitAccess.vcxproj
version7/branches/aecom/Transims70/TransitNet/Control.cpp
version7/branches/aecom/Transims70/TransitNet/Data_Setup.cpp
version7/branches/aecom/Transims70/TransitNet/Execute.cpp
version7/branches/aecom/Transims70/TransitNet/Station_Access.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.hpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj.filters
version7/branches/aecom/Transims70/TripPrep/Control.cpp
version7/branches/aecom/Transims70/TripPrep/Execute.cpp
version7/branches/aecom/Transims70/TripPrep/Read_Trips.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.hpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj.filters
version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.vcxproj
version7/branches/aecom/Transims70/Validate/Validate.vcxproj
version7/branches/aecom/Transims70/VissimXML/VissimXML.vcxproj
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj
version7/branches/aecom/Transims70/ZoneData/ZoneData.vcxproj
Added Paths:
-----------
version7/branches/aecom/Transims70/DynusTPrep/
version7/branches/aecom/Transims70/DynusTPrep/Control.cpp
version7/branches/aecom/Transims70/DynusTPrep/DynusTPrep.cpp
version7/branches/aecom/Transims70/DynusTPrep/DynusTPrep.hpp
version7/branches/aecom/Transims70/DynusTPrep/DynusTPrep.vcxproj
version7/branches/aecom/Transims70/DynusTPrep/DynusTPrep.vcxproj.filters
version7/branches/aecom/Transims70/DynusTPrep/Execute.cpp
version7/branches/aecom/Transims70/DynusTPrep/Read_DynusT.cpp
version7/branches/aecom/Transims70/DynusTPrep/Read_Trajectory.cpp
version7/branches/aecom/Transims70/File_Service/Service_Summary_File.cpp
version7/branches/aecom/Transims70/GTFSData/Build_Network.cpp
version7/branches/aecom/Transims70/Include/Service_Summary.hpp
version7/branches/aecom/Transims70/Include/Service_Summary_File.hpp
version7/branches/aecom/Transims70/PlanSum/Write_Zone_Skims.cpp
version7/branches/aecom/Transims70/RoutePrep/Build_Service.cpp
version7/branches/aecom/Transims70/RoutePrep/Service_Summary.cpp
version7/branches/aecom/Transims70/TransitNet/Merge_Routes.cpp
version7/branches/aecom/Transims70/TransitNet/Stop_Node_Access.cpp
version7/branches/aecom/Transims70/TripPrep/Growth_Factors.cpp
Removed Paths:
-------------
version7/branches/aecom/Transims70/x64/Release/MatrixData.exe
Property Changed:
----------------
version7/branches/aecom/Transims70/x64/Release/
Modified: version7/branches/aecom/Transims70/AddLRSData/AddLRSData.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/AddLRSData/AddLRSData.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/AddLRSData/AddLRSData.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{D8F6A781-48CC-46AA-9CFC-E74F7E774ABB}</ProjectGuid>
<RootNamespace>AddLRSData</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcJoin/ArcJoin.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcJoin/ArcJoin.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcJoin/ArcJoin.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -21,7 +21,7 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{59BB6487-B680-448F-AFF8-AC671FABEEBC}</ProjectGuid>
<RootNamespace>ArcJoin</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -11,7 +11,7 @@
ArcNet::ArcNet (void) : Draw_Service ()
{
Program ("ArcNet");
- Version (1);
+ Version (3);
Title ("Generate ArcView Shapefiles from a TRANSIMS Network");
System_File_Type optional_files [] = {
@@ -78,7 +78,7 @@
AB_Map_Flag (true);
route_flag = schedule_flag = driver_flag = service_flag = route_node_flag = false;
- timing_flag = subzone_flag = analysis_flag = centerline_flag = false;
+ timing_flag = subzone_flag = analysis_flag = centerline_flag = point_data_flag = false;
run_field = service_field = user_field = 0;
zone_join_field = -1;
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.hpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.hpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.hpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -83,7 +83,7 @@
int zone_join_field;
Points_Map zone_polygons;
- bool route_flag, schedule_flag, driver_flag, service_flag, route_node_flag;
+ bool route_flag, schedule_flag, driver_flag, service_flag, route_node_flag, point_data_flag;
bool timing_flag, subzone_flag, time_flag, zone_polygon_flag, centerline_flag, analysis_flag;
Dtime time;
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{D74738D4-1FFB-4D4E-ADB7-99B350D03F77}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcNet</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcNet/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -284,6 +284,8 @@
arcview_access.Shape_Type (LINE);
arcview_access.Set_Projection ();
+ point_data_flag = true;
+
Required_File_Check (arcview_access, ACCESS_LINK);
Required_File_Check (arcview_access, LOCATION);
Required_File_Check (arcview_access, PARKING);
@@ -499,6 +501,7 @@
Required_File_Check (arcview_route, TRANSIT_ROUTE);
Required_File_Check (arcview_route, TRANSIT_STOP);
+ point_data_flag = true;
if (!arcview_route.Open (Project_Filename (key))) {
File_Error ("Opening New Arc Transit Route File", arcview_route.Shape_Filename ());
Modified: version7/branches/aecom/Transims70/ArcNet/Draw_Driver.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Draw_Driver.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Draw_Driver.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -11,7 +11,7 @@
void ArcNet::Draw_Driver (void)
{
int j, dir, overlap;
- int route_field, links_field, type_field, notes_field;
+ int route_field, links_field, type_field, name_field, notes_field;
double length, side, side_offset;
bool offset_flag, first;
@@ -22,15 +22,16 @@
Points_Itr pt_itr;
Driver_Itr driver_itr;
Db_Base *file;
-
+ Veh_Type_Data *veh_type_ptr;
+
file = System_File_Base (TRANSIT_DRIVER);
route_field = file->Required_Field ("ROUTE");
links_field = file->Required_Field ("LINKS", "NLINKS", "NUM_LINKS");
type_field = file->Optional_Field ("TYPE", "VEHTYPE", "VEH_TYPE");
+ name_field = file->Optional_Field ("NAME", "ROUTE_NAME", "RTNAME", "DESCRIPTION");
notes_field = file->Optional_Field (NOTES_FIELD_NAMES);
-
Show_Message ("Draw Transit Driver -- Record");
Set_Progress ();
@@ -53,7 +54,11 @@
arcview_driver.Put_Field (route_field, line_itr->Route ());
arcview_driver.Put_Field (links_field, (int) line_itr->driver_array.size ());
- arcview_driver.Put_Field (type_field, line_itr->Type ());
+
+ veh_type_ptr = &veh_type_array [line_itr->Type ()];
+
+ arcview_driver.Put_Field (type_field, veh_type_ptr->Type ());
+ arcview_driver.Put_Field (name_field, line_itr->Name ());
arcview_driver.Put_Field (notes_field, line_itr->Notes ());
//---- create the route shape ----
Modified: version7/branches/aecom/Transims70/ArcNet/Draw_Route.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Draw_Route.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Draw_Route.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -101,21 +101,41 @@
stop_ptr = &stop_array [stop_itr->Stop ()];
- map_itr = dir_map.find (stop_ptr->Link_Dir ());
- dir_index = map_itr->second;
-
count = 0;
length = 0;
- for (i=num_legs - 1; i >= 0; i--) {
- index = line_itr->driver_array [i];
- if (dir_index == index) break;
+ if (stop_ptr->Node () < 0) {
- dir_ptr = &dir_array [index];
- link_ptr = &link_array [dir_ptr->Link ()];
+ map_itr = dir_map.find (stop_ptr->Link_Dir ());
+ dir_index = map_itr->second;
- count++;
- length += UnRound (link_ptr->Length ());
+ for (i = num_legs - 1; i >= 0; i--) {
+ index = line_itr->driver_array [i];
+ if (dir_index == index) break;
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
+ } else {
+
+ for (i = num_legs - 1; i >= 0; i--) {
+ index = line_itr->driver_array [i];
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (dir_ptr->Dir () == 0) {
+ if (link_ptr->Bnode () == stop_ptr->Node ()) break;
+ } else {
+ if (link_ptr->Anode () == stop_ptr->Node ()) break;
+
+ }
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
}
if (i < 0) goto path_error;
@@ -131,21 +151,40 @@
stop_ptr = &stop_array [stop_itr->Stop ()];
- map_itr = dir_map.find (stop_ptr->Link_Dir ());
- dir_index = map_itr->second;
-
count = 0;
length = 0;
- for (i=0; i <= num_legs; i++) {
- index = line_itr->driver_array [i];
- if (dir_index == index) break;
+ if (stop_ptr->Node () < 0) {
+ map_itr = dir_map.find (stop_ptr->Link_Dir ());
+ dir_index = map_itr->second;
- dir_ptr = &dir_array [index];
- link_ptr = &link_array [dir_ptr->Link ()];
+ for (i = 0; i <= num_legs; i++) {
+ index = line_itr->driver_array [i];
+ if (dir_index == index) break;
- count++;
- length += UnRound (link_ptr->Length ());
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
+
+ } else {
+
+ for (i = 0; i <= num_legs; i++) {
+ index = line_itr->driver_array [i];
+
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (dir_ptr->Dir () == 0) {
+ if (link_ptr->Anode () == stop_ptr->Node ()) break;
+ } else {
+ if (link_ptr->Bnode () == stop_ptr->Node ()) break;
+ }
+ count++;
+ length += UnRound (link_ptr->Length ());
+ }
}
if (i > num_legs) goto path_error;
@@ -152,9 +191,10 @@
if (count > 0) {
Warning (String ("Route %d %s has %d links (%.1lf miles) before the first stop") % line_itr->Route () % line_itr->Name () % count % External_Units (length, MILES));
}
+
//---- create transit legs ----
- for (j=1; i <= num_legs; i++) {
+ for (j = 1; i <= num_legs; i++) {
dir_index = line_itr->driver_array [i];
dir_ptr = &dir_array [dir_index];
@@ -163,7 +203,7 @@
link_dir = dir_ptr->Link_Dir ();
link_ptr = &link_array [dir_ptr->Link ()];
-
+
link_len = UnRound (link_ptr->Length ());
side_offset = route_offset;
@@ -190,63 +230,79 @@
}
offset = side_offset;
- //---- check for stops ----
+ if (stop_ptr->Node () < 0) {
- while (stop_ptr->Link_Dir () == link_dir) {
- stop_off = UnRound (stop_ptr->Offset ());
+ //---- check for stops ----
- if (stop_off <= offset) {
- offset = stop_off - 2.0;
- }
- tot_len += length = stop_off - offset;
+ while (stop_ptr->Link_Dir () == link_dir) {
+ stop_off = UnRound (stop_ptr->Offset ());
- Link_Shape (link_ptr, dir, points, offset, length, side);
+ if (stop_off <= offset) {
+ offset = stop_off - 2.0;
+ }
+ tot_len += length = stop_off - offset;
- offset = stop_off;
+ Link_Shape (link_ptr, dir, points, offset, length, side);
- if (j != 1) {
+ offset = stop_off;
- //---- draw the link to the stop ----
+ if (j != 1) {
- pt_itr = points.begin ();
+ //---- draw the link to the stop ----
- if (side == 0.0 && pt_itr != points.end ()) {
- pt_itr++;
+ pt_itr = points.begin ();
+
+ if (side == 0.0 && pt_itr != points.end ()) {
+ pt_itr++;
+ }
+ for (; pt_itr != points.end (); pt_itr++) {
+ arcview_route.push_back (*pt_itr);
+ }
+ pt_itr = --points.end ();
+ } else {
+ //pt_itr = points.begin ();
+ pt_itr = --points.end ();
}
- for (; pt_itr != points.end (); pt_itr++) {
- arcview_route.push_back (*pt_itr);
+ stop_pt_itr = stop_pt.find (stop_ptr->Stop ());
+
+ if (stop_pt_itr != stop_pt.end ()) {
+ arcview_route.push_back (stop_pt_itr->second);
}
- pt_itr = --points.end ();
- } else {
- //pt_itr = points.begin ();
- pt_itr = --points.end ();
- }
- stop_pt_itr = stop_pt.find (stop_ptr->Stop ());
- if (stop_pt_itr != stop_pt.end ()) {
- arcview_route.push_back (stop_pt_itr->second);
- }
+ //---- find the next stop -----
- //---- find the next stop -----
+ if (++j > stops) break;
- if (++j > stops) break;
+ arcview_route.push_back (*pt_itr);
- arcview_route.push_back (*pt_itr);
+ stop_itr++;
- stop_itr++;
+ stop = stop_itr->Stop ();
- stop = stop_itr->Stop ();
+ stop_ptr = &stop_array [stop];
+ }
- stop_ptr = &stop_array [stop];
- }
+ //---- complete the link ----
- //---- complete the link ----
+ if (i < num_legs) {
+ tot_len += length = link_len - offset - side_offset;
- if (i < num_legs) {
- tot_len += length = link_len - offset - side_offset;
+ Link_Shape (link_ptr, dir, points, offset, length, side);
- Link_Shape (link_ptr, dir, points, offset, length, side);
+ pt_itr = points.begin ();
+ if (!offset_flag && pt_itr != points.end ()) {
+ pt_itr++;
+ }
+ for (; pt_itr != points.end (); pt_itr++) {
+ arcview_route.push_back (*pt_itr);
+ }
+ }
+ } else {
+ tot_len += link_len;
+
+ Link_Shape (link_ptr, dir, points, -1, -1, side);
+
pt_itr = points.begin ();
if (!offset_flag && pt_itr != points.end ()) {
Modified: version7/branches/aecom/Transims70/ArcNet/Get_Location_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Get_Location_Data.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Get_Location_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -15,20 +15,34 @@
Point_Map_Stat map_stat;
if (Data_Service::Get_Location_Data (file, location_rec)) {
- if (arcview_location.Is_Open ()) {
- arcview_location.Copy_Fields (file);
-
+ if (point_data_flag || arcview_location.Is_Open ()) {
setback = UnRound (location_rec.Setback ());
side = location_side;
if (setback > side) side = setback;
- Point_Offset (location_rec.Link (), location_rec.Dir (), location_rec.Offset (), side, arcview_location);
+ Point_Offset (location_rec.Link (), location_rec.Dir (), location_rec.Offset (), side, points);
- if (arcview_location.size () == 0) {
+ if (points.size () == 0) {
Warning (String ("Location %d could not be drawn") % location_rec.Location ());
return (false);
- } else if (!arcview_location.Write_Record ()) {
+ }
+ //---- save the location point data ----
+
+ map_stat = location_pt.insert (Point_Map_Data (location_rec.Location (), points [0]));
+
+ if (!map_stat.second) {
+ Warning ("Duplicate Location Record = ") << location_rec.Location ();
+ }
+ }
+
+ if (arcview_location.Is_Open ()) {
+ arcview_location.Copy_Fields (file);
+
+ arcview_location.clear ();
+ arcview_location.push_back (points [0]);
+
+ if (!arcview_location.Write_Record ()) {
Error (String ("Writing %s Location=%d") % arcview_location.File_Type () % location_rec.Location ());
}
Modified: version7/branches/aecom/Transims70/ArcNet/Get_Parking_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Get_Parking_Data.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Get_Parking_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -14,19 +14,31 @@
Park_Nest_Itr nest_itr;
if (Data_Service::Get_Parking_Data (file, parking_rec)) {
- if (arcview_parking.Is_Open ()) {
- arcview_parking.Copy_Fields (file, true);
-
+ if (point_data_flag || arcview_parking.Is_Open ()) {
if (!file.Nested ()) {
- Point_Offset (parking_rec.Link (), parking_rec.Dir (), parking_rec.Offset (), parking_side, arcview_parking);
+ Point_Offset (parking_rec.Link (), parking_rec.Dir (), parking_rec.Offset (), parking_side, points);
+ if (points.size () == 0) {
+ Warning (String ("Parking Lot %d could not be drawn") % parking_rec.Parking ());
+ }
+
//---- save the parking point data ----
- map_stat = parking_pt.insert (Point_Map_Data (parking_rec.Parking (), arcview_parking [0]));
+ map_stat = parking_pt.insert (Point_Map_Data (parking_rec.Parking (), points [0]));
if (!map_stat.second && file.Version () > 40) {
Warning ("Duplicate Parking Record = ") << parking_rec.Parking ();
}
+ }
+ }
+
+ if (arcview_parking.Is_Open ()) {
+ arcview_parking.Copy_Fields (file, true);
+
+ if (!file.Nested ()) {
+ arcview_parking.clear ();
+ arcview_parking.push_back (points [0]);
+
if (file.Num_Nest () == 0) {
file.Blank_Nested_Fields ();
file.Nested (true);
@@ -43,9 +55,7 @@
return (false);
}
}
- if (arcview_parking.size () == 0) {
- Warning (String ("Parking Lot %d could not be drawn") % parking_rec.Parking ());
- } else if (!arcview_parking.Write_Record ()) {
+ if (!arcview_parking.Write_Record ()) {
Error (String ("Writing %s Lot=%d") % arcview_parking.File_Type () % parking_rec.Parking ());
}
parking_rec.clear ();
Modified: version7/branches/aecom/Transims70/ArcNet/Get_Stop_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Get_Stop_Data.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcNet/Get_Stop_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -11,28 +11,47 @@
bool ArcNet::Get_Stop_Data (Stop_File &file, Stop_Data &stop_rec)
{
Point_Map_Stat map_stat;
+ XYZ_Point point;
if (Data_Service::Get_Stop_Data (file, stop_rec)) {
- if (arcview_stop.Is_Open ()) {
- arcview_stop.Copy_Fields (file);
- Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, arcview_stop);
+ if (point_data_flag || arcview_stop.Is_Open ()) {
- if (arcview_stop.size () == 0) {
- Warning (String ("Transit Stop %d could not be drawn") % stop_rec.Stop ());
- return (false);
- } else if (!arcview_stop.Write_Record ()) {
- Error (String ("Writing %s Stop=%d") % arcview_stop.File_Type () % stop_rec.Stop ());
+ if (file.Stop_Node ()) {
+ Node_Data *node_ptr = &node_array [stop_rec.Node ()];
+
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
+ point.z = UnRound (node_ptr->Z ());
+
+ } else {
+ Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+
+ if (points.size () == 0) {
+ Warning (String ("Transit Stop %d could not be drawn") % stop_rec.Stop ());
+ return (false);
+ }
+ point = points [0];
}
-
//---- save the location point data ----
- map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), arcview_stop [0]));
+ map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), point));
if (!map_stat.second) {
Warning ("Duplicate Stop Record = ") << stop_rec.Stop ();
}
}
+
+ if (arcview_stop.Is_Open ()) {
+ arcview_stop.Copy_Fields (file);
+
+ arcview_stop.clear ();
+ arcview_stop.push_back (point);
+
+ if (!arcview_stop.Write_Record ()) {
+ Error (String ("Writing %s Stop=%d") % arcview_stop.File_Type () % stop_rec.Stop ());
+ }
+ }
return (true);
}
return (false);
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{26E85782-126B-4A33-A07D-A86D89A22707}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcPerf</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcPlan/ArcPlan.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/ArcPlan.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcPlan/ArcPlan.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{5E5EFEDA-F28D-4CDF-9E16-FA2F99098A55}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcPlan</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcPlan/Get_Stop_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/Get_Stop_Data.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcPlan/Get_Stop_Data.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -13,8 +13,20 @@
Point_Map_Stat map_stat;
if (Data_Service::Get_Stop_Data (file, stop_rec)) {
- Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+ if (file.Stop_Node ()) {
+ XYZ_Point point;
+ Node_Data *node_ptr = &node_array [stop_rec.Node ()];
+ point.x = UnRound (node_ptr->X ());
+ point.y = UnRound (node_ptr->Y ());
+ point.x = UnRound (node_ptr->Z ());
+
+ points.clear ();
+ points.push_back (point);
+ } else {
+ Point_Offset (stop_rec.Link (), stop_rec.Dir (), stop_rec.Offset (), stop_side, points);
+ }
+
//---- save the location point data ----
map_stat = stop_pt.insert (Point_Map_Data (stop_rec.Stop (), points [0]));
Modified: version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -11,7 +11,7 @@
ArcRider::ArcRider (void) : Draw_Service ()
{
Program ("ArcRider");
- Version (0);
+ Version (1);
Title ("Ridership File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcRider/ArcRider.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/ArcRider.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcRider/ArcRider.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{8AD523A0-9546-464F-A4F3-0FFE6F3EF185}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcRider</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ArcRider/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcRider/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -47,7 +47,7 @@
line_flag = true;
arcview_line.Add_Field ("ROUTE", DB_INTEGER, 10);
- arcview_line.Add_Field ("NAME", DB_STRING, 40);
+ arcview_line.Add_Field ("NAME", DB_STRING, 60);
arcview_line.Add_Field ("MODE", DB_STRING, 16, TRANSIT_CODE);
arcview_line.Add_Field ("STOPS", DB_INTEGER, 10);
arcview_line.Add_Field ("RUNS", DB_INTEGER, 10);
@@ -85,7 +85,7 @@
sum_flag = true;
arcview_sum.Add_Field ("GROUP", DB_INTEGER, 10);
- arcview_sum.Add_Field ("NAME", DB_STRING, 40);
+ arcview_sum.Add_Field ("NAME", DB_STRING, 60);
arcview_sum.Add_Field ("ROUTES", DB_INTEGER, 10);
arcview_sum.Add_Field ("STOPS", DB_INTEGER, 10);
arcview_sum.Add_Field ("RUNS", DB_INTEGER, 10);
@@ -120,6 +120,9 @@
arcview_rider.Add_Field ("LINK", DB_INTEGER, 10);
arcview_rider.Add_Field ("DIR", DB_INTEGER, 1);
+ if (Notes_Name_Flag ()) {
+ arcview_rider.Add_Field ("NAME", DB_STRING, 40);
+ }
arcview_rider.Add_Field ("SEGMENT", DB_INTEGER, 2);
arcview_rider.Add_Field ("LENGTH", DB_DOUBLE, 10.2, ((Metric_Flag () ? METERS : FEET)));
arcview_rider.Add_Field ("BOARD", DB_INTEGER, 10);
@@ -179,7 +182,7 @@
on_off_flag = group_flag = true;
arcview_group.Add_Field ("GROUP", DB_INTEGER, 10);
- arcview_group.Add_Field ("NAME", DB_STRING, 40);
+ arcview_group.Add_Field ("NAME", DB_STRING, 60);
arcview_group.Add_Field ("BOARD", DB_INTEGER, 10);
arcview_group.Add_Field ("ALIGHT", DB_INTEGER, 10);
arcview_group.Add_Field ("TOTAL", DB_INTEGER, 10);
@@ -216,7 +219,7 @@
arcview_cap.Add_Field ("MODE", DB_STRING, 16);
arcview_cap.Add_Field ("ROUTE", DB_INTEGER, 10);
if (Notes_Name_Flag ()) {
- arcview_cap.Add_Field ("NAME", DB_STRING, 40);
+ arcview_cap.Add_Field ("NAME", DB_STRING, 60);
}
arcview_cap.Add_Field ("TIME", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
arcview_cap.Add_Field ("PERIOD", DB_INTEGER, 4);
Modified: version7/branches/aecom/Transims70/ArcRider/Write_Riders.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/Write_Riders.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcRider/Write_Riders.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -10,7 +10,7 @@
void ArcRider::Write_Riders (void)
{
- int i, j, link, dir, link_field, dir_field, rider_field, seg_field, len_field, on_field, off_field, notes_field;
+ int i, j, link, dir, link_field, dir_field, name_field, rider_field, seg_field, len_field, on_field, off_field, notes_field;
int stop_num [20], nstop, stop, max_load, riders, seg, board, alight, *load, *enter, *cap_enter, capacity;
int start, end, cap_start, cap_end, runs, run_field, factor_field, cap_field, capfac_field, pen_field, node;
double width, offset, end_offset, len, length, stop_off [20], factor, capfac;
@@ -27,6 +27,7 @@
nstop = stop = start = cap_start = 0;
link_field = arcview_rider.Field_Number ("LINK");
dir_field = arcview_rider.Field_Number ("DIR");
+ name_field = arcview_rider.Field_Number ("NAME");
seg_field = arcview_rider.Field_Number ("SEGMENT");
len_field = arcview_rider.Field_Number ("LENGTH");
on_field = arcview_rider.Field_Number ("BOARD");
@@ -114,6 +115,7 @@
arcview_rider.Put_Field (link_field, link_ptr->Link ());
arcview_rider.Put_Field (dir_field, dir);
+ arcview_rider.Put_Field (name_field, link_ptr->Name ());
length = UnRound (link_ptr->Length ());
Modified: version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{0C2FB245-D39A-4D92-87B9-5F446B91C6F4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ArcSnapshot</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/Converge_Service/Converge_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Converge_Service.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Converge_Service/Converge_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -74,7 +74,7 @@
<ProjectGuid>{6E283F95-CCA9-4AB8-B287-3B108D9D4D6B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Converge_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -22,7 +22,7 @@
<ProjectGuid>{C547021E-31F8-4DFF-BCFD-0F176E581B95}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>ConvertTrips</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/CountSum/CountSum.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/CountSum/CountSum.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/CountSum/CountSum.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -21,7 +21,7 @@
<PropertyGroup Label="Globals">
<ProjectGuid>{F8D36523-F1C2-437B-8D87-C98BED744701}</ProjectGuid>
<RootNamespace>CountSum</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Modified: version7/branches/aecom/Transims70/Data_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -132,6 +132,7 @@
for (count=0, str_itr = str_list.begin (); str_itr != str_list.end (); str_itr++, count++) {
if (count == 0) continue;
key = *str_itr;
+
key.Parse (parts, "=");
if (parts.size () != 2) {
@@ -154,6 +155,7 @@
} else {
mode = parts [0].Integer ();
num = Transit_Code (parts [1]);
+
if (num == ANY_TRANSIT) {
Error ("Route Mode Map is Out of Range");
}
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -39,7 +39,7 @@
perf_veh_type_map.assign (25, 0);
fare_flag = false;
- num_fare_zone = num_lane_flows = 0;
+ num_fare_zone = num_lane_flows = num_uturns = 0;
turn_shape_setback = TURN_SHAPE_SETBACK;
dat = this;
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -57,6 +57,7 @@
<ClInclude Include="..\Include\Route_Nodes_Data.hpp" />
<ClInclude Include="..\Include\Schedule_Data.hpp" />
<ClInclude Include="..\Include\Selection_Data.hpp" />
+ <ClInclude Include="..\Include\Service_Summary.hpp" />
<ClInclude Include="..\Include\Shape_Data.hpp" />
<ClInclude Include="..\Include\Signal_Data.hpp" />
<ClInclude Include="..\Include\Sign_Data.hpp" />
@@ -199,7 +200,7 @@
<ProjectGuid>{551DFC05-B83F-4952-BF03-51AA41B052F4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Data_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
@@ -320,6 +321,7 @@
<AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
<TreatWarningAsError>true</TreatWarningAsError>
<MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <StructMemberAlignment>Default</StructMemberAlignment>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2019-04-05 20:12:11 UTC (rev 1717)
@@ -206,6 +206,9 @@
<ClInclude Include="..\Include\Travel_Time_Data.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Service_Summary.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Read_Access_Links.cpp">
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -21,7 +21,7 @@
Initialize_Connects (file);
- num = 0;
+ num = num_uturns = 0;
while (file.Read ()) {
Show_Progress ();
@@ -52,6 +52,7 @@
continue;
} else {
connect_array.push_back (connect_rec);
+ if (connect_rec.Type () == UTURN) num_uturns++;
}
}
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Drivers.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Drivers.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Drivers.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -142,8 +142,33 @@
}
last_index = *driver_itr;
}
- if (stop_ptr->Link_Dir () == dir_ptr->Link_Dir ()) break;
link_ptr = &link_array [dir_ptr->Link ()];
+
+ if (stop_ptr->Node () < 0) {
+ if (stop_ptr->Link_Dir () == dir_ptr->Link_Dir ()) break;
+ } else {
+ if (stop_itr == line_itr->begin ()) {
+ if (dir_ptr->Dir () == 0) {
+ if (stop_ptr->Node () == link_ptr->Anode ()) break;
+ } else {
+ if (stop_ptr->Node () == link_ptr->Bnode ()) break;
+ }
+ } else {
+ if (dir_ptr->Dir () == 0) {
+ if (stop_ptr->Node () == link_ptr->Bnode ()) {
+ length += link_ptr->Length ();
+ offset = 0;
+ break;
+ }
+ } else {
+ if (stop_ptr->Node () == link_ptr->Anode ()) {
+ length += link_ptr->Length ();
+ offset = 0;
+ break;
+ }
+ }
+ }
+ }
length += link_ptr->Length () - offset;
offset = 0;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -146,8 +146,13 @@
if (file.Version () <= 40) return (false);
}
- location_rec.Origin (-1);
- location_rec.Destination (-1);
+ if (file.Origin_Destination ()) {
+ location_rec.Origin (file.Origin ());
+ location_rec.Destination (file.Destination ());
+ } else {
+ location_rec.Origin (-1);
+ location_rec.Destination (-1);
+ }
location_rec.Notes (file.Notes ());
return (true);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -81,21 +81,31 @@
{
int link, dir, offset, use;
+ Int_Map_Itr map_itr;
+
stop_rec.Stop (file.Stop ());
if (stop_rec.Stop () == 0) return (false);
- //---- check/convert the link number ----
+ if (file.Stop_Node ()) {
+ map_itr = node_map.find (file.Node ());
+ if (map_itr == node_map.end ()) return (false);
- link = file.Link ();
- dir = file.Dir ();
- offset = Round (file.Offset ());
+ stop_rec.Node (map_itr->second);
+ } else {
- if (Set_Link_Direction (file, link, dir, offset) == 0) return (false);
-
- stop_rec.Link (link);
- stop_rec.Dir (dir);
- stop_rec.Offset (offset);
+ //---- check/convert the link number ----
+ link = file.Link ();
+ dir = file.Dir ();
+ offset = Round (file.Offset ());
+
+ if (Set_Link_Direction (file, link, dir, offset) == 0) return (false);
+
+ stop_rec.Link (link);
+ stop_rec.Dir (dir);
+ stop_rec.Offset (offset);
+ }
+
//----- optional fields ----
use = file.Use ();
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Locations.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Locations.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Locations.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -56,6 +56,10 @@
}
file.Zone (zone);
+ if (file.Origin_Destination ()) {
+ file.Origin (data.Origin ());
+ file.Destination (data.Destination ());
+ }
file.Notes (data.Notes ());
if (!file.Write ()) {
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Stops.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Stops.cpp 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Stops.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -35,15 +35,26 @@
int Data_Service::Put_Stop_Data (Stop_File &file, Stop_Data &data)
{
- Link_Data *link_ptr;
+ if (file.Stop_Node ()) {
+ if (data.Node () < 0) return (0);
- link_ptr = &link_array [data.Link ()];
+ Node_Data *node_ptr = &node_array [data.Node ()];
+ if (node_ptr->Node () < 0) return (0);
+
+ file.Node (node_ptr->Node ());
+ } else {
+ if (data.Link () < 0) return (0);
+
+ Link_Data *link_ptr = &link_array [data.Link ()];
+
+ file.Link (link_ptr->Link ());
+ file.Dir (data.Dir ());
+ file.Offset (UnRound (data.Offset ()));
+ }
file.Stop (data.Stop ());
file.Name (data.Name ());
- file.Link (link_ptr->Link ());
- file.Dir (data.Dir ());
- file.Offset (UnRound (data.Offset ()));
+
file.Use (data.Use ());
file.Type (data.Type ());
file.Space (data.Space ());
Modified: version7/branches/aecom/Transims70/Draw_Service/Draw_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Draw_Service/Draw_Service.vcxproj 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/Draw_Service/Draw_Service.vcxproj 2019-04-05 20:12:11 UTC (rev 1717)
@@ -44,7 +44,7 @@
<ProjectGuid>{BFC302F1-3416-4C9B-B4B1-91763557022A}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>Draw_Service</RootNamespace>
- <WindowsTargetPlatformVersion>10.0.15063.0</WindowsTargetPlatformVersion>
+ <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
Index: version7/branches/aecom/Transims70/DynusTPrep
===================================================================
--- version7/branches/aecom/Transims70/DynusTPrep 2019-01-15 21:16:35 UTC (rev 1716)
+++ version7/branches/aecom/Transims70/DynusTPrep 2019-04-05 20:12:11 UTC (rev 1717)
Property changes on: version7/branches/aecom/Transims70/DynusTPrep
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,13 ##
+[Bb]in
+obj
+[Dd]ebug
+[Rr]elease
+*.user
+*.aps
+*.eto
+ClientBin
+GeneratedArtifacts
+_Pvt_Extensions
+project.lock.json
+*.nuget.props
+*.nuget.targets
Added: version7/branches/aecom/Transims70/DynusTPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/DynusTPrep/Control.cpp (rev 0)
+++ version7/branches/aecom/Transims70/DynusTPrep/Control.cpp 2019-04-05 20:12:11 UTC (rev 1717)
@@ -0,0 +1,130 @@
+//*********************************************************
+// Control.cpp - process the control parameters
+//*********************************************************
+
+#include "DynusTPrep.hpp...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2019-01-15 21:16:37
|
Revision: 1716
http://sourceforge.net/p/transims/code/1716
Author: davidroden
Date: 2019-01-15 21:16:35 +0000 (Tue, 15 Jan 2019)
Log Message:
-----------
TRANSIMS Version 7.3 -- updated from AECOM Branch
SysLib
In the User Program script, IN_RANGE, TIME_STAMP, and GET_ENV functions were added. IN_RANGE returns true if an integer, floating point value or string are within the range specified by an input string. TIME_STAMP converts a date string to a time stamp integer. GET_ENV returns the string associated with a system environment variable. An additional variation for the Get_Control_Text method is included.
Draw_Service
SPLIT_LINK_DIRECTIONS key was added to control direction link shapes.
ArcNet 7.3.1
SPLIT_LINK_DIRECTIONS key was added to draw separate shapes in each direction.
FileFormat 7.3.1
The new User Script functions were enabled.
NetPrep 7.3.1
KEEP_DIRECTIONAL_LINKS key was added to avoid combining two one-way links into a two-way link.
PlanSelect 7.3.2
FRACTIONAL_TRIP_FLAG was added to enable the count adjustment process to update the Trips field by an adjustment factor rather than add or delete plan records.
PlanSum 7.3.1
The Location Summary File was modified to process factional plan records.
TransitNet 7.3.1
Additional logic was added to enable the program to create a Transit Driver file without also using and creating Access Link files.
TripsSum 7.3.2
Link, Location and Zone Trip End file were updated to process fractional trip records. New Trip Tables and new Mode-Purpose Group files were also modified to work with fractional trips. The Top 100 reports were also updated.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
version7/branches/aecom/Transims70/ArcNet/Draw_Links.cpp
version7/branches/aecom/Transims70/Draw_Service/Control.cpp
version7/branches/aecom/Transims70/Draw_Service/Draw_Service.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
version7/branches/aecom/Transims70/Include/Control_Service.hpp
version7/branches/aecom/Transims70/Include/Draw_Service.hpp
version7/branches/aecom/Transims70/Include/User_Program.hpp
version7/branches/aecom/Transims70/NetPrep/Control.cpp
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
version7/branches/aecom/Transims70/PlanSelect/Control.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSum/Control.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.hpp
version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp
version7/branches/aecom/Transims70/SysLib/Program/Date_Time.cpp
version7/branches/aecom/Transims70/SysLib/Program/Function.cpp
version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp
version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
version7/branches/aecom/Transims70/TransitNet/Control.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
version7/branches/aecom/Transims70/TripSum/Control.cpp
version7/branches/aecom/Transims70/TripSum/Execute.cpp
version7/branches/aecom/Transims70/TripSum/Group_Report.cpp
version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp
version7/branches/aecom/Transims70/TripSum/Top_100_Report.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.hpp
version7/branches/aecom/Transims70/TripSum/Write_Group_File.cpp
version7/branches/aecom/Transims70/TripSum/Write_Link_Trips.cpp
version7/branches/aecom/Transims70/TripSum/Write_Loc_Trips.cpp
version7/branches/aecom/Transims70/TripSum/Write_Zone_Trips.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/x64/Release/MatrixData.exe
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
ArcNet::ArcNet (void) : Draw_Service ()
{
Program ("ArcNet");
- Version (0);
+ Version (1);
Title ("Generate ArcView Shapefiles from a TRANSIMS Network");
System_File_Type optional_files [] = {
@@ -28,7 +28,7 @@
};
int draw_service_keys [] = {
DRAW_NETWORK_LANES, LANE_WIDTH, CENTER_ONEWAY_LINKS,
- LINK_DIRECTION_OFFSET, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
+ LINK_DIRECTION_OFFSET, SPLIT_LINK_DIRECTIONS, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
LOCATION_SIDE_OFFSET, SIGN_SIDE_OFFSET, SIGN_SETBACK, TRANSIT_STOP_SIDE_OFFSET,
TRANSIT_DIRECTION_OFFSET, TRANSIT_OVERLAP_FLAG, DRAW_ONEWAY_ARROWS, ONEWAY_ARROW_LENGTH,
ONEWAY_ARROW_SIDE_OFFSET, CURVED_CONNECTION_FLAG, 0
Modified: version7/branches/aecom/Transims70/ArcNet/Draw_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/Draw_Links.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/ArcNet/Draw_Links.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -13,16 +13,17 @@
void ArcNet::Draw_Links (void)
{
bool offset_flag, dir_flag, lnk_flag, first;
- int i, link_fld, index, lane, center, num_lanes, cap, type;
+ int i, link_fld, index, lane, center, num_lanes, cap, type, lvalue;
int len_fld, lanes_ab_fld, lanes_ba_fld, cap_ab_fld, cap_ba_fld, lane_cap_ab_fld, lane_cap_ba_fld, len_ratio_fld, ftype_fld;
int spd_ab_fld, spd_ba_fld, fspd_ab_fld, fspd_ba_fld, spd_fac_ab_fld, spd_fac_ba_fld, ft_cap_ab_fld, ft_cap_ba_fld, ft_spd_ab_fld, ft_spd_ba_fld;
int lane_cap_fld, spd_fac_fld, ft_cap_fld, ft_spd_fld;
- double side, start, length, width, ratio, x, y, dx, dy, spd, fspd;
+ double side, start, length, width, ratio, x, y, dx, dy, spd, fspd, value;
Int_Map_Itr map_itr;
Link_Data *link_ptr;
Dir_Data *dir_ptr;
Points_Itr pt_itr;
+ Link_File *link_file = 0;
link_fld = link_db.Optional_Field ("LINK", "ID");
offset_flag = (link_offset != 0.0);
@@ -65,6 +66,10 @@
if (lnk_flag) {
Show_Message (String ("Writing %s -- Record") % arcview_link.File_Type ());
+
+ if (split_dir_flag) {
+ link_file = System_Link_File ();
+ }
} else {
Show_Message (String ("Writing %s -- Record") % arcview_center.File_Type ());
}
@@ -158,6 +163,53 @@
if (arrow_flag) Add_Arrow (points);
arcview_link.insert (arcview_link.end (), points.begin (), points.end ());
+
+ if (split_dir_flag) {
+ if (i == 0) {
+ link_file->Copy_Fields (link_db);
+
+ link_file->Link (link_ptr->Link () * 10);
+ link_file->Lanes_BA (0);
+ link_file->Speed_BA (0);
+ link_file->Fspd_BA (0);
+ link_file->Cap_BA (0);
+
+ arcview_link.Copy_Fields (*link_file);
+
+ if (!arcview_link.Write_Record ()) {
+ Error (String ("Writing %s") % arcview_link.File_Type ());
+ }
+ arcview_link.parts.clear ();
+ arcview_link.clear ();
+
+ link_file->Copy_Fields (link_db);
+
+ link_file->Link (link_ptr->Link () * 10 + 1);
+
+ lvalue = link_file->Node_A ();
+ link_file->Node_A (link_file->Node_B ());
+ link_file->Node_B (lvalue);
+
+ link_file->Lanes_AB (link_file->Lanes_BA ());
+ link_file->Speed_AB (link_file->Speed_BA ());
+ link_file->Fspd_AB (link_file->Fspd_BA ());
+ link_file->Cap_AB (link_file->Cap_BA ());
+ link_file->Lanes_BA (0);
+ link_file->Speed_BA (0);
+ link_file->Fspd_BA (0);
+ link_file->Cap_BA (0);
+
+ value = link_file->Setback_A ();
+ link_file->Setback_A (link_file->Setback_B ());
+ link_file->Setback_B (value);
+
+ lvalue = link_file->Bearing_A ();
+ link_file->Bearing_A (link_file->Bearing_B ());
+ link_file->Bearing_B (lvalue);
+
+ arcview_link.Copy_Fields (*link_file);
+ }
+ }
}
} else {
Modified: version7/branches/aecom/Transims70/Draw_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Draw_Service/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/Draw_Service/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -51,8 +51,12 @@
if (Control_Key_Status (LINK_DIRECTION_OFFSET)) {
link_offset = Get_Control_Double (LINK_DIRECTION_OFFSET);
- if (link_offset == 0.0 && Control_Key_Status (DRAW_AB_DIRECTION)) {
- direction_flag = Get_Control_Flag (DRAW_AB_DIRECTION);
+ if (link_offset == 0.0) {
+ if (Control_Key_Status (DRAW_AB_DIRECTION)) {
+ direction_flag = Get_Control_Flag (DRAW_AB_DIRECTION);
+ }
+ } else if (Control_Key_Status (SPLIT_LINK_DIRECTIONS)) {
+ split_dir_flag = Get_Control_Flag (SPLIT_LINK_DIRECTIONS);
}
}
Modified: version7/branches/aecom/Transims70/Draw_Service/Draw_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Draw_Service/Draw_Service.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/Draw_Service/Draw_Service.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -12,7 +12,7 @@
{
Service_Level (DRAW_SERVICE);
- lanes_flag = center_flag = direction_flag = overlap_flag = arrow_flag = curve_flag = shape_flag = bandwidth_flag = false;
+ lanes_flag = center_flag = direction_flag = overlap_flag = arrow_flag = curve_flag = shape_flag = bandwidth_flag = split_dir_flag = false;
link_offset = pocket_side = parking_side = location_side = sign_side = sign_setback = 0.0;
stop_side = route_offset = lane_width = arrow_length = arrow_side = 0.0;
@@ -32,6 +32,7 @@
{ LANE_WIDTH, "LANE_WIDTH", LEVEL0, OPT_KEY, FLOAT_KEY, "12.0 feet", "0..150 feet", NO_HELP },
{ CENTER_ONEWAY_LINKS, "CENTER_ONEWAY_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ LINK_DIRECTION_OFFSET, "LINK_DIRECTION_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0 feet", "0..200 feet", NO_HELP },
+ { SPLIT_LINK_DIRECTIONS, "SPLIT_LINK_DIRECTIONS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ DRAW_AB_DIRECTION, "DRAW_AB_DIRECTION", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ POCKET_SIDE_OFFSET, "POCKET_SIDE_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "7.0 feet", "0..300 feet", NO_HELP },
{ PARKING_SIDE_OFFSET, "PARKING_SIDE_OFFSET", LEVEL0, OPT_KEY, FLOAT_KEY, "10.0 feet", "0..600 feet", NO_HELP },
Modified: version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
FileFormat::FileFormat (void) : Execution_Service ()
{
Program ("FileFormat");
- Version (0);
+ Version (1);
Title ("File Format Conversion");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/Include/Control_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Control_Service.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/Include/Control_Service.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -64,6 +64,7 @@
bool Set_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
String Get_Control_Text (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
+ String Get_Control_Text (int code, int nest1, bool help);
String Get_Control_Text (int code, bool help);
bool Get_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
int Get_Control_Integer (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
Modified: version7/branches/aecom/Transims70/Include/Draw_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Draw_Service.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/Include/Draw_Service.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -26,7 +26,7 @@
protected:
enum Draw_Service_Keys {
DRAW_NETWORK_LANES = DRAW_SERVICE_OFFSET, LANE_WIDTH, CENTER_ONEWAY_LINKS,
- LINK_DIRECTION_OFFSET, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
+ LINK_DIRECTION_OFFSET, SPLIT_LINK_DIRECTIONS, DRAW_AB_DIRECTION, POCKET_SIDE_OFFSET, PARKING_SIDE_OFFSET,
LOCATION_SIDE_OFFSET, SIGN_SIDE_OFFSET, SIGN_SETBACK, TRANSIT_STOP_SIDE_OFFSET,
TRANSIT_DIRECTION_OFFSET, TRANSIT_OVERLAP_FLAG, MAXIMUM_SHAPE_ANGLE, MINIMUM_SHAPE_LENGTH,
DRAW_ONEWAY_ARROWS, ONEWAY_ARROW_LENGTH, ONEWAY_ARROW_SIDE_OFFSET,
@@ -45,7 +45,7 @@
//---- draw data ----
- bool lanes_flag, center_flag, direction_flag, overlap_flag, arrow_flag, curve_flag, shape_flag, bandwidth_flag;
+ bool lanes_flag, center_flag, direction_flag, overlap_flag, arrow_flag, curve_flag, shape_flag, bandwidth_flag, split_dir_flag;
String bandwidth_field;
double link_offset, pocket_side, parking_side, location_side, sign_side, sign_setback, stop_side;
Modified: version7/branches/aecom/Transims70/Include/User_Program.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/User_Program.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/Include/User_Program.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -65,13 +65,13 @@
enum Tokens { EQUALS = 1, OPEN_PAR, CLOSE_PAR, COMMA, END_CMD, RANGE_DOT, //---- limit ----
IF, THEN, ELSE, ENDIF, WHILE, LOOP, BREAK, ENDLOOP, //---- logical ----
- EQ, NEQ, LT, LE, GT, GE, NOT, AND, OR, //---- relational ----
+ EQ, NEQ, LT, LE, GT, GE, NOT, AND, OR, IN_RANGE, //---- relational ----
PLUS, MINUS, MULTIPLY, DIVIDE, MODULO, POWER, NEGATIVE, //---- math ----
FMIN, FMAX, ABS, SQRT, EXP, LOG, LOG10, RANDOM, //---- function ----
FINT, FFLOAT, ROUND, ATOI, ATOF, ITOA, FTOA, SUBSTR, TRIM, //---- convert ----
LOW, HIGH, RANGE, TTOI, TTOF, ITOT, FTOT, ATOT, EQUIV, TTOM,
- DOW, HOUR, MONTH, YEAR, DATE, DATE_TIME, DATE_STR, TIME_STR, //---- datetime ----
- PRINT, LIST, FORMAT, FREAD, FWRITE, INPUT, OUTPUT }; //---- in_out ----
+ DOW, HOUR, MONTH, YEAR, DATE, DATE_TIME, DATE_STR, TIME_STR, TIME_STAMP,//---- datetime ----
+ PRINT, LIST, FORMAT, FREAD, FWRITE, INPUT, OUTPUT, GET_ENV }; //---- in_out ----
enum Table_Tokens { ITAB, RTAB, STAB, TTAB, END_TAB };
Modified: version7/branches/aecom/Transims70/NetPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/NetPrep/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -83,6 +83,11 @@
//---- keep duplicate links ----
keep_dup_links = Get_Control_Flag (KEEP_DUPLICATE_LINKS);
+
+
+ //---- keep directional links ----
+
+ link_dir_flag = Get_Control_Flag (KEEP_DIRECTIONAL_LINKS);
}
//---- open the input node file ----
Modified: version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -371,21 +371,25 @@
//---- check for twoway links ----
- ab_itr = ab_ptr->find (Int2_Key (bnode, anode));
+ if (link_dir_flag) {
+ ab_itr = ab_ptr->end ();
+ } else {
+ ab_itr = ab_ptr->find (Int2_Key (bnode, anode));
- if (ab_itr != ab_ptr->end () && link_shape_flag) {
- dir_ptr = &dir_array [ab_itr->second];
+ if (ab_itr != ab_ptr->end () && link_shape_flag) {
+ dir_ptr = &dir_array [ab_itr->second];
- link_ptr = &link_array [dir_ptr->Link ()];
+ link_ptr = &link_array [dir_ptr->Link ()];
- Link_Bearings (*link_ptr, bearing_in, bearing_out);
+ Link_Bearings (*link_ptr, bearing_in, bearing_out);
- bear_in = new_file->Bearing_A ();
- bear_out = new_file->Bearing_B ();
+ bear_in = new_file->Bearing_A ();
+ bear_out = new_file->Bearing_B ();
- if (compass.Difference (bearing_in, compass.Flip (bear_out)) > straight_diff ||
- compass.Difference (bearing_out, compass.Flip (bear_in)) > straight_diff) {
- ab_itr = ab_ptr->end ();
+ if (compass.Difference (bearing_in, compass.Flip (bear_out)) > straight_diff ||
+ compass.Difference (bearing_out, compass.Flip (bear_in)) > straight_diff) {
+ ab_itr = ab_ptr->end ();
+ }
}
}
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
NetPrep::NetPrep (void) : Data_Service ()
{
Program ("NetPrep");
- Version (0);
+ Version (1);
Title ("Network Preparation Utility");
System_File_Type optional_files [] = {
@@ -28,6 +28,7 @@
{ INPUT_LINK_FORMAT, "INPUT_LINK_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_LINK_SCRIPT, "INPUT_LINK_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ KEEP_DUPLICATE_LINKS, "KEEP_DUPLICATE_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
+ { KEEP_DIRECTIONAL_LINKS, "KEEP_DIRECTIONAL_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ INPUT_NODE_FILE, "INPUT_NODE_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_NODE_FORMAT, "INPUT_NODE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_NODE_SCRIPT, "INPUT_NODE_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
@@ -107,7 +108,7 @@
units_flag = keep_node_flag = keep_link_flag = drop_node_flag = drop_link_flag = shape_flag = correct_flag = false;
length_flag = split_flag = split_ab_flag = collapse_flag = drop_flag = loop_flag = spacing_flag = false;
divided_flag = segment_flag = speed_flag = link_use_flag = approach_flag = link_node_flag = offset_flag = time_flag = false;
- node_script_flag = zone_script_flag = oneway_link_flag = link_polygon_flag = input_shape_flag = false;
+ node_script_flag = zone_script_flag = oneway_link_flag = link_polygon_flag = input_shape_flag = link_dir_flag = false;
collapse_routes = true;
length_ratio = 0.0;
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -36,7 +36,7 @@
protected:
enum NetPrep_Keys {
- INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, KEEP_DUPLICATE_LINKS,
+ INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, KEEP_DUPLICATE_LINKS, KEEP_DIRECTIONAL_LINKS,
INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
INPUT_ZONE_FILE, INPUT_ZONE_FORMAT, INPUT_ZONE_SCRIPT, INPUT_SPDCAP_FILE, INPUT_SPDCAP_FORMAT,
INPUT_UNITS_OF_MEASURE, FACILITY_INDEX_FIELD, AREA_TYPE_INDEX_FIELD, CONVERSION_SCRIPT,
@@ -76,7 +76,7 @@
bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag, keep_dup_links;
bool units_flag, keep_node_flag, keep_link_flag, drop_node_flag, drop_link_flag, shape_flag, correct_flag;
bool length_flag, split_flag, split_ab_flag, collapse_flag, drop_flag, short_flag, loop_flag, spacing_flag;
- bool divided_flag, segment_flag, speed_flag, link_use_flag, approach_flag, link_node_flag, offset_flag, time_flag;
+ bool divided_flag, segment_flag, speed_flag, link_use_flag, approach_flag, link_node_flag, offset_flag, time_flag, link_dir_flag;
bool node_script_flag, zone_script_flag, input_route_flag, collapse_routes, oneway_link_flag, link_polygon_flag, input_shape_flag;
double length_ratio, resolution;
Modified: version7/branches/aecom/Transims70/PlanSelect/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -55,6 +55,8 @@
new_hhold = Get_Control_Integer (NEW_HOUSEHOLD_ID);
num_iter = Get_Control_Integer (NUMBER_OF_ITERATIONS);
+
+ fractional_flag = Get_Control_Flag (FRACTIONAL_TRIPS_FLAG);
}
if (num_iter == 0) num_iter = 1;
}
Modified: version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
PlanSelect::PlanSelect (void) : Select_Service ()
{
Program ("PlanSelect");
- Version (1);
+ Version (2);
Title ("Travel Plan Selection Utility");
System_File_Type required_files [] = {
@@ -42,6 +42,7 @@
{ MODE_ADD_LIMITS, "MODE_ADD_LIMITS", LEVEL0, OPT_KEY, TEXT_KEY, "ALL", MODE_RANGE, NO_HELP},
{ NEW_HOUSEHOLD_ID, "NEW_HOUSEHOLD_ID", LEVEL0, OPT_KEY, INT_KEY, "10000000", ">0", NO_HELP},
{ NUMBER_OF_ITERATIONS, "NUMBER_OF_ITERATIONS", LEVEL0, OPT_KEY, INT_KEY, "5", "1..20", NO_HELP},
+ { FRACTIONAL_TRIPS_FLAG, "FRACTIONAL_TRIPS_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
END_CONTROL
};
const char *reports [] = {
@@ -59,7 +60,7 @@
Report_List (reports);
Sum_Flow_Flag (true);
- new_plan_flag = new_skim_flag = new_select_flag = vol_cnt_flag = false;
+ new_plan_flag = new_skim_flag = new_select_flag = vol_cnt_flag = fractional_flag = false;
plan_file = new_plan_file = 0;
new_hhold = 10000000;
Modified: version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -24,7 +24,7 @@
protected:
enum PlanSelect_Keys {
- VOLUME_COUNT_FILE = 1, VOLUME_COUNT_FORMAT, MODE_DELETE_LIMITS, MODE_ADD_LIMITS, NEW_HOUSEHOLD_ID, NUMBER_OF_ITERATIONS,
+ VOLUME_COUNT_FILE = 1, VOLUME_COUNT_FORMAT, MODE_DELETE_LIMITS, MODE_ADD_LIMITS, NEW_HOUSEHOLD_ID, NUMBER_OF_ITERATIONS, FRACTIONAL_TRIPS_FLAG,
};
virtual void Program_Control (void);
@@ -32,7 +32,7 @@
enum PlanSelect_Reports { FIRST_REPORT = 1, SECOND_REPORT };
int new_hhold, num_iter;
- bool new_plan_flag, new_skim_flag, new_select_flag, vol_cnt_flag, delete_flag [MAX_MODE], add_flag [MAX_MODE];
+ bool new_plan_flag, new_skim_flag, new_select_flag, vol_cnt_flag, delete_flag [MAX_MODE], add_flag [MAX_MODE], fractional_flag;
Plan_File *plan_file, *new_plan_file;
Plan_Skim_File *new_skim_file;
Modified: version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -12,7 +12,7 @@
{
int i, num, num_trip, link, index, period, num_add, num_drop, direction, iter;
Dtime tod;
- double max_share, diff, min_diff;
+ double max_share, diff, min_diff, in_trips, out_trips;
bool duplicate, first, save_flag;
Plan_Ptr_Itr plan_itr;
@@ -31,6 +31,7 @@
num_trip = num_add = num_drop = direction = 0;
max_share = min_diff = 0;
+ in_trips = out_trips = 0;
for (iter = 1; iter <= num_iter; iter++) {
if (num_iter > 1) {
@@ -69,6 +70,7 @@
select_map.insert (Select_Map_Data (trip_index, select_rec));
plan_ptr = &plan;
+ in_trips += plan_ptr->Trips ();
} else {
if (first) {
plan_itr = plan_ptr_array.begin ();
@@ -147,15 +149,32 @@
}
}
if (min_diff > 0) {
- duplicate = true;
+ if (fractional_flag) {
+ plan_ptr->Trips (plan_ptr->Trips () + max_share);
+
+ for (vol_diff_ptr_itr = vol_diff_ptrs.begin (); vol_diff_ptr_itr != vol_diff_ptrs.end (); vol_diff_ptr_itr++) {
+ (*vol_diff_ptr_itr)->vol += max_share;
+ }
+ } else {
+ duplicate = true;
+ }
} else if (min_diff < 0) {
- if (random.Probability () <= max_share) {
+ if (fractional_flag) {
+ if (max_share > plan_ptr->Trips ()) {
+ max_share = plan_ptr->Trips ();
+ }
+ plan_ptr->Trips (plan_ptr->Trips () - max_share);
+
+ for (vol_diff_ptr_itr = vol_diff_ptrs.begin (); vol_diff_ptr_itr != vol_diff_ptrs.end (); vol_diff_ptr_itr++) {
+ (*vol_diff_ptr_itr)->vol = MAX ((*vol_diff_ptr_itr)->vol - max_share, 0);
+ }
+ } else if (random.Probability () <= max_share) {
num_drop++;
//---- drop the trip ----
for (vol_diff_ptr_itr = vol_diff_ptrs.begin (); vol_diff_ptr_itr != vol_diff_ptrs.end (); vol_diff_ptr_itr++) {
- (*vol_diff_ptr_itr)->vol--;
+ (*vol_diff_ptr_itr)->vol = MAX ((*vol_diff_ptr_itr)->vol - plan_ptr->Trips (), 0);
}
if (iter > 1) plan_ptr->Clear ();
continue;
@@ -166,6 +185,8 @@
//---- save the plan ----
if (iter == num_iter) {
+ out_trips += plan_ptr->Trips ();
+
if (new_plan_flag) {
new_plan_file->Write_Plan (*plan_ptr);
}
@@ -192,7 +213,7 @@
num_add++;
for (vol_diff_ptr_itr = vol_diff_ptrs.begin (); vol_diff_ptr_itr != vol_diff_ptrs.end (); vol_diff_ptr_itr++) {
- (*vol_diff_ptr_itr)->vol++;
+ (*vol_diff_ptr_itr)->vol += plan_ptr->Trips ();
}
if (iter < num_iter) {
new_ptr = new Plan_Data ();
@@ -230,8 +251,12 @@
new_skim_file->Print_Summary ();
}
if (vol_cnt_flag) {
- Write (2, "Number of Duplicated Trips = ") << num_add;
- Write (1, "Number of Deleted Trips = ") << num_drop;
+ if (fractional_flag) {
+ Write (2, "Change in the Number of Trips = ") << (out_trips - in_trips);
+ } else {
+ Write (2, "Number of Duplicated Trips = ") << num_add;
+ Write (1, "Number of Deleted Trips = ") << num_drop;
+ }
}
}
Modified: version7/branches/aecom/Transims70/PlanSum/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSum/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSum/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -246,9 +246,9 @@
location_file.Add_Field ("LOCATION", DB_INTEGER, 10);
location_file.Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
location_file.Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
- location_file.Add_Field ("DEPART", DB_INTEGER, 10);
- location_file.Add_Field ("ARRIVE", DB_INTEGER, 10);
- location_file.Add_Field ("ACTIVITY", DB_INTEGER, 10);
+ location_file.Add_Field ("DEPART", DB_DOUBLE, 10.1);
+ location_file.Add_Field ("ARRIVE", DB_DOUBLE, 10.1);
+ location_file.Add_Field ("ACTIVITY", DB_DOUBLE, 10.1);
location_file.Create (Project_Filename (key));
}
Modified: version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
PlanSum::PlanSum (void) : Flow_Time_Service ()
{
Program ("PlanSum");
- Version (0);
+ Version (1);
Title ("Travel Plan Summary Utility");
Modified: version7/branches/aecom/Transims70/PlanSum/PlanSum.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSum/PlanSum.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSum/PlanSum.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -76,8 +76,10 @@
//---- location_summary data ----
- typedef map <Int2_Key, Int2_Key> Location_Summary;
- typedef pair <Int2_Key, Int2_Key> Location_Sum_Data;
+ typedef pair <double, double> Dbl_Pair;
+
+ typedef map <Int2_Key, Dbl_Pair> Location_Summary;
+ typedef pair <Int2_Key, Dbl_Pair> Location_Sum_Data;
typedef Location_Summary::iterator Location_Sum_Itr;
typedef pair <Location_Sum_Itr, bool> Location_Sum_Stat;
Modified: version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -66,19 +66,19 @@
period = exe->sum_periods.Period (plan_ptr->Depart ());
if (period >= 0) {
- location_sum_stat = location_sum_ptr->insert (Location_Sum_Data (Int2_Key (plan_ptr->Origin (), period), Int2_Key (1, 0)));
+ location_sum_stat = location_sum_ptr->insert (Location_Sum_Data (Int2_Key (plan_ptr->Origin (), period), Dbl_Pair (plan_ptr->Trips (), 0)));
if (!location_sum_stat.second) {
- location_sum_stat.first->second.first++;
+ location_sum_stat.first->second.first += plan_ptr->Trips ();
}
}
period = exe->sum_periods.Period (plan_ptr->Arrive ());
if (period >= 0) {
- location_sum_stat = location_sum_ptr->insert (Location_Sum_Data (Int2_Key (plan_ptr->Destination (), period), Int2_Key (0, 1)));
+ location_sum_stat = location_sum_ptr->insert (Location_Sum_Data (Int2_Key (plan_ptr->Destination (), period), Dbl_Pair (0, plan_ptr->Trips ())));
if (!location_sum_stat.second) {
- location_sum_stat.first->second.second++;
+ location_sum_stat.first->second.second += plan_ptr->Trips ();
}
}
}
Modified: version7/branches/aecom/Transims70/SysLib/Program/Date_Time.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Program/Date_Time.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/SysLib/Program/Date_Time.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -13,7 +13,51 @@
struct tm dt, *dtim;
Stack_Data *s2, *s3, *s4, *s5;
String *str_ptr;
+ String text;
+ Strings parts, strs;
+ Str_Itr str_itr;
+ bool month_flag = false;
+ int value;
+ if (cmd_ptr->token == TIME_STAMP) {
+ if (s->type != STRING_DATA) {
+ exe->Error ("Illegal TIME_STAMP Function Syntax");
+ return (false);
+ }
+ text = *(s->str_ptr);
+ text.Parse (parts, " ");
+ text = parts [0];
+ text.Parse (strs, "/-");
+ if (strs.size () == 3) {
+ for (str_itr = strs.begin (); str_itr != strs.end (); str_itr++) {
+ value = str_itr->Integer ();
+
+ if (value > 31) {
+ if (value < 1900) {
+ dt.tm_year = value;
+ } else {
+ dt.tm_year = value - 1900;
+ }
+ } else if (value > 12) {
+ dt.tm_mday = value;
+ } else if (month_flag) {
+ dt.tm_mday = value;
+ } else {
+ dt.tm_mon = value - 1;
+ month_flag = true;
+ }
+ }
+ }
+ dt.tm_hour = 0;
+ dt.tm_min = 0;
+ dt.tm_sec = 0;
+ dt.tm_isdst = -1;
+
+ s->lvalue = (int) mktime (&dt);
+ s->type = INT_DATA;
+ return (true);
+ }
+
if (s->type != INT_DATA) goto error;
switch (cmd_ptr->token) {
Modified: version7/branches/aecom/Transims70/SysLib/Program/Function.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Program/Function.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/SysLib/Program/Function.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -3,6 +3,7 @@
//*********************************************************
#include "User_Program.hpp"
+#include "Data_Range.hpp"
#include <math.h>
@@ -19,6 +20,35 @@
exe->Error (String ("Function Code %d has No Parameters") % cmd_ptr->token);
return (false);
}
+ } else if (cmd_ptr->token == IN_RANGE) {
+ if (s->type != STRING_DATA) goto error;
+
+ if (s1->type == STRING_DATA) {
+ String_Range range;
+
+ range.Add_Ranges (*(s->str_ptr));
+
+ s->lvalue = range.In_Range (*(s1->str_ptr));
+ } else {
+ Data_Range range;
+ range.Add_Ranges (*(s->str_ptr));
+
+ switch (s1->type) {
+ case INT_DATA:
+ s->lvalue = range.In_Range (s1->lvalue);
+ break;
+ case FLOAT_DATA:
+ s->lvalue = range.In_Range ((int) (s1->fvalue));
+ break;
+ case TIME_DATA:
+ s->lvalue = range.In_Range ((int) ((Dtime) (s1->tvalue)));
+ break;
+ default:
+ break;
+ }
+ }
+ s->type = INT_DATA;
+ return (true);
} else {
if (s->type == STRING_DATA || s->type == STRUCT_DATA) goto error;
Modified: version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -34,6 +34,15 @@
}
s1->type = INT_DATA;
+ } else if (cmd_ptr->token == GET_ENV) {
+ if (s->type != STRING_DATA) {
+ exe->Error ("Illegal GET_ENV Function Syntax");
+ return (false);
+ }
+ svalue [0] = get_env (s->str_ptr->c_str ());
+ s->str_ptr = &svalue [0];
+ return (true);
+
} else {
if (s1->type != STRING_DATA) goto error;
@@ -97,21 +106,21 @@
//max = FIELD_BUFFER;
//max = Max_Field_Width ();
//if (offset + max > len) goto record_error;
-
+
//str_ncpy (token, sizeof (token), record + offset, max);
//token [max] = '\0';
switch (s->type) {
- case INT_DATA:
- //if (sscanf (token, buffer, &(s->lvalue)) != 1) s->lvalue = 0;
- break;
- case FLOAT_DATA:
- //if (sscanf (token, buffer, &(s->fvalue)) != 1) s->fvalue = 0.0;
- break;
- case STRING_DATA:
- //if (sscanf (token, buffer, &(s->svalue)) != 1) s->svalue = token;
- break;
+ case INT_DATA:
+ //if (sscanf (token, buffer, &(s->lvalue)) != 1) s->lvalue = 0;
+ break;
+ case FLOAT_DATA:
+ //if (sscanf (token, buffer, &(s->fvalue)) != 1) s->fvalue = 0.0;
+ break;
+ case STRING_DATA:
+ //if (sscanf (token, buffer, &(s->svalue)) != 1) s->svalue = token;
+ break;
}
*s3 = *s;
@@ -122,18 +131,18 @@
str_ptr = s1->str_ptr;
switch (s->type) {
- case INT_DATA:
- buffer (*str_ptr) % s->lvalue;
- break;
- case FLOAT_DATA:
- buffer (*str_ptr) % s->fvalue;
- break;
- case STRING_DATA:
- buffer (*str_ptr) % *(s->str_ptr);
- break;
- case TIME_DATA:
- buffer (*str_ptr) % ((Dtime) s->tvalue);
- break;
+ case INT_DATA:
+ buffer (*str_ptr) % s->lvalue;
+ break;
+ case FLOAT_DATA:
+ buffer (*str_ptr) % s->fvalue;
+ break;
+ case STRING_DATA:
+ buffer (*str_ptr) % *(s->str_ptr);
+ break;
+ case TIME_DATA:
+ buffer (*str_ptr) % ((Dtime) s->tvalue);
+ break;
}
max = (int) buffer.size ();
@@ -141,7 +150,7 @@
memcpy (rec + offset, buffer.c_str (), max);
file->out_flag = 1;
-
+
s3->type = INT_DATA;
s3->lvalue = offset + max;
}
Modified: version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -22,6 +22,7 @@
{"NOT", RELATION, NOT },
{"AND", RELATION, AND },
{"OR", RELATION, OR },
+ {"IN_RANGE", FUNCTION, IN_RANGE },
{"MIN", FUNCTION, FMIN },
{"MAX", FUNCTION, FMAX },
{"ABS", FUNCTION, ABS },
@@ -58,6 +59,7 @@
{"DATE_TIME", DATETIME, DATE_TIME },
{"DATE_STR", DATETIME, DATE_STR },
{"TIME_STR", DATETIME, TIME_STR },
+ {"TIME_STAMP", DATETIME, TIME_STAMP },
{"PRINT", IN_OUT, PRINT },
{"LIST", IN_OUT, LIST },
{"FORMAT", IN_OUT, FORMAT },
@@ -65,6 +67,7 @@
{"WRITE", IN_OUT, FWRITE },
{"INPUT", IN_OUT, INPUT },
{"OUTPUT", IN_OUT, OUTPUT },
+ {"GET_ENV", IN_OUT, GET_ENV },
{"RETURN", RETURN, RETURN },
{"END", LIMIT, END_CMD },
{"", 0, 0 }
Modified: version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -591,6 +591,39 @@
// Get_Control_Text - search for a string parameter
//-----------------------------------------------------------
+String Control_Service::Get_Control_Text (int code, int nest1, bool help)
+{
+ Control_Key *key_ptr = Get_Control_Key (code);
+ if (key_ptr == 0) return ("");
+
+ bool flag;
+ String key, default_value;
+
+ key = Get_Control_String (code, nest1);
+
+ if (key.empty ()) {
+ if (key_ptr->value.empty ()) return ("");
+
+ key = key_ptr->value;
+ flag = false;
+ } else {
+ flag = true;
+ }
+
+ //---- print the key message ----
+
+ if (flag) {
+ default_value = key_ptr->key + _nesting;
+ Print (1, default_value.To_Title ()) << " = " << key;
+ if (help) Print (0, String (" (%s)") % Get_Range_String (code));
+ }
+ return (key);
+}
+
+//-----------------------------------------------------------
+// Get_Control_Text - search for a string parameter
+//-----------------------------------------------------------
+
String Control_Service::Get_Control_Text (int code, bool help)
{
Control_Key *key_ptr = Get_Control_Key (code);
Modified: version7/branches/aecom/Transims70/TransitNet/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/TransitNet/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TransitNet/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -32,6 +32,9 @@
route_node_flag = System_File_Flag (ROUTE_NODES);
transit_net_flag = System_File_Flag (TRANSIT_STOP) && System_File_Flag (TRANSIT_ROUTE) &&
System_File_Flag (TRANSIT_SCHEDULE) && System_File_Flag (TRANSIT_DRIVER);
+
+ access_flag = System_File_Flag (ACCESS_LINK);
+ new_access_flag = System_File_Flag (NEW_ACCESS_LINK);
if (!route_node_flag && !transit_net_flag) {
fix_driver_flag = System_File_Flag (TRANSIT_STOP) && System_File_Flag (TRANSIT_ROUTE) &&
@@ -38,7 +41,9 @@
!System_File_Flag (TRANSIT_DRIVER) && System_File_Flag (NEW_TRANSIT_DRIVER);
if (!fix_driver_flag) {
- Error ("A Route Nodes or Transit Network is Required");
+ if (!System_File_Flag (TRANSIT_STOP) || !new_access_flag) {
+ Error ("A Route Nodes or Transit Network is Required");
+ }
}
}
new_transit_net_flag = System_File_Flag (NEW_TRANSIT_STOP) && System_File_Flag (NEW_TRANSIT_ROUTE) &&
@@ -47,10 +52,8 @@
if (route_node_flag && !new_transit_net_flag) {
Error ("A New Transit Network is Required for Route Nodes");
}
- access_flag = System_File_Flag (ACCESS_LINK);
- new_access_flag = System_File_Flag (NEW_ACCESS_LINK);
- if (!access_flag && new_access_flag && !transit_net_flag) {
+ if (!access_flag && new_access_flag && !System_File_Flag (TRANSIT_STOP)) {
Error ("A Transit Network is Required for Access Links");
}
Modified: version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
===================================================================
--- version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
TransitNet::TransitNet (void) : Select_Service ()
{
Program ("TransitNet");
- Version (0);
+ Version (1);
Title ("Transit Network Conversion Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/TripSum/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Control.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -86,10 +86,10 @@
for (p=0; p < num_periods; p++) {
field = "O_" + sum_periods.Range_Label (p);
- link_trip_file.Add_Field (field, DB_INTEGER, 10);
+ link_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
field [0] = 'D';
- link_trip_file.Add_Field (field, DB_INTEGER, 10);
+ link_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
}
link_trip_file.Create (Project_Filename (key));
link_flag = link_trip_flag = true;
@@ -110,10 +110,10 @@
for (p=0; p < num_periods; p++) {
field = "O_" + sum_periods.Range_Label (p);
- loc_trip_file.Add_Field (field, DB_INTEGER, 10);
+ loc_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
field [0] = 'D';
- loc_trip_file.Add_Field (field, DB_INTEGER, 10);
+ loc_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
}
loc_trip_file.Create (Project_Filename (key));
loc_trip_flag = true;
@@ -139,10 +139,10 @@
for (p=0; p < num_periods; p++) {
field = "O_" + sum_periods.Range_Label (p);
- zone_trip_file.Add_Field (field, DB_INTEGER, 10);
+ zone_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
field [0] = 'D';
- zone_trip_file.Add_Field (field, DB_INTEGER, 10);
+ zone_trip_file.Add_Field (field, DB_DOUBLE, 10.1);
}
zone_trip_file.Create (Project_Filename (key));
zone_trip_flag = true;
@@ -188,7 +188,7 @@
if (period_flag) {
trip_table_file->Add_Field ("PERIOD", DB_INTEGER, 2, NO_UNITS, true);
}
- trip_table_file->Add_Field ("TRIPS", DB_INTEGER, 4, NO_UNITS, true);
+ trip_table_file->Add_Field ("TRIPS", DB_DOUBLE, 4.2, NO_UNITS, true);
nzone = Max_Zone_Number ();
@@ -270,8 +270,8 @@
group_file.Add_Field ("GROUP", DB_INTEGER, 5);
group_file.Add_Field ("MODE", DB_STRING, 8);
group_file.Add_Field ("PURPOSE", DB_INTEGER, 5);
- group_file.Add_Field ("ORIGINS", DB_INTEGER, 10);
- group_file.Add_Field ("DESTINATIONS", DB_INTEGER, 10);
+ group_file.Add_Field ("ORIGINS", DB_DOUBLE, 10.1);
+ group_file.Add_Field ("DESTINATIONS", DB_DOUBLE, 10.1);
group_file.Add_Field ("LABEL", DB_STRING, 24);
group_file.Create (Project_Filename (key));
@@ -367,13 +367,13 @@
}
if (group_report_flag || group_file_flag) {
- Int3_Array int3_array;
- Ints_Array int2_array;
- Integers ints;
+ Dbl3_Array dbl3_array;
+ Dbls_Array dbl2_array;
+ Doubles dbls;
- ints.assign (2, 0);
- int2_array.assign (100, ints);
- int3_array.assign (MAX_MODE, int2_array);
- mode_purp_groups.assign ((zone_equiv.Max_Group () + 1), int3_array);
+ dbls.assign (2, 0);
+ dbl2_array.assign (100, dbls);
+ dbl3_array.assign (MAX_MODE, dbl2_array);
+ mode_purp_groups.assign ((zone_equiv.Max_Group () + 1), dbl3_array);
}
}
Modified: version7/branches/aecom/Transims70/TripSum/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Execute.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Execute.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -21,7 +21,7 @@
num = sum_periods.Num_Periods ();
if (link_flag || loc_trip_flag || zone_trip_flag) {
- Integers data;
+ Doubles data;
data.assign (2 * num, 0);
if (link_flag) {
Modified: version7/branches/aecom/Transims70/TripSum/Group_Report.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Group_Report.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Group_Report.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,12 +10,12 @@
void TripSum::Mode_Purpose_Group_Report (void)
{
- int g, m, p, org, des;
- int tot_org, tot_des;
- Int4_Itr i4_itr;
- Int3_Itr i3_itr;
- Ints_Itr i2_itr;
- Int_Itr int_itr;
+ int g, m, p;
+ double org, des, tot_org, tot_des;
+ Dbl4_Itr d4_itr;
+ Dbl3_Itr d3_itr;
+ Dbls_Itr d2_itr;
+ Dbl_Itr dbl_itr;
//---- print the report ----
@@ -26,11 +26,11 @@
tot_org = tot_des = 0;
- for (g=0, i4_itr = mode_purp_groups.begin (); i4_itr != mode_purp_groups.end (); i4_itr++, g++) {
- for (m=0, i3_itr = i4_itr->begin (); i3_itr != i4_itr->end (); i3_itr++, m++) {
- for (p=0, i2_itr = i3_itr->begin (); i2_itr != i3_itr->end (); i2_itr++, p++) {
- org = i2_itr->at (0);
- des = i2_itr->at (1);
+ for (g=0, d4_itr = mode_purp_groups.begin (); d4_itr != mode_purp_groups.end (); d4_itr++, g++) {
+ for (m=0, d3_itr = d4_itr->begin (); d3_itr != d4_itr->end (); d3_itr++, m++) {
+ for (p=0, d2_itr = d3_itr->begin (); d2_itr != d3_itr->end (); d2_itr++, p++) {
+ org = d2_itr->at (0);
+ des = d2_itr->at (1);
if (org == 0 && des == 0) continue;
@@ -37,11 +37,11 @@
tot_org += org;
tot_des += des;
- Print (1, String ("%5d %8.8s %3d %10d %10d %s") % g % Mode_Code ((Mode_Type) m) % p % org % des % zone_equiv.Group_Label (g));
+ Print (1, String ("%5d %8.8s %3d %10.0lf %10.0lf %s") % g % Mode_Code ((Mode_Type) m) % p % org % des % zone_equiv.Group_Label (g));
}
}
}
- Print (2, String ("Total %10d %10d") % tot_org % tot_des);
+ Print (2, String ("Total %10.0lf %10.0lf") % tot_org % tot_des);
Header_Number (0);
}
Modified: version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -23,7 +23,7 @@
Int_Map_Itr map_itr;
Int_Dbl_Map_Stat map_stat;
Location_Data *location_ptr;
- Integers *ints_ptr;
+ Doubles *dbls_ptr;
Trip_Index prev_index, trip_index;
Link_Data *link_ptr;
Node_Data *node_ptr;
@@ -137,8 +137,8 @@
if (map_itr != location_map.end ()) {
location_ptr = &location_array [map_itr->second];
- ints_ptr = &link_trip_data [location_ptr->Link ()];
- (*ints_ptr) [period * 2]++;
+ dbls_ptr = &link_trip_data [location_ptr->Link ()];
+ (*dbls_ptr) [period * 2] += trip_data.Trips ();
}
}
period = sum_periods.Period (trip_data.End ());
@@ -147,8 +147,8 @@
if (map_itr != location_map.end ()) {
location_ptr = &location_array [map_itr->second];
- ints_ptr = &link_trip_data [location_ptr->Link ()];
- (*ints_ptr) [period * 2 + 1]++;
+ dbls_ptr = &link_trip_data [location_ptr->Link ()];
+ (*dbls_ptr) [period * 2 + 1] += trip_data.Trips ();
}
}
}
@@ -160,8 +160,8 @@
if (period >= 0) {
map_itr = location_map.find (trip_data.Origin ());
if (map_itr != location_map.end ()) {
- ints_ptr = &loc_trip_data [map_itr->second];
- (*ints_ptr) [period * 2]++;
+ dbls_ptr = &loc_trip_data [map_itr->second];
+ (*dbls_ptr) [period * 2]++;
}
}
period = sum_periods.Period (trip_data.End ());
@@ -168,8 +168,8 @@
if (period >= 0) {
map_itr = location_map.find (trip_data.Destination ());
if (map_itr != location_map.end ()) {
- ints_ptr = &loc_trip_data [map_itr->second];
- (*ints_ptr) [period * 2 + 1]++;
+ dbls_ptr = &loc_trip_data [map_itr->second];
+ (*dbls_ptr) [period * 2 + 1]++;
}
}
}
@@ -184,8 +184,8 @@
location_ptr = &location_array [map_itr->second];
if (location_ptr->Zone () >= 0) {
- ints_ptr = &zone_trip_data [location_ptr->Zone ()];
- (*ints_ptr) [period * 2]++;
+ dbls_ptr = &zone_trip_data [location_ptr->Zone ()];
+ (*dbls_ptr) [period * 2]++;
}
}
}
@@ -196,8 +196,8 @@
location_ptr = &location_array [map_itr->second];
if (location_ptr->Zone () >= 0) {
- ints_ptr = &zone_trip_data [location_ptr->Zone ()];
- (*ints_ptr) [period * 2 + 1]++;
+ dbls_ptr = &zone_trip_data [location_ptr->Zone ()];
+ (*dbls_ptr) [period * 2 + 1]++;
}
}
}
@@ -258,10 +258,10 @@
des = zone_equiv.Zone_Group (des);
if (org > 0) {
- mode_purp_groups [org] [trip_data.Mode ()] [trip_data.Purpose ()] [0]++;
+ mode_purp_groups [org] [trip_data.Mode ()] [trip_data.Purpose ()] [0] += trip_data.Trips ();
}
if (des > 0) {
- mode_purp_groups [des] [trip_data.Mode ()] [trip_data.Purpose ()] [1]++;
+ mode_purp_groups [des] [trip_data.Mode ()] [trip_data.Purpose ()] [1] += trip_data.Trips ();
}
}
}
@@ -298,7 +298,7 @@
des = trip_table_file->Add_Des (des);
if (org >= 0 && des >= 0) {
- trip_table_file->Add_Cell_Index (period, org, des, 0, 1);
+ trip_table_file->Add_Cell_Index (period, org, des, 0, trip_data.Trips ());
}
}
}
Modified: version7/branches/aecom/Transims70/TripSum/Top_100_Report.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Top_100_Report.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Top_100_Report.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,15 +10,16 @@
void TripSum::Top_100_Report (int report_num)
{
- int i, j, k, dir, from, to, link, volume, cap, tod_cap, lanes, tod_lanes, tod, list, criteria, period;
+ int i, j, k, dir, from, to, link, cap, tod_cap, lanes, tod_lanes, tod, list, criteria, period;
int p, num_periods, anode, bnode;
Dtime low, high, hour, half_hour;
+ double volume;
- Ints_Itr link_itr;
+ Dbls_Itr link_itr;
Link_Data *link_ptr;
Dir_Data *dir_ptr;
Node_Data *node_ptr;
- Integers *trips;
+ Doubles *trips;
Lane_Use_Period *use_ptr;
typedef struct {
@@ -123,17 +124,17 @@
switch (report_num) {
case TOP_100_LINKS:
- criteria = volume;
+ criteria = (int) volume;
break;
case TOP_100_LANES:
if (tod_lanes > 0) {
- criteria = (volume + tod_lanes / 2) / tod_lanes;
+ criteria = (int) ((volume + tod_lanes / 2) / tod_lanes);
} else {
criteria = 0;
}
break;
case TOP_100_VC_RATIOS:
- criteria = (volume * 100 + tod_cap / 2) / tod_cap;
+ criteria = (int) ((volume * 100 + tod_cap / 2) / tod_cap);
break;
}
top_ptr = top_data;
@@ -148,7 +149,7 @@
top_ptr->from = from;
top_ptr->to = to;
top_ptr->period = p;
- top_ptr->volume = volume;
+ top_ptr->volume = (int) volume;
top_ptr->capacity = tod_cap;
break;
}
Modified: version7/branches/aecom/Transims70/TripSum/TripSum.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/TripSum.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/TripSum.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -11,7 +11,7 @@
TripSum::TripSum (void) : Select_Service ()
{
Program ("TripSum");
- Version (1);
+ Version (2);
Title ("Trip Summary Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/TripSum/TripSum.hpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/TripSum.hpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/TripSum.hpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -57,10 +57,10 @@
Db_Matrix *trip_table_file;
Doubles start_time, mid_time, end_time, productions, attractions;
- Ints_Array link_trip_data, loc_trip_data, zone_trip_data;
+ Dbls_Array link_trip_data, loc_trip_data, zone_trip_data;
Trip_Sum_Data trip_length, trip_purpose, mode_length, mode_purpose;
Int_Dbl_Map time_inc_map, len_inc_map;
- Int4_Array mode_purp_groups;
+ Dbl4_Array mode_purp_groups;
void Read_Trips (void);
void Write_Time_Distribution (void);
Modified: version7/branches/aecom/Transims70/TripSum/Write_Group_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Write_Group_File.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Write_Group_File.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,23 +10,24 @@
void TripSum::Write_Mode_Purpose_Groups (void)
{
- int g, m, p, org, des;
+ int g, m, p;
+ double org, des;
- Int4_Itr i4_itr;
- Int3_Itr i3_itr;
- Ints_Itr i2_itr;
- Int_Itr int_itr;
+ Dbl4_Itr d4_itr;
+ Dbl3_Itr d3_itr;
+ Dbls_Itr d2_itr;
+ Dbl_Itr dbl_itr;
Show_Message ("Writing Mode Purpose Groups -- Record");
Set_Progress ();
- for (g=0, i4_itr = mode_purp_groups.begin (); i4_itr != mode_purp_groups.end (); i4_itr++, g++) {
- for (m=0, i3_itr = i4_itr->begin (); i3_itr != i4_itr->end (); i3_itr++, m++) {
- for (p=0, i2_itr = i3_itr->begin (); i2_itr != i3_itr->end (); i2_itr++, p++) {
+ for (g=0, d4_itr = mode_purp_groups.begin (); d4_itr != mode_purp_groups.end (); d4_itr++, g++) {
+ for (m=0, d3_itr = d4_itr->begin (); d3_itr != d4_itr->end (); d3_itr++, m++) {
+ for (p=0, d2_itr = d3_itr->begin (); d2_itr != d3_itr->end (); d2_itr++, p++) {
Show_Progress ();
- org = i2_itr->at (0);
- des = i2_itr->at (1);
+ org = d2_itr->at (0);
+ des = d2_itr->at (1);
if (org == 0 && des == 0) continue;
Modified: version7/branches/aecom/Transims70/TripSum/Write_Link_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Write_Link_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Write_Link_Trips.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,10 +10,11 @@
void TripSum::Write_Link_Trips (void)
{
- int i, j, p, link, num_periods, total, count;
+ int i, j, p, link, num_periods, count;
+ double total;
Int_Map_Itr map_itr;
- Integers *trips;
+ Doubles *trips;
Show_Message ("Writing Link Trip Ends -- Link");
Set_Progress ();
Modified: version7/branches/aecom/Transims70/TripSum/Write_Loc_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Write_Loc_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Write_Loc_Trips.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,10 +10,11 @@
void TripSum::Write_Location_Trips (void)
{
- int i, j, p, location, num_periods, total, count;
+ int i, j, p, location, num_periods, count;
+ double total;
Int_Map_Itr map_itr;
- Integers *trips;
+ Doubles *trips;
Show_Message ("Writing Location Trip Ends -- Location");
Set_Progress ();
Modified: version7/branches/aecom/Transims70/TripSum/Write_Zone_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/TripSum/Write_Zone_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/TripSum/Write_Zone_Trips.cpp 2019-01-15 21:16:35 UTC (rev 1716)
@@ -10,11 +10,12 @@
void TripSum::Write_Zone_Trips (void)
{
- int i, i1, j, p, zone, num_periods, total, count;
+ int i, i1, j, p, zone, num_periods, count;
+ double total;
bool flag;
Int_Map_Itr map_itr;
- Integers *trips;
+ Doubles *trips;
Zone_Data *zone_ptr;
Show_Message ("Writing Zone Trip Ends -- Zone");
Added: version7/branches/aecom/Transims70/x64/Release/MatrixData.exe
===================================================================
(Binary files differ)
Index: version7/branches/aecom/Transims70/x64/Release/MatrixData.exe
===================================================================
--- version7/branches/aecom/Transims70/x64/Release/MatrixData.exe 2018-12-20 02:43:27 UTC (rev 1715)
+++ version7/branches/aecom/Transims70/x64/Release/MatrixData.exe 2019-01-15 21:16:35 UTC (rev 1716)
Property changes on: version7/branches/aecom/Transims70/x64/Release/MatrixData.exe
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-12-20 02:43:29
|
Revision: 1715
http://sourceforge.net/p/transims/code/1715
Author: davidroden
Date: 2018-12-20 02:43:27 +0000 (Thu, 20 Dec 2018)
Log Message:
-----------
TRANSIMS Version 7.3 from AECOM branch 1714
Modified Paths:
--------------
version7/trunk/Transims70/Converge_Service/Control.cpp
version7/trunk/Transims70/Converge_Service/Get_Trip_Data.cpp
version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
version7/trunk/Transims70/Converge_Service/Write_Plan_Files.cpp
version7/trunk/Transims70/ConvertTrips/Adjust_Trips.cpp
version7/trunk/Transims70/ConvertTrips/Control.cpp
version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp
version7/trunk/Transims70/ConvertTrips/ConvertTrips.hpp
version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj
version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters
version7/trunk/Transims70/ConvertTrips/Execute.cpp
version7/trunk/Transims70/ConvertTrips/Get_Trip_Data.cpp
version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp
version7/trunk/Transims70/ConvertTrips/Set_Trip.cpp
version7/trunk/Transims70/ConvertTrips/Tour_Process.cpp
version7/trunk/Transims70/Data_Service/Performance_Data.cpp
version7/trunk/Transims70/Data_Service/Read_Plans.cpp
version7/trunk/Transims70/Data_Service/Read_Problems.cpp
version7/trunk/Transims70/Data_Service/Read_Trips.cpp
version7/trunk/Transims70/Data_Service/Write_Trips.cpp
version7/trunk/Transims70/File_Service/Fare_File.cpp
version7/trunk/Transims70/File_Service/File_Service.vcxproj
version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
version7/trunk/Transims70/File_Service/Plan_Skim_File.cpp
version7/trunk/Transims70/File_Service/Plan_Sum_File.cpp
version7/trunk/Transims70/File_Service/Trip_File.cpp
version7/trunk/Transims70/GTFSData/GTFSData.cpp
version7/trunk/Transims70/Include/Execution_Service.hpp
version7/trunk/Transims70/Include/Performance_Data.hpp
version7/trunk/Transims70/Include/Router_Service.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/Trip_Data.hpp
version7/trunk/Transims70/Include/Trip_File.hpp
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/MatrixData/Control.cpp
version7/trunk/Transims70/MatrixData/Execute.cpp
version7/trunk/Transims70/MatrixData/MatrixData.cpp
version7/trunk/Transims70/MatrixData/MatrixData.hpp
version7/trunk/Transims70/MatrixData/MatrixData.vcxproj
version7/trunk/Transims70/MatrixData/MatrixData.vcxproj.filters
version7/trunk/Transims70/MatrixData/Read_Matrix.cpp
version7/trunk/Transims70/NetDiff/NetDiff.cpp
version7/trunk/Transims70/NetPrep/NetPrep.cpp
version7/trunk/Transims70/NewFormat/NewFormat.cpp
version7/trunk/Transims70/PathSkim/Save_Plans.cpp
version7/trunk/Transims70/PerfPrep/Load_Transit_Data.cpp
version7/trunk/Transims70/PlanCompare/PlanCompare.cpp
version7/trunk/Transims70/PlanCompare/Read_Plans.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.hpp
version7/trunk/Transims70/PlanSelect/Read_Plans.cpp
version7/trunk/Transims70/PlanSelect/Read_Vol_Cnt.cpp
version7/trunk/Transims70/PlanSum/PlanSum.cpp
version7/trunk/Transims70/PlanSum/Process_Plan.cpp
version7/trunk/Transims70/PlanTrips/Put_Trip_Data.cpp
version7/trunk/Transims70/Relocate/Get_Trip_Data.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router_Service/Control.cpp
version7/trunk/Transims70/Router_Service/Drive_Path.cpp
version7/trunk/Transims70/Router_Service/Execute.cpp
version7/trunk/Transims70/Router_Service/Parking_Access.cpp
version7/trunk/Transims70/Router_Service/Plan_Build.cpp
version7/trunk/Transims70/Router_Service/Plan_Flow.cpp
version7/trunk/Transims70/Router_Service/Plan_Processing.cpp
version7/trunk/Transims70/Router_Service/Plan_Update.cpp
version7/trunk/Transims70/Router_Service/Router_Service.cpp
version7/trunk/Transims70/Router_Service/Sum_Demand.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Record.cpp
version7/trunk/Transims70/SysLib/Service/Execution_Service.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/Tools/String.cpp
version7/trunk/Transims70/TransitNet/TransitNet.cpp
version7/trunk/Transims70/TripPrep/Control.cpp
version7/trunk/Transims70/TripPrep/Execute.cpp
version7/trunk/Transims70/TripPrep/Read_Trips.cpp
version7/trunk/Transims70/TripPrep/TripPrep.cpp
version7/trunk/Transims70/TripPrep/TripPrep.hpp
version7/trunk/Transims70/TripSum/Diurnal_Report.cpp
version7/trunk/Transims70/TripSum/Read_Trips.cpp
version7/trunk/Transims70/TripSum/Time_Report.cpp
version7/trunk/Transims70/TripSum/TripSum.cpp
version7/trunk/Transims70/TripSum/TripSum.hpp
version7/trunk/Transims70/TripSum/Write_Loc_Shares.cpp
version7/trunk/Transims70/TripSum/Write_Time.cpp
version7/trunk/Transims70/TripSum/Write_Trip_Length.cpp
version7/trunk/Transims70/TripSum/Write_Trip_Time.cpp
version7/trunk/Transims70/Validate/Control.cpp
version7/trunk/Transims70/Validate/Execute.cpp
version7/trunk/Transims70/Validate/Validate.cpp
version7/trunk/Transims70/Validate/Validate.hpp
version7/trunk/Transims70/Validate/Validate.vcxproj
version7/trunk/Transims70/Validate/Validate.vcxproj.filters
Added Paths:
-----------
version7/trunk/Transims70/ConvertTrips/Zone_Nodes.cpp
version7/trunk/Transims70/File_Service/Vol_Count_File.cpp
version7/trunk/Transims70/Include/Vol_Count_File.hpp
version7/trunk/Transims70/MatrixData/Factor_Matrix.cpp
version7/trunk/Transims70/Validate/Read_Volume_Count.cpp
version7/trunk/Transims70/Validate/Write_Vol_Cnt_File.cpp
Modified: version7/trunk/Transims70/Converge_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Control.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Converge_Service/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -21,8 +21,8 @@
Converge_Step_Data step_data;
- Integer_List max_iter_list, min_cost_list, max_cost_list, min_score_list;
- Double_List init_fac_list, fac_inc_list, max_fac_list, per_time_list, per_cost_list;
+ Integer_List max_iter_list, min_cost_list, max_cost_list;
+ Double_List init_fac_list, fac_inc_list, max_fac_list, per_time_list, per_cost_list, min_score_list;
Double_List min_time_ratio_list, max_time_ratio_list, min_penalty_list, max_penalty_list;
Double_List link_gap_list, trip_gap_list, toll_gap_list, transit_gap_list, parking_gap_list, ratio_gap_list, max_per_list;
Dtime_List min_time_list, max_time_list;
@@ -381,7 +381,7 @@
//---- mininum selection score ----
- step_itr->min_select_score = min_score_list.Best (i);
+ step_itr->min_select_score = DTOI (min_score_list.Best (i) * BASE_SCORE / 100);
//---- maximum percent selected ----
Modified: version7/trunk/Transims70/Converge_Service/Get_Trip_Data.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Get_Trip_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Converge_Service/Get_Trip_Data.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -12,7 +12,7 @@
{
if (Data_Service::Get_Trip_Data (file, trip_rec)) {
- file.Add_Trip (trip_rec.Household (), trip_rec.Person (), trip_rec.Tour ());
+ file.Add_Trip (trip_rec.Household (), trip_rec.Person (), trip_rec.Tour (), trip_rec.Trips ());
return (Set_Trip_Data (trip_rec));
}
Modified: version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -11,16 +11,17 @@
int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type)
{
Dtime time1, time2, time_diff, tod, duration;
- int cost1, cost2, cost_diff, score, ratio;
+ int cost1, cost2, cost_diff, score, max_score, ratio;
double prob;
- score = 100;
+ max_score = score = DTOI (MIN (new_plan.Trips (), Max_Trip_Factor ()) * BASE_SCORE);
+
type = NO_SELECT_TYPE;
if (!new_plan.Path_Problem ()) {
if (new_plan.Problem () == PARK_CAP_PROBLEM || new_plan.Problem () == BOARDING_PROBLEM) {
- score = step_itr->min_select_score;
+ score = MIN (step_itr->min_select_score * max_score / BASE_SCORE, max_score);
if (new_plan.Problem () == PARK_CAP_PROBLEM) {
type = PARKING_PROBLEM_TYPE;
} else {
@@ -32,14 +33,14 @@
//---- time ratio selection ----
- if (score < 100 && step_itr->time_ratio_flag) {
+ if (score < max_score && step_itr->time_ratio_flag) {
ratio = new_plan.Time_Ratio ();
if (ratio > step_itr->max_time_ratio) {
- score = 100;
+ score = max_score;
type = TIME_RATIO_TYPE;
} else if (ratio >= step_itr->min_time_ratio) {
- ratio = (ratio - step_itr->min_time_ratio) * 100 / step_itr->max_min_time_ratio;
+ ratio = MIN ((ratio - step_itr->min_time_ratio) * max_score / step_itr->max_min_time_ratio, max_score);
if (ratio > score) {
type = TIME_RATIO_TYPE;
score = ratio;
@@ -49,14 +50,14 @@
//---- penalty ratio selection ----
- if (score < 100 && step_itr->penalty_ratio_flag) {
+ if (score < max_score && step_itr->penalty_ratio_flag) {
ratio = new_plan.Penalty_Ratio ();
if (ratio > step_itr->max_penalty_ratio) {
- score = 100;
+ score = max_score;
type = PENALTY_RATIO_TYPE;
} else if (ratio >= step_itr->min_penalty_ratio) {
- ratio = (ratio - step_itr->min_penalty_ratio) * 100 / step_itr->max_min_penalty_ratio;
+ ratio = MIN ((ratio - step_itr->min_penalty_ratio) * max_score / step_itr->max_min_penalty_ratio, max_score);
if (ratio > score) {
type = PENALTY_RATIO_TYPE;
score = ratio;
@@ -66,7 +67,7 @@
//---- select the plan to keep ----
- if (score < 100 && old_plan.size () > 0 && !old_plan.Path_Problem () && old_plan.Impedance () > 0) {
+ if (score < max_score && old_plan.size () > 0 && !old_plan.Path_Problem () && old_plan.Impedance () > 0) {
//---- compare plan times ----
@@ -77,7 +78,7 @@
time_diff = time1 - time2;
if (time_diff > step_itr->max_time_diff) {
- score = 100;
+ score = max_score;
type = TRAVEL_TIME_TYPE;
} else if (time_diff >= step_itr->min_time_diff && time2 > 0) {
prob = (double) time_diff / time2;
@@ -84,13 +85,13 @@
if (prob >= step_itr->percent_time_diff) {
if (step_itr->max_min_time_diff > 1) {
time_diff = time_diff - step_itr->min_time_diff;
- ratio = 100 * time_diff / step_itr->max_min_time_diff;
+ ratio = MIN (max_score * time_diff / step_itr->max_min_time_diff, max_score);
if (ratio > score) {
type = TRAVEL_TIME_TYPE;
score = ratio;
}
} else {
- score = 100;
+ score = max_score;
type = TRAVEL_TIME_TYPE;
}
}
@@ -99,7 +100,7 @@
//---- compare plan costs ----
- if (score < 100 && step_itr->cost_diff_flag) {
+ if (score < max_score && step_itr->cost_diff_flag) {
cost1 = new_plan.Impedance ();
cost2 = old_plan.Impedance ();
@@ -106,7 +107,7 @@
cost_diff = cost1 - cost2;
if (cost_diff > step_itr->max_cost_diff) {
- score = 100;
+ score = max_score;
type = IMPEDANCE_TYPE;
} else if (cost_diff >= step_itr->min_cost_diff && cost2 > 0) {
prob = (double) cost_diff / cost2;
@@ -113,13 +114,13 @@
if (prob >= step_itr->percent_cost_diff) {
if (step_itr->max_min_cost_diff > 1) {
cost_diff = cost_diff - step_itr->min_cost_diff;
- ratio = 100 * cost_diff / step_itr->max_min_cost_diff;
+ ratio = MIN (max_score * cost_diff / step_itr->max_min_cost_diff, max_score);
if (ratio > score) {
type = IMPEDANCE_TYPE;
ratio = score;
}
} else {
- score = 100;
+ score = max_score;
type = IMPEDANCE_TYPE;
}
}
@@ -130,9 +131,9 @@
if (score == 0) {
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
- score = MIN (MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), 0), 100);
+ score = MIN (MAX ((int) (max_score * fabs (prob - 0.5) * 2.0 + 0.5), 0), max_score);
- if (score >= step_itr->min_select_score) {
+ if (score >= MIN (step_itr->min_select_score * max_score / BASE_SCORE, max_score)) {
type = SELECT_DIFFERENCE_TYPE;
} else {
//score = 0;
Modified: version7/trunk/Transims70/Converge_Service/Write_Plan_Files.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Write_Plan_Files.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Converge_Service/Write_Plan_Files.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -141,7 +141,7 @@
Warning ("Writing ") << new_problem_file->File_Type ();
new_problem_flag = false;
}
- new_problem_file->Add_Trip (plan.Household (), plan.Person (), plan.Tour ());
+ new_problem_file->Add_Trip (plan.Household (), plan.Person (), plan.Tour (), plan.Trips ());
}
}
}
Modified: version7/trunk/Transims70/ConvertTrips/Adjust_Trips.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Adjust_Trips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Adjust_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -255,7 +255,7 @@
Warning ("Writing ") << problem_file->File_Type ();
problem_flag = false;
}
- problem_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour ());
+ problem_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour (), trip_itr->Trips ());
}
continue;
}
Modified: version7/trunk/Transims70/ConvertTrips/Control.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Control.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Control.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -69,6 +69,26 @@
hhold_id = Get_Control_Integer (FIRST_HOUSEHOLD_NUMBER);
+ //---- od output type ----
+
+ od_output_type = ID_Code (Get_Control_Text (OD_OUTPUT_TYPE));
+ if (od_output_type == NO_ID) od_output_type = LOCATION_ID;
+ if (od_output_type != LOCATION_ID && od_output_type != ZONE_ID && od_output_type != NODE_ID) {
+ Error ("OD Output Type is Out-of-Range (LOCATION, ZONE, NODE)");
+ }
+ zone_node_flag = (od_output_type == NODE_ID);
+
+ //---- fractional trip flag ----
+
+ fraction_flag = Get_Control_Flag (FRACTIONAL_TRIP_FLAG);
+
+ if (fraction_flag) {
+
+ //---- minimum trip value ----
+
+ min_trips = Get_Control_Double (MINIMUM_TRIP_VALUE);
+ }
+
//---- get the additional travel time ----
additional_time = Get_Control_Time (ADDITIONAL_TRAVEL_TIME);
Modified: version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -11,7 +11,7 @@
ConvertTrips::ConvertTrips (void) : Select_Service ()
{
Program ("ConvertTrips");
- Version (1);
+ Version (0);
Title ("Trip Table Conversion Utility");
System_File_Type required_files [] = {
@@ -36,6 +36,9 @@
};
Control_Key converttrips_keys [] = { //--- code, key, level, status, type, default, range, help ----
{ FIRST_HOUSEHOLD_NUMBER, "FIRST_HOUSEHOLD_NUMBER", LEVEL0, OPT_KEY, INT_KEY, "1", "1..1000000000", NO_HELP },
+ { OD_OUTPUT_TYPE, "OD_OUTPUT_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "LOCATION", "LOCATION, ZONE, NODE", NO_HELP },
+ { FRACTIONAL_TRIP_FLAG, "FRACTIONAL_TRIP_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
+ { MINIMUM_TRIP_VALUE, "MINIMUM_TRIP_VALUE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.01", "0.001..1.0", NO_HELP },
{ ADDITIONAL_TRAVEL_TIME, "ADDITIONAL_TRAVEL_TIME", LEVEL0, OPT_KEY, TIME_KEY, "0 minutes", "0..30 minutes", NO_HELP },
{ TOUR_DATA_FILE, "TOUR_DATA_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ TOUR_DATA_FORMAT, "TOUR_DATA_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
@@ -111,14 +114,17 @@
Time_Table_Flag (true);
equiv_flag = skim_flag = zone_loc_flag = tour_flag = script_flag = diurnal_flag = false;
- new_hhold_flag = new_veh_flag = problem_flag = zone_sum_flag = false;
+ new_hhold_flag = new_veh_flag = problem_flag = zone_sum_flag = fraction_flag = zone_node_flag = false;
+ od_output_type = LOCATION_ID;
num_zone = additional_time = 0;
tot_tours = tot_trips = tot_errors = 0;
- new_trips = new_hholds = new_persons = new_vehicles = 0;
+ new_trips = 0;
+ new_hholds = new_persons = new_vehicles = 0;
tot_add = tot_del = 0.0;
group_number = 0;
skim_ptr = 0;
+ min_trips = 0;
trip_copy = hhold_copy = veh_copy = 0;
max_hh_in = max_veh_in = 0;
Modified: version7/trunk/Transims70/ConvertTrips/ConvertTrips.hpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.hpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.hpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -33,7 +33,8 @@
protected:
enum ConvertTrips_Keys {
- FIRST_HOUSEHOLD_NUMBER = 1, ADDITIONAL_TRAVEL_TIME, TOUR_DATA_FILE, TOUR_DATA_FORMAT,
+ FIRST_HOUSEHOLD_NUMBER = 1, OD_OUTPUT_TYPE, FRACTIONAL_TRIP_FLAG, MINIMUM_TRIP_VALUE,
+ ADDITIONAL_TRAVEL_TIME, TOUR_DATA_FILE, TOUR_DATA_FORMAT,
TOUR_HOUSEHOLD_FIELD, TOUR_PERSON_FIELD, TOUR_NUMBER_FIELD, TOUR_PURPOSE_FIELD,
TOUR_MODE_FIELD, TOUR_ORIGIN_FIELD, TOUR_DESTINATION_FIELD, TOUR_STOP_OUT_FIELD,
TOUR_STOP_IN_FIELD, TOUR_START_FIELD, TOUR_RETURN_FIELD, TOUR_GROUP_FIELD, TOUR_GROUP_SCRIPT,
@@ -60,13 +61,12 @@
TIME_EQUIV, ZONE_EQUIV, TRAVELER_SCRIPT, TRAVELER_STACK, ZONE_TRIP_ENDS };
bool time_flag, equiv_flag, skim_flag, zone_loc_flag, tour_flag, script_flag, diurnal_flag;
- bool new_hhold_flag, new_veh_flag, problem_flag, zone_sum_flag;
- int num_zone, tot_tours, tot_trips, tot_errors, group_number;
- int hhold_id, new_trips, new_hholds, new_persons, new_vehicles;
- int trip_copy, hhold_copy, veh_copy, max_hh_in, max_veh_in;
+ bool new_hhold_flag, new_veh_flag, problem_flag, zone_sum_flag, fraction_flag, zone_node_flag;
+ int num_zone, group_number, hhold_id, new_hholds, new_persons, new_vehicles;
+ int trip_copy, hhold_copy, veh_copy, max_hh_in, max_veh_in, od_output_type;
int group_fld, org_fld, des_fld, start_fld, mode_fld, purpose_fld, duration_fld, constraint_fld, priority_fld, veh_type_fld, passengers_fld, type_fld;
Dtime additional_time, midnight, minute, two_minutes, five_minutes, ten_minutes, one_hour;
- double tot_add, tot_del;
+ double tot_add, tot_del, tot_tours, tot_trips, tot_errors, new_trips, min_trips;
Trip_File *trip_file;
Household_File *household_file;
@@ -75,6 +75,7 @@
Random random_org, random_des, random_tod, random_stop, random_duration, random_return;
Time_Periods tour_periods;
Integers zone_loc, org_out, des_out, *org_ptr, *des_ptr;
+ Ints_Array zone_node;
Doubles org_in, des_in;
Int_Map field_map;
@@ -100,10 +101,11 @@
void Compile_Scripts (void);
void Zone_Location (void);
+ void Zone_Nodes (void);
void Parking_Check (void);
void Tour_Processing (void);
void Read_Trip_Table (ConvertTrip_Itr group);
- int Set_Trips (ConvertTrip_Itr group, int org, int des, int trips, int num, int t1, int t2, bool return_flag);
+ double Set_Trips (ConvertTrip_Itr group, int org, int des, double trips, int num, int t1, int t2, bool return_flag);
bool Set_Time (ConvertTrip_Data *group, Dtime &start, Dtime &end, Dtime ttim, int num);
bool Locate_OD (ConvertTrip_Data *group, int &org, int &des, int &stop, int &park, double &dist1, double &dist2);
void Adjust_Trips (void);
Modified: version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj 2018-12-20 02:43:27 UTC (rev 1715)
@@ -186,6 +186,7 @@
<ClCompile Include="Tour_Map.cpp" />
<ClCompile Include="Tour_Process.cpp" />
<ClCompile Include="Zone_Location.cpp" />
+ <ClCompile Include="Zone_Nodes.cpp" />
<ClCompile Include="Zone_Sum_Report.cpp" />
</ItemGroup>
<ItemGroup>
Modified: version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters 2018-12-20 02:43:27 UTC (rev 1715)
@@ -97,5 +97,8 @@
<ClCompile Include="Zone_Sum_Report.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Zone_Nodes.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/ConvertTrips/Execute.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Execute.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Execute.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -24,6 +24,12 @@
Zone_Location ();
+ //---- map node to zones ----
+
+ if (zone_node_flag) {
+ Zone_Nodes ();
+ }
+
//---- zone summary data ----
if (zone_sum_flag) {
@@ -126,7 +132,7 @@
//---- end the program ----
- Report_Problems (tot_trips);
+ Report_Problems ((int) tot_trips);
Exit_Stat (DONE);
}
Modified: version7/trunk/Transims70/ConvertTrips/Get_Trip_Data.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Get_Trip_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Get_Trip_Data.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -35,7 +35,7 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (file.Household (), file.Person (), file.Tour ());
+ trip_file->Add_Trip (file.Household (), file.Person (), file.Tour (), file.Trips ());
trip_copy++;
//---- don't save the record ----
Modified: version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -11,10 +11,10 @@
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, per, num_periods;
- int total, stat, errors, org_zone, des_zone, org, des, o, d, trips, num, num_shares, even_bucket, even;
+ int p, p1, p2, num_p, period, current, first_p, last_p, per, num_periods;
+ int org_zone, des_zone, org, des, o, d, trp, 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;
+ double trip, added, deleted, bucket, trips, total, errors, stat, trip_fac;
Db_Matrix *file;
Factor_Period *period_fac;
@@ -23,7 +23,7 @@
Int_Map_Itr org_itr, des_itr;
Int_Map_RItr des_ritr;
- static string error_msg = "%d Trip%sbetween Zones %d and %d could not be allocated";
+ static string error_msg = "%.3lf Trip%sbetween Zones %d and %d could not be allocated";
//---- read the trip table ----
@@ -38,7 +38,7 @@
return_flag = group->Return_Flag ();
even_bucket = 1;
- bucket = 0.45;
+ bucket = (fraction_flag) ? 0 : 0.45;
factor_flag = group->Factor_Flag ();
time_fac_flag = group->Factor_Periods_Flag ();
@@ -154,13 +154,24 @@
org_in [org] += trip;
des_in [des] += trip;
}
- trip += bucket;
- trips = (int) trip;
- if (trips < 0) trips = 0;
- bucket = trip - trips;
+ if (fraction_flag) {
+ trip += bucket;
- if (trips == 0) continue;
- total += trips;
+ if (trip < min_trips) {
+ bucket = trip;
+ continue;
+ } else {
+ bucket = 0;
+ }
+ } else {
+ trip += bucket;
+ trp = (int) trip;
+ if (trp < 0) trp = 0;
+ bucket = trip - trp;
+ if (trp == 0) continue;
+ trip = trp;
+ }
+ total += trip;
//---- apply the selection script ----
@@ -199,7 +210,7 @@
if (time_fac_flag) {
period = -1;
p1 = p2 = 0;
- trip = 0.0;
+ trip_fac = 0.0;
for (p = first_p; p <= last_p; p++) {
tod = group->Diurnal_Period_Time (p);
@@ -210,50 +221,58 @@
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;
+ trips = trip_fac * period_fac->Factor ();
+
+ if (!fraction_flag) {
+ if (trips > trip) {
+ added += trips - trip_fac;
+ } else {
+ deleted += trip_fac - trips;
+ }
+ trips= period_fac->Bucket_Factor (trip_fac);
}
- trp = period_fac->Bucket_Factor (trip);
- if (trp > 0 && return_flag) {
+ if (trips > 0 && return_flag && !fraction_flag) {
+ trp = (int) trips;
even = (((trp + even_bucket) / 2) * 2);
even_bucket += trp - even;
- trp = even;
+ trips = even;
}
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
- if (stat > 0) {
+ if (trips > 0) {
+ stat = Set_Trips (group, org, des, trips, num, p1, p2, return_flag);
+
+ if (stat > 0.005) {
errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ Print (1, String (error_msg) % stat % ((stat != 1) ? "s " : " ") % org_zone % des_zone);
}
}
}
period = current;
p1 = p;
- trip = 0.0;
+ trip_fac = 0.0;
}
- trip += trips * group->Share (p, num);
+ trip_fac += trip * group->Share (p, num);
p2 = p;
}
+ trip = trip_fac;
} 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;
+ trips = trip * period_fac->Factor ();
+
+ if (!fraction_flag) {
+ if (trips > trip) {
+ added += trips - trip;
+ } else {
+ deleted += trip - trips;
+ }
+ trips = period_fac->Bucket_Factor (trip);
}
- trp = period_fac->Bucket_Factor (trip);
} else if (period >= 0) {
p1 = p2 = -1;
file->Period_Range (period, start, end);
@@ -269,24 +288,25 @@
}
if (p1 >= 0 && p2 >= 0) break;
}
- trp = trips;
+ trips = trip;
} else {
p1 = first_p;
p2 = last_p;
- trp = trips;
+ trips = trip;
}
- if (trp > 0 && return_flag) {
+ if (trips > 0 && return_flag && !fraction_flag) {
+ trp = (int) trips;
even = (((trp + even_bucket) / 2) * 2);
even_bucket += trp - even;
- trp = even;
+ trips = even;
}
//---- process the trips ----
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+ if (trips > 0) {
+ stat = Set_Trips (group, org, des, trips, num, p1, p2, return_flag);
- if (stat > 0) {
+ if (stat > 0.005) {
errors += stat;
Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
}
@@ -298,18 +318,18 @@
file->Close ();
- Print (1, String ("%s has %d Records and %d Trips") % file->File_Type () % Progress_Count () % total);
+ Print (1, String ("%s has %d Records and %.2lf Trips") % file->File_Type () % Progress_Count () % total);
tot_trips += total;
if (errors > 0) {
- Warning (String ("A Total of %d Trip%scould not be allocated") % errors % ((errors > 1) ? "s " : " "));
+ Warning (String ("A Total of %.2lf Trip%scould not be allocated") % errors % ((errors != 1) ? "s " : " "));
Write (1);
tot_errors += errors;
}
if (factor_flag) {
- Print (1, String ("Trip Adjustments: %.0lf trips added, %.0lf trips deleted") % added % deleted);
+ Print (1, String ("Trip Adjustments: %.2lf trips added, %.2lf trips deleted") % added % deleted);
tot_add += added;
tot_del += deleted;
}
Modified: version7/trunk/Transims70/ConvertTrips/Set_Trip.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Set_Trip.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Set_Trip.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -10,21 +10,25 @@
// Set_Trips
//---------------------------------------------------------
-int ConvertTrips::Set_Trips (ConvertTrip_Itr group, int org, int des, int trips, int num, int t1, int t2, bool return_flag)
+double ConvertTrips::Set_Trips (ConvertTrip_Itr group, int org, int des, double trips, int num, int t1, int t2, bool return_flag)
{
- int loc, trp, num_out, org_loc, org_park, des_loc, skim, period, type, org_zone, des_zone;
+ int loc, trp, num_out, org_loc, org_park, des_loc, skim, period, type, org_zone, des_zone, org_node, des_node, max_out;
int last, veh, x, y, mode, ntrips, retry_count, passengers, purpose, constraint, priority, veh_type;
- double org_wt, des_wt, prob, dist, cum_wt, dx, dy, share, share1, total, percent, percent_prob;
- bool org_flag, des_flag, travel_script_flag, skip, split_flag;
+ double org_wt, des_wt, prob, dist, cum_wt, dx, dy, share, share1, total, percent, percent_prob, last_trip, trips_out;
+ bool org_flag, des_flag, travel_script_flag, skip;
Dtime start, arrive, time, time1, ttim, t, duration;
Convert_Location *loc_ptr;
Location_Data *location_ptr;
+ Zone_Data *zone_ptr;
+ Node_Data *node_ptr;
Share_Data *share_ptr;
Int_Itr int_itr;
num_out = skim = 0;
loc_ptr = 0;
+ last_trip = 0;
+ trips_out = 0;
//---- set the vehicle access flags ----
@@ -36,65 +40,135 @@
des_flag = (mode != DRIVE_MODE && mode != PNR_IN_MODE && mode != KNR_IN_MODE &&
mode != HOV2_MODE && mode != HOV3_MODE && mode != HOV4_MODE && mode != TAXI_MODE);
- //---- calculate the origin weight ----
+ org_zone = des_zone = org_loc = des_loc = org_node = des_node = 0;
+ dist = 0;
- org_wt = 0.0;
+ if (od_output_type == ZONE_ID) {
+ org_wt = des_wt = 1.0;
- for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ org_zone = org;
+ des_zone = des;
- if (org_flag || loc_ptr->Org_Parking () >= 0) {
- org_wt += loc_ptr->Weight (group->Org_Wt ());
+ zone_ptr = &zone_array [org];
+
+ org = zone_ptr->Zone ();
+ x = zone_ptr->X ();
+ y = zone_ptr->Y ();
+
+ zone_ptr = &zone_array [des];
+
+ des = zone_ptr->Zone ();
+
+ dx = zone_ptr->X () - x;
+ dy = zone_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ } else if (od_output_type == NODE_ID) {
+
+ //---- calculate the origin weight ----
+
+ org_wt = 0.0;
+
+ for (int_itr = zone_node [org].begin (); int_itr != zone_node [org].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ org_wt += node_ptr->Control ();
}
- }
- if (org_ptr != 0) {
- for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
+ //---- calculate the destination weight ----
+
+ des_wt = 0.0;
+
+ for (int_itr = zone_node [des].begin (); int_itr != zone_node [des].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ des_wt += node_ptr->Control ();
+ }
+
+ } else {
+
+ //---- calculate the origin weight ----
+
+ org_wt = 0.0;
+
+ for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+
if (org_flag || loc_ptr->Org_Parking () >= 0) {
org_wt += loc_ptr->Weight (group->Org_Wt ());
}
}
- }
- if (org_wt == 0.0) return (trips);
+ if (org_ptr != 0) {
+ for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
- //---- check the destination weight ----
-
- des_wt = 0.0;
+ if (org_flag || loc_ptr->Org_Parking () >= 0) {
+ org_wt += loc_ptr->Weight (group->Org_Wt ());
+ }
+ }
+ }
+ if (org_wt == 0.0) return (trips);
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ //---- check the destination weight ----
- if (des_flag || loc_ptr->Des_Parking () >= 0) {
- des_wt += loc_ptr->Weight (group->Des_Wt ());
- }
- }
- if (des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
+ des_wt = 0.0;
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+
if (des_flag || loc_ptr->Des_Parking () >= 0) {
des_wt += loc_ptr->Weight (group->Des_Wt ());
}
}
+ if (des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+
+ if (des_flag || loc_ptr->Des_Parking () >= 0) {
+ des_wt += loc_ptr->Weight (group->Des_Wt ());
+ }
+ }
+ }
+ if (des_wt == 0.0) return (trips);
}
- if (des_wt == 0.0) return (trips);
- split_flag = false;
+ //---- number of output records ----
+
percent_prob = 0.0;
+ max_out = (int) trips;
if (return_flag) {
if (group->Return_Percent () == 0 || group->Return_Percent () == 100) {
- ntrips = (trips + 1) / 2;
+ ntrips = (int) (trips / 2);
} else {
- split_flag = true;
percent = (200.0 - group->Return_Percent ()) / 200.0;
percent_prob = group->Return_Percent () / percent;
ntrips = DTOI (trips * percent);
}
+ if (fraction_flag) {
+ if (ntrips <= 1) ntrips = 1;
+
+ max_out = ntrips * 2;
+ last_trip = (trips - (max_out - 2)) / 2;
+ if (trips > 0 && last_trip == 0) last_trip = 1.0;
+ }
+
} else {
- ntrips = trips;
+ ntrips = (int) trips;
+
+ if (fraction_flag) {
+ last_trip = trips - max_out;
+
+ if (ntrips == 0) {
+ if (last_trip > 0) {
+ ntrips = max_out = 1;
+ last_trip = trips;
+ }
+ } else if (trips > 0) {
+ last_trip += 1.0;
+ }
+ }
}
+ if (ntrips == 0) return (trips);
//---- distribute the trips to the time targets ----
@@ -115,96 +189,71 @@
for (trp=0; trp < ntrips; trp++) {
- //---- locate the trip origin ----
+ if (od_output_type == LOCATION_ID) {
- prob = org_wt * random_org.Probability ();
+ //---- locate the trip origin ----
- last = -1;
- cum_wt = 0.0;
+ prob = org_wt * random_org.Probability ();
- for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ last = -1;
+ cum_wt = 0.0;
- if (org_flag || loc_ptr->Org_Parking () >= 0) {
- share = loc_ptr->Weight (group->Org_Wt ());
+ for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
- if (share != 0.0) {
- cum_wt += share;
- if (prob < cum_wt) break;
- last = loc;
- }
- }
- }
- if (loc < 0 && org_ptr != 0) {
- for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
-
if (org_flag || loc_ptr->Org_Parking () >= 0) {
share = loc_ptr->Weight (group->Org_Wt ());
if (share != 0.0) {
cum_wt += share;
- if (prob < cum_wt) {
- loc = *int_itr;
- break;
+ if (prob < cum_wt) break;
+ last = loc;
+ }
+ }
+ }
+ if (loc < 0 && org_ptr != 0) {
+ for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+
+ if (org_flag || loc_ptr->Org_Parking () >= 0) {
+ share = loc_ptr->Weight (group->Org_Wt ());
+
+ if (share != 0.0) {
+ cum_wt += share;
+ if (prob < cum_wt) {
+ loc = *int_itr;
+ break;
+ }
+ last = *int_itr;
}
- last = *int_itr;
}
}
}
- }
- if (loc < 0) {
- if (last < 0) {
- Set_Problem (LOCATION_PROBLEM);
- continue;
+ if (loc < 0) {
+ if (last < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ loc = last;
+ loc_ptr = &convert_array [last];
}
- loc = last;
- loc_ptr = &convert_array [last];
- }
- org_park = loc_ptr->Org_Parking ();
+ org_park = loc_ptr->Org_Parking ();
- location_ptr = &location_array [loc];
-
- org_loc = location_ptr->Location ();
- org_zone = location_ptr->Zone ();
- x = location_ptr->X ();
- y = location_ptr->Y ();
-
- //---- calculate the destination weight ----
-
- des_wt = 0.0;
-
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
location_ptr = &location_array [loc];
- if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
- share = loc_ptr->Weight (group->Des_Wt ());
+ org_loc = location_ptr->Location ();
+ org_zone = location_ptr->Zone ();
+ x = location_ptr->X ();
+ y = location_ptr->Y ();
- if (share != 0.0) {
+ //---- calculate the destination weight ----
- if (group->Dist_Wt ()) {
+ des_wt = 0.0;
- //--- apply the distance weight ----
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+ location_ptr = &location_array [loc];
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
-
- dist = sqrt (dx * dx + dy * dy);
- if (dist == 0.0) dist = 0.01;
-
- des_wt += share * dist;
- } else {
- des_wt += share;
- }
- }
- }
- }
- if (des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
- location_ptr = &location_array [*int_itr];
-
if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
share = loc_ptr->Weight (group->Des_Wt ());
@@ -212,7 +261,7 @@
if (group->Dist_Wt ()) {
- //---- apply the distance weight ----
+ //--- apply the distance weight ----
dx = location_ptr->X () - x;
dy = location_ptr->Y () - y;
@@ -227,51 +276,50 @@
}
}
}
- }
- if (des_wt == 0.0) {
- Set_Problem (LOCATION_PROBLEM);
- continue;
- }
+ if (des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+ location_ptr = &location_array [*int_itr];
- //---- locate the destination ----
+ if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
+ share = loc_ptr->Weight (group->Des_Wt ());
- prob = des_wt * random_des.Probability ();
-
- last = -1;
- cum_wt = 0.0;
+ if (share != 0.0) {
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
- location_ptr = &location_array [loc];
+ if (group->Dist_Wt ()) {
- if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
- share = loc_ptr->Weight (group->Des_Wt ());
+ //---- apply the distance weight ----
- if (share != 0.0) {
- if (group->Dist_Wt ()) {
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
- //--- apply the distance weight ----
+ dist = sqrt (dx * dx + dy * dy);
+ if (dist == 0.0) dist = 0.01;
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
-
- dist = sqrt (dx * dx + dy * dy);
- if (dist == 0.0) dist = 0.01;
-
- cum_wt += share * dist;
- } else {
- cum_wt += share;
+ des_wt += share * dist;
+ } else {
+ des_wt += share;
+ }
+ }
}
- if (prob < cum_wt) break;
- last = loc;
}
}
- }
- if (loc < 0 && des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
- location_ptr = &location_array [*int_itr];
+ if (des_wt == 0.0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ //---- locate the destination ----
+
+ prob = des_wt * random_des.Probability ();
+
+ last = -1;
+ cum_wt = 0.0;
+
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+ location_ptr = &location_array [loc];
+
if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
share = loc_ptr->Weight (group->Des_Wt ());
@@ -278,7 +326,7 @@
if (share != 0.0) {
if (group->Dist_Wt ()) {
- //---- apply the distance weight ----
+ //--- apply the distance weight ----
dx = location_ptr->X () - x;
dy = location_ptr->Y () - y;
@@ -290,33 +338,121 @@
} else {
cum_wt += share;
}
- if (prob < cum_wt) {
- loc = *int_itr;
- break;
+ if (prob < cum_wt) break;
+ last = loc;
+ }
+ }
+ }
+ if (loc < 0 && des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+ location_ptr = &location_array [*int_itr];
+
+ if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
+ share = loc_ptr->Weight (group->Des_Wt ());
+
+ if (share != 0.0) {
+ if (group->Dist_Wt ()) {
+
+ //---- apply the distance weight ----
+
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+ if (dist == 0.0) dist = 0.01;
+
+ cum_wt += share * dist;
+ } else {
+ cum_wt += share;
+ }
+ if (prob < cum_wt) {
+ loc = *int_itr;
+ break;
+ }
+ last = *int_itr;
}
- last = *int_itr;
}
}
}
- }
- if (loc < 0) {
- if (last < 0) {
+ if (loc < 0) {
+ if (last < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ loc = last;
+ loc_ptr = &convert_array [last];
+ }
+ location_ptr = &location_array [loc];
+ des_loc = location_ptr->Location ();
+ des_zone = location_ptr->Zone ();
+
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ if (org_loc == des_loc) continue;
+
+ } else if (od_output_type == NODE_ID) {
+
+ //---- locate the trip origin ----
+
+ prob = org_wt * random_org.Probability ();
+
+ org_node = -1;
+ cum_wt = 0.0;
+
+ for (int_itr = zone_node [org].begin (); int_itr != zone_node [org].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ cum_wt += node_ptr->Control ();
+ if (prob <= cum_wt) {
+ org_node = *int_itr;
+ break;
+ }
+ }
+
+ if (org_node < 0) {
Set_Problem (LOCATION_PROBLEM);
continue;
}
- loc = last;
- loc_ptr = &convert_array [last];
- }
- location_ptr = &location_array [loc];
- des_loc = location_ptr->Location ();
- des_zone = location_ptr->Zone ();
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
+ node_ptr = &node_array [org_node];
+ x = node_ptr->X ();
+ y = node_ptr->Y ();
- dist = sqrt (dx * dx + dy * dy);
+ //---- locate the trip destination ----
+
+ prob = (des_wt - node_ptr->Control ()) * random_org.Probability ();
- if (org_loc == des_loc) continue;
+ des_node = -1;
+ cum_wt = 0.0;
+
+ for (int_itr = zone_node [des].begin (); int_itr != zone_node [des].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ if (*int_itr == org_node) continue;
+ cum_wt += node_ptr->Control ();
+ if (prob <= cum_wt) {
+ des_node = *int_itr;
+ break;
+ }
+ }
+ if (des_node < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ node_ptr = &node_array [des_node];
+
+ dx = node_ptr->X () - x;
+ dy = node_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ if (org_node == des_node) continue;
+
+ des_node = node_ptr->Node ();
+ org_node = node_array [org_node].Node ();
+ }
//---- set the time of day ----
@@ -460,14 +596,35 @@
trip_file->Vehicle (veh);
trip_file->Veh_Type (veh_type);
trip_file->Start (start.Round_Seconds ());
- trip_file->Origin (org_loc);
trip_file->End (arrive.Round_Seconds ());
- trip_file->Destination (des_loc);
+
+ if (od_output_type == ZONE_ID) {
+ trip_file->Origin (org);
+ trip_file->Org_Type (ZONE_ID);
+ trip_file->Destination (des);
+ trip_file->Des_Type (ZONE_ID);
+ } else if (od_output_type == NODE_ID) {
+ trip_file->Origin (org_node);
+ trip_file->Org_Type (NODE_ID);
+ trip_file->Destination (des_node);
+ trip_file->Des_Type (NODE_ID);
+ } else {
+ trip_file->Origin (org_loc);
+ trip_file->Org_Type (LOCATION_ID);
+ trip_file->Destination (des_loc);
+ trip_file->Des_Type (LOCATION_ID);
+ }
trip_file->Duration (duration);
trip_file->Constraint (constraint);
trip_file->Priority (priority);
trip_file->Type (type);
+ if (fraction_flag) {
+ trip_file->Trips (((trp + 1) == ntrips) ? last_trip : 1.0);
+ } else {
+ trip_file->Trips (1);
+ }
+
skip = ((select_start_times && !start_range.In_Range (start)) ||
(select_end_times && !end_range.In_Range (arrive)));
@@ -479,8 +636,9 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (hhold_id, 1, 1);
- new_trips++;
+ trip_file->Add_Trip (hhold_id, 1, 1, trip_file->Trips ());
+ trips_out += trip_file->Trips ();
+ new_trips += trip_file->Trips ();
}
//---- household data ----
@@ -518,7 +676,7 @@
//---- check for return trips ----
- if (!return_flag || num_out == trips) continue;
+ if (!return_flag || num_out == max_out) continue;
if (percent_flag) {
if (percent_prob < random_return.Probability ()) continue;
@@ -548,13 +706,28 @@
trip_file->Trip (2);
trip_file->Mode (mode);
trip_file->Start (start.Round_Seconds ());
- trip_file->Origin (des_loc);
trip_file->End (arrive.Round_Seconds ());
- trip_file->Destination (org_loc);
+
+ if (od_output_type == ZONE_ID) {
+ trip_file->Origin (des);
+ trip_file->Destination (org);
+ } else if (od_output_type == NODE_ID) {
+ trip_file->Origin (des_node);
+ trip_file->Destination (org_node);
+ } else {
+ trip_file->Origin (des_loc);
+ trip_file->Destination (org_loc);
+ }
trip_file->Duration (0);
trip_file->Constraint (0);
trip_file->Purpose (purpose);
trip_file->Priority (priority);
+
+ if (fraction_flag) {
+ trip_file->Trips (((trp + 1) == ntrips) ? last_trip : 1.0);
+ } else {
+ trip_file->Trips (1);
+ }
group->Return_Period (start);
@@ -569,10 +742,11 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (hhold_id, 1, 1);
- new_trips++;
+ trip_file->Add_Trip (hhold_id, 1, 1, trip_file->Trips ());
+ trips_out += trip_file->Trips ();
+ new_trips += trip_file->Trips ();
}
num_out++;
}
- return (trips - num_out);
+ return (trips - trips_out);
}
Modified: version7/trunk/Transims70/ConvertTrips/Tour_Process.cpp
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Tour_Process.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/ConvertTrips/Tour_Process.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -304,7 +304,7 @@
Warning ("Writing ") << problem_file->File_Type ();
problem_flag = false;
}
- problem_file->Add_Trip (last_hhold, person, tour);
+ problem_file->Add_Trip (last_hhold, person, tour, 1);
}
}
@@ -330,9 +330,10 @@
trip_file->Destination (trip_itr->Destination ());
trip_file->Priority (trip_itr->Priority ());
trip_file->Vehicle (trip_itr->Vehicle ());
+ trip_file->Trips (1.0);
if (!trip_file->Write ()) goto trip_error;
- trip_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour ());
+ trip_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour (), trip_itr->Trips ());
new_trips++;
if (zone_sum_flag) {
Copied: version7/trunk/Transims70/ConvertTrips/Zone_Nodes.cpp (from rev 1714, version7/branches/aecom/Transims70/ConvertTrips/Zone_Nodes.cpp)
===================================================================
--- version7/trunk/Transims70/ConvertTrips/Zone_Nodes.cpp (rev 0)
+++ version7/trunk/Transims70/ConvertTrips/Zone_Nodes.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -0,0 +1,107 @@
+//*********************************************************
+// Zone_Nodes.cpp - assign nodes to zones
+//*********************************************************
+
+#include "ConvertTrips.hpp"
+
+//---------------------------------------------------------
+// Zone_Nodes
+//---------------------------------------------------------
+
+void ConvertTrips::Zone_Nodes (void)
+{
+ int zone, node, best, type, skip;
+ double x0, y0, dx, dy, diff;
+
+ Link_Itr link_itr;
+ Node_Data *node_ptr;
+ Node_Itr node_itr;
+ Zone_Itr zone_itr;
+ Zone_Data *zone_ptr;
+ Integers nodes;
+ Ints_Itr itr;
+
+ for (node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++) {
+ node_itr->Control (0);
+ }
+
+ //---- set node weights ----
+
+ for (link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++) {
+ type = link_itr->Type ();
+ if (type > RAMP) continue;
+ if (type > LOCAL) type = 1;
+
+ node_ptr = &node_array [link_itr->Anode ()];
+ if (node_ptr->Control () < type) {
+ node_ptr->Control (type);
+ }
+ node_ptr = &node_array [link_itr->Bnode ()];
+ if (node_ptr->Control () < type) {
+ node_ptr->Control (type);
+ }
+ }
+ zone_node.assign (zone_array.size (), nodes);
+
+ //---- map nodes to zones ----
+
+ for (node = 0, node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++, node++) {
+ if (node_itr->Control () == 0) continue;
+
+ x0 = node_itr->X ();
+ y0 = node_itr->Y ();
+
+ best = 0;
+ diff = MAX_INTEGER;
+
+ for (zone = 0, zone_itr = zone_array.begin (); zone_itr != zone_array.end (); zone_itr++, zone++) {
+ dx = x0 - zone_itr->X ();
+ dy = y0 - zone_itr->Y ();
+
+ dx = dx * dx + dy * dy;
+
+ if (dx < diff) {
+ best = zone;
+ diff = dx;
+ }
+ }
+ zone_node [best].push_back (node);
+ }
+
+ //---- check for missing nodes ----
+
+ for (zone = 0, itr = zone_node.begin (); itr != zone_node.end (); itr++, zone++) {
+retry:
+ if (itr->size () > 1) continue;
+
+ if (itr->size () > 0) {
+ skip = itr->at (0);
+ } else {
+ skip = -1;
+ }
+
+ zone_ptr = &zone_array [zone];
+
+ x0 = zone_itr->X ();
+ y0 = zone_itr->Y ();
+
+ best = 0;
+ diff = -1;
+
+ for (node = 0, node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++, node++) {
+ if (node == skip || node_itr->Control () == 0) continue;
+
+ dx = x0 - node_itr->X ();
+ dy = y0 - node_itr->Y ();
+
+ dx = dx * dx + dy * dy;
+
+ if (dx < diff || diff < 0) {
+ best = node;
+ diff = dx;
+ }
+ }
+ itr->push_back (best);
+ goto retry;
+ }
+}
Modified: version7/trunk/Transims70/Data_Service/Performance_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -878,7 +878,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 group_flag, bool forward_flag)
+Dtime Perf_Period_Array::Flow_Time (int dir_index, Dtime tod, double len_factor, double len, double trips, 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;
@@ -886,6 +886,10 @@
bool first;
num_periods = periods->Num_Periods ();
+
+ if (trips == 0.0) trips = 1.0;
+ pce *= trips;
+ occ *= trips;
len *= pce;
ttime = 0;
first = true;
@@ -939,11 +943,11 @@
if (end_time <= high) {
ttime += ttim;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
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_Max_Volume (pce * trips);
perf_ptr->Add_Veh_Time (tt * pce);
perf_ptr->Add_Veh_Dist (len * len_factor);
perf_ptr->Add_Veh_Delay (delay * pce);
@@ -961,7 +965,7 @@
factor = 0.001;
}
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
@@ -980,7 +984,7 @@
if (end_time >= low) {
ttime += ttim;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
@@ -998,7 +1002,7 @@
factor = 0.001;
}
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
@@ -1029,7 +1033,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 group_flag, bool forward_flag)
+Dtime Perf_Period_Array::Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, double trips, 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;
@@ -1037,6 +1041,10 @@
bool first;
num_periods = periods->Num_Periods ();
+
+ if (trips == 0.0) trips = 1.0;
+ occ *= trips;
+ pce *= trips;
len *= pce;
perf_time = 0;
first = true;
@@ -1081,7 +1089,7 @@
perf_time = perf_ptr->Time () * len_factor;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
perf_ptr->Add_Enter (pce);
@@ -1117,7 +1125,7 @@
factor = len_factor * (double) (high - tod) / ttime;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
@@ -1139,7 +1147,7 @@
perf_time = perf_ptr->Time () * len_factor;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
perf_ptr->Add_Enter (pce);
@@ -1175,7 +1183,7 @@
factor = len_factor * (double) (tod - low) / ttime;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
Modified: version7/trunk/Transims70/Data_Service/Read_Plans.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Plans.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Data_Service/Read_Plans.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -72,7 +72,7 @@
plan_time_map.insert (Time_Map_Data (time_index, index));
}
- file.Add_Trip (plan_ptr->Household (), plan_ptr->Person (), plan_ptr->Tour ());
+ file.Add_Trip (plan_ptr->Household (), plan_ptr->Person (), plan_ptr->Tour (), plan_ptr->Trips ());
}
} else {
while (file.Read (false)) {
@@ -128,7 +128,7 @@
}
if (keep_flag) {
num = (int) plan_rec.size ();
- file.Add_Trip (plan_rec.Household (), plan_rec.Person (), plan_rec.Tour ());
+ file.Add_Trip (plan_rec.Household (), plan_rec.Person (), plan_rec.Tour (), plan_rec.Trips ());
file.Add_Leg (num);
plan_array.push_back (plan_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Problems.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Problems.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Data_Service/Read_Problems.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -25,7 +25,7 @@
problem_rec.Clear ();
if (Get_Problem_Data (file, problem_rec)) {
- file.Add_Trip (problem_rec.Household (), problem_rec.Person (), problem_rec.Tour ());
+ file.Add_Trip (problem_rec.Household (), problem_rec.Person (), problem_rec.Tour (), problem_rec.Trips ());
problem_array.push_back (problem_rec);
}
}
Modified: version7/trunk/Transims70/Data_Service/Read_Trips.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Trips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Data_Service/Read_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -45,7 +45,7 @@
trip_index = trip_itr->Get_Trip_Index ();
trip_map.insert (Trip_Map_Data (trip_index, index));
- file.Add_Trip (trip_index.Household (), trip_index.Person (), trip_index.Tour ());
+ file.Add_Trip (trip_index.Household (), trip_index.Person (), trip_index.Tour (), trip_itr->Trips ());
}
} else {
while (file.Read ()) {
@@ -69,8 +69,7 @@
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
trip_array.push_back (trip_rec);
- file.Add_Trip (trip_index.Household (), trip_index.Person (), trip_index.Tour ());
-
+ file.Add_Trip (trip_index.Household (), trip_index.Person (), trip_index.Tour (), trip_rec.Trips ());
}
}
}
Modified: version7/trunk/Transims70/Data_Service/Write_Trips.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Trips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/Data_Service/Write_Trips.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -49,6 +49,6 @@
if (!file.Write ()) {
Error (String ("Writing %s") % file.File_Type ());
}
- file.Add_Trip (data.Household (), data.Person (), data.Tour ());
+ file.Add_Trip (data.Household (), data.Person (), data.Tour (), data.Trips ());
return (1);
}
Modified: version7/trunk/Transims70/File_Service/Fare_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Fare_File.cpp 2018-12-20 02:38:46 UTC (rev 1714)
+++ version7/trunk/Transims70/File_Service/Fare_File.cpp 2018-12-20 02:43:27 UTC (rev 1715)
@@ -136,7 +136,7 @@
FILE *fh = f_open...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-12-20 02:38:49
|
Revision: 1714
http://sourceforge.net/p/transims/code/1714
Author: davidroden
Date: 2018-12-20 02:38:46 +0000 (Thu, 20 Dec 2018)
Log Message:
-----------
TRANSIMS Version 7.3 - December 2018
SysLib
The overall numbering sequence was updated from 7.2 to 7.3 and all program versions were reset to 0. MAX_REC_SIZE was added to set the maximum record lengths for the Db_File interface. MAXIMUM_TRIP_FACTOR key and Max_Trip_Factor method were added to the Execution_Service to control the selection weight within the Router for trip or plan records with floating point trips. The String case conversion logic was modified to recognize {U+201C}AV{U+201D} as an all-caps abbreviation.
File_Service
A Trips field was added to the Trip/Plan file structure to enable a floating-point weighting value for a given trip record to increase or decrease the number of trips associated with the record. The Add_Trips and other methods within the Trip file class to total the floating-point trips. The Print_Summary method includes logic to show the floating-point trip totals. A new Volume_Count_File structure was added for generic use.
Data_Service
The Trip data class was expanded to include floating-point trip data. The Performance data class added floating-point trips to the Flow_Time and Load_Flow methods.
Converge_Service
Selection_Score range and value controls through the Max_Trip_Factor value and floating-point trip weights were added to the re-routing logic.
Router_Service
NODE_BASED_TRIP_OD and ZONE_BASED_TRIP_OD keys were added allocate the memory structures needed for the Router to build paths based on Node and/or Zone origin-destination locations in addition to the Activity Location origins and destinations. The path building logic was updated to include floating-point trip weights and selection criteria and Node and Zone based origin-destination Trips/Plans.
Router 7.3.1
Integrated The floating-point trip weights and Node/Zone origin-destination processing. NODE_BASED_TRIP_OD, ZONE_BASED_TRIP_OD
ConvertTrips 7.3.1
OD_OUTPUT_TYPE, FRACTIONAL_TRIP_FLAG, and MINIMUM_TRIP_VALUE control keys were added to enable the user to specify the origin-destination type, if fractional trips are output and the minimum trip value for which a new trip record is created.
MatrixData 7.3.1
A FACTOR option was added to the NEW_MATRIX_METHOD key to multiply two matrix files.
PlanSelect 7.3.1
MODE_ADD_LIMITS key was added to flag modes that can be duplicated to better match a traffic count.
TripPrep 7.3.2
FRACTIONAL_TRIPS_FLAG control key was added to apply growth factors to create fractional trips versus duplicated or deleted trips.
TripSum 7.3.1
Changes were made to enable summary reports and output files total fractional trips.
Validate 7.3.1
OUTPUT_PERIOD_RECORDS control key was added to output the volume-count file with individual period records rather than period columns. The new Volume-Count File class was used standardize the input and output file structures.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Converge_Service/Control.cpp
version7/branches/aecom/Transims70/Converge_Service/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
version7/branches/aecom/Transims70/Converge_Service/Write_Plan_Files.cpp
version7/branches/aecom/Transims70/ConvertTrips/Adjust_Trips.cpp
version7/branches/aecom/Transims70/ConvertTrips/Control.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.hpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters
version7/branches/aecom/Transims70/ConvertTrips/Execute.cpp
version7/branches/aecom/Transims70/ConvertTrips/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
version7/branches/aecom/Transims70/ConvertTrips/Set_Trip.cpp
version7/branches/aecom/Transims70/ConvertTrips/Tour_Process.cpp
version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Problems.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Trips.cpp
version7/branches/aecom/Transims70/File_Service/Fare_File.cpp
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
version7/branches/aecom/Transims70/File_Service/Plan_Skim_File.cpp
version7/branches/aecom/Transims70/File_Service/Plan_Sum_File.cpp
version7/branches/aecom/Transims70/File_Service/Trip_File.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
version7/branches/aecom/Transims70/Include/Execution_Service.hpp
version7/branches/aecom/Transims70/Include/Performance_Data.hpp
version7/branches/aecom/Transims70/Include/Router_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/Trip_Data.hpp
version7/branches/aecom/Transims70/Include/Trip_File.hpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/MatrixData/Control.cpp
version7/branches/aecom/Transims70/MatrixData/Execute.cpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.cpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.hpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.vcxproj
version7/branches/aecom/Transims70/MatrixData/MatrixData.vcxproj.filters
version7/branches/aecom/Transims70/MatrixData/Read_Matrix.cpp
version7/branches/aecom/Transims70/NetDiff/NetDiff.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.cpp
version7/branches/aecom/Transims70/PathSkim/Save_Plans.cpp
version7/branches/aecom/Transims70/PerfPrep/Load_Transit_Data.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanCompare/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSelect/Read_Vol_Cnt.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/PlanSum/Process_Plan.cpp
version7/branches/aecom/Transims70/PlanTrips/Put_Trip_Data.cpp
version7/branches/aecom/Transims70/Relocate/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Control.cpp
version7/branches/aecom/Transims70/Router_Service/Drive_Path.cpp
version7/branches/aecom/Transims70/Router_Service/Execute.cpp
version7/branches/aecom/Transims70/Router_Service/Parking_Access.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Build.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Flow.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Update.cpp
version7/branches/aecom/Transims70/Router_Service/Router_Service.cpp
version7/branches/aecom/Transims70/Router_Service/Sum_Demand.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Record.cpp
version7/branches/aecom/Transims70/SysLib/Service/Execution_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/String.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
version7/branches/aecom/Transims70/TripPrep/Control.cpp
version7/branches/aecom/Transims70/TripPrep/Execute.cpp
version7/branches/aecom/Transims70/TripPrep/Read_Trips.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.hpp
version7/branches/aecom/Transims70/TripSum/Diurnal_Report.cpp
version7/branches/aecom/Transims70/TripSum/Read_Trips.cpp
version7/branches/aecom/Transims70/TripSum/Time_Report.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.hpp
version7/branches/aecom/Transims70/TripSum/Write_Loc_Shares.cpp
version7/branches/aecom/Transims70/TripSum/Write_Time.cpp
version7/branches/aecom/Transims70/TripSum/Write_Trip_Length.cpp
version7/branches/aecom/Transims70/TripSum/Write_Trip_Time.cpp
version7/branches/aecom/Transims70/Validate/Control.cpp
version7/branches/aecom/Transims70/Validate/Execute.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Validate.hpp
version7/branches/aecom/Transims70/Validate/Validate.vcxproj
version7/branches/aecom/Transims70/Validate/Validate.vcxproj.filters
Added Paths:
-----------
version7/branches/aecom/Transims70/ConvertTrips/Zone_Nodes.cpp
version7/branches/aecom/Transims70/File_Service/Vol_Count_File.cpp
version7/branches/aecom/Transims70/Include/Vol_Count_File.hpp
version7/branches/aecom/Transims70/MatrixData/Factor_Matrix.cpp
version7/branches/aecom/Transims70/Validate/Read_Volume_Count.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Cnt_File.cpp
Modified: version7/branches/aecom/Transims70/Converge_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -21,8 +21,8 @@
Converge_Step_Data step_data;
- Integer_List max_iter_list, min_cost_list, max_cost_list, min_score_list;
- Double_List init_fac_list, fac_inc_list, max_fac_list, per_time_list, per_cost_list;
+ Integer_List max_iter_list, min_cost_list, max_cost_list;
+ Double_List init_fac_list, fac_inc_list, max_fac_list, per_time_list, per_cost_list, min_score_list;
Double_List min_time_ratio_list, max_time_ratio_list, min_penalty_list, max_penalty_list;
Double_List link_gap_list, trip_gap_list, toll_gap_list, transit_gap_list, parking_gap_list, ratio_gap_list, max_per_list;
Dtime_List min_time_list, max_time_list;
@@ -381,7 +381,7 @@
//---- mininum selection score ----
- step_itr->min_select_score = min_score_list.Best (i);
+ step_itr->min_select_score = DTOI (min_score_list.Best (i) * BASE_SCORE / 100);
//---- maximum percent selected ----
Modified: version7/branches/aecom/Transims70/Converge_Service/Get_Trip_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Get_Trip_Data.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/Converge_Service/Get_Trip_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -12,7 +12,7 @@
{
if (Data_Service::Get_Trip_Data (file, trip_rec)) {
- file.Add_Trip (trip_rec.Household (), trip_rec.Person (), trip_rec.Tour ());
+ file.Add_Trip (trip_rec.Household (), trip_rec.Person (), trip_rec.Tour (), trip_rec.Trips ());
return (Set_Trip_Data (trip_rec));
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -11,16 +11,17 @@
int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type)
{
Dtime time1, time2, time_diff, tod, duration;
- int cost1, cost2, cost_diff, score, ratio;
+ int cost1, cost2, cost_diff, score, max_score, ratio;
double prob;
- score = 100;
+ max_score = score = DTOI (MIN (new_plan.Trips (), Max_Trip_Factor ()) * BASE_SCORE);
+
type = NO_SELECT_TYPE;
if (!new_plan.Path_Problem ()) {
if (new_plan.Problem () == PARK_CAP_PROBLEM || new_plan.Problem () == BOARDING_PROBLEM) {
- score = step_itr->min_select_score;
+ score = MIN (step_itr->min_select_score * max_score / BASE_SCORE, max_score);
if (new_plan.Problem () == PARK_CAP_PROBLEM) {
type = PARKING_PROBLEM_TYPE;
} else {
@@ -32,14 +33,14 @@
//---- time ratio selection ----
- if (score < 100 && step_itr->time_ratio_flag) {
+ if (score < max_score && step_itr->time_ratio_flag) {
ratio = new_plan.Time_Ratio ();
if (ratio > step_itr->max_time_ratio) {
- score = 100;
+ score = max_score;
type = TIME_RATIO_TYPE;
} else if (ratio >= step_itr->min_time_ratio) {
- ratio = (ratio - step_itr->min_time_ratio) * 100 / step_itr->max_min_time_ratio;
+ ratio = MIN ((ratio - step_itr->min_time_ratio) * max_score / step_itr->max_min_time_ratio, max_score);
if (ratio > score) {
type = TIME_RATIO_TYPE;
score = ratio;
@@ -49,14 +50,14 @@
//---- penalty ratio selection ----
- if (score < 100 && step_itr->penalty_ratio_flag) {
+ if (score < max_score && step_itr->penalty_ratio_flag) {
ratio = new_plan.Penalty_Ratio ();
if (ratio > step_itr->max_penalty_ratio) {
- score = 100;
+ score = max_score;
type = PENALTY_RATIO_TYPE;
} else if (ratio >= step_itr->min_penalty_ratio) {
- ratio = (ratio - step_itr->min_penalty_ratio) * 100 / step_itr->max_min_penalty_ratio;
+ ratio = MIN ((ratio - step_itr->min_penalty_ratio) * max_score / step_itr->max_min_penalty_ratio, max_score);
if (ratio > score) {
type = PENALTY_RATIO_TYPE;
score = ratio;
@@ -66,7 +67,7 @@
//---- select the plan to keep ----
- if (score < 100 && old_plan.size () > 0 && !old_plan.Path_Problem () && old_plan.Impedance () > 0) {
+ if (score < max_score && old_plan.size () > 0 && !old_plan.Path_Problem () && old_plan.Impedance () > 0) {
//---- compare plan times ----
@@ -77,7 +78,7 @@
time_diff = time1 - time2;
if (time_diff > step_itr->max_time_diff) {
- score = 100;
+ score = max_score;
type = TRAVEL_TIME_TYPE;
} else if (time_diff >= step_itr->min_time_diff && time2 > 0) {
prob = (double) time_diff / time2;
@@ -84,13 +85,13 @@
if (prob >= step_itr->percent_time_diff) {
if (step_itr->max_min_time_diff > 1) {
time_diff = time_diff - step_itr->min_time_diff;
- ratio = 100 * time_diff / step_itr->max_min_time_diff;
+ ratio = MIN (max_score * time_diff / step_itr->max_min_time_diff, max_score);
if (ratio > score) {
type = TRAVEL_TIME_TYPE;
score = ratio;
}
} else {
- score = 100;
+ score = max_score;
type = TRAVEL_TIME_TYPE;
}
}
@@ -99,7 +100,7 @@
//---- compare plan costs ----
- if (score < 100 && step_itr->cost_diff_flag) {
+ if (score < max_score && step_itr->cost_diff_flag) {
cost1 = new_plan.Impedance ();
cost2 = old_plan.Impedance ();
@@ -106,7 +107,7 @@
cost_diff = cost1 - cost2;
if (cost_diff > step_itr->max_cost_diff) {
- score = 100;
+ score = max_score;
type = IMPEDANCE_TYPE;
} else if (cost_diff >= step_itr->min_cost_diff && cost2 > 0) {
prob = (double) cost_diff / cost2;
@@ -113,13 +114,13 @@
if (prob >= step_itr->percent_cost_diff) {
if (step_itr->max_min_cost_diff > 1) {
cost_diff = cost_diff - step_itr->min_cost_diff;
- ratio = 100 * cost_diff / step_itr->max_min_cost_diff;
+ ratio = MIN (max_score * cost_diff / step_itr->max_min_cost_diff, max_score);
if (ratio > score) {
type = IMPEDANCE_TYPE;
ratio = score;
}
} else {
- score = 100;
+ score = max_score;
type = IMPEDANCE_TYPE;
}
}
@@ -130,9 +131,9 @@
if (score == 0) {
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
- score = MIN (MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), 0), 100);
+ score = MIN (MAX ((int) (max_score * fabs (prob - 0.5) * 2.0 + 0.5), 0), max_score);
- if (score >= step_itr->min_select_score) {
+ if (score >= MIN (step_itr->min_select_score * max_score / BASE_SCORE, max_score)) {
type = SELECT_DIFFERENCE_TYPE;
} else {
//score = 0;
Modified: version7/branches/aecom/Transims70/Converge_Service/Write_Plan_Files.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Write_Plan_Files.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/Converge_Service/Write_Plan_Files.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -141,7 +141,7 @@
Warning ("Writing ") << new_problem_file->File_Type ();
new_problem_flag = false;
}
- new_problem_file->Add_Trip (plan.Household (), plan.Person (), plan.Tour ());
+ new_problem_file->Add_Trip (plan.Household (), plan.Person (), plan.Tour (), plan.Trips ());
}
}
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/Adjust_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Adjust_Trips.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Adjust_Trips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -255,7 +255,7 @@
Warning ("Writing ") << problem_file->File_Type ();
problem_flag = false;
}
- problem_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour ());
+ problem_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour (), trip_itr->Trips ());
}
continue;
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Control.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Control.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -69,6 +69,26 @@
hhold_id = Get_Control_Integer (FIRST_HOUSEHOLD_NUMBER);
+ //---- od output type ----
+
+ od_output_type = ID_Code (Get_Control_Text (OD_OUTPUT_TYPE));
+ if (od_output_type == NO_ID) od_output_type = LOCATION_ID;
+ if (od_output_type != LOCATION_ID && od_output_type != ZONE_ID && od_output_type != NODE_ID) {
+ Error ("OD Output Type is Out-of-Range (LOCATION, ZONE, NODE)");
+ }
+ zone_node_flag = (od_output_type == NODE_ID);
+
+ //---- fractional trip flag ----
+
+ fraction_flag = Get_Control_Flag (FRACTIONAL_TRIP_FLAG);
+
+ if (fraction_flag) {
+
+ //---- minimum trip value ----
+
+ min_trips = Get_Control_Double (MINIMUM_TRIP_VALUE);
+ }
+
//---- get the additional travel time ----
additional_time = Get_Control_Time (ADDITIONAL_TRAVEL_TIME);
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -11,7 +11,7 @@
ConvertTrips::ConvertTrips (void) : Select_Service ()
{
Program ("ConvertTrips");
- Version (1);
+ Version (0);
Title ("Trip Table Conversion Utility");
System_File_Type required_files [] = {
@@ -36,6 +36,9 @@
};
Control_Key converttrips_keys [] = { //--- code, key, level, status, type, default, range, help ----
{ FIRST_HOUSEHOLD_NUMBER, "FIRST_HOUSEHOLD_NUMBER", LEVEL0, OPT_KEY, INT_KEY, "1", "1..1000000000", NO_HELP },
+ { OD_OUTPUT_TYPE, "OD_OUTPUT_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "LOCATION", "LOCATION, ZONE, NODE", NO_HELP },
+ { FRACTIONAL_TRIP_FLAG, "FRACTIONAL_TRIP_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
+ { MINIMUM_TRIP_VALUE, "MINIMUM_TRIP_VALUE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.01", "0.001..1.0", NO_HELP },
{ ADDITIONAL_TRAVEL_TIME, "ADDITIONAL_TRAVEL_TIME", LEVEL0, OPT_KEY, TIME_KEY, "0 minutes", "0..30 minutes", NO_HELP },
{ TOUR_DATA_FILE, "TOUR_DATA_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ TOUR_DATA_FORMAT, "TOUR_DATA_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
@@ -111,14 +114,17 @@
Time_Table_Flag (true);
equiv_flag = skim_flag = zone_loc_flag = tour_flag = script_flag = diurnal_flag = false;
- new_hhold_flag = new_veh_flag = problem_flag = zone_sum_flag = false;
+ new_hhold_flag = new_veh_flag = problem_flag = zone_sum_flag = fraction_flag = zone_node_flag = false;
+ od_output_type = LOCATION_ID;
num_zone = additional_time = 0;
tot_tours = tot_trips = tot_errors = 0;
- new_trips = new_hholds = new_persons = new_vehicles = 0;
+ new_trips = 0;
+ new_hholds = new_persons = new_vehicles = 0;
tot_add = tot_del = 0.0;
group_number = 0;
skim_ptr = 0;
+ min_trips = 0;
trip_copy = hhold_copy = veh_copy = 0;
max_hh_in = max_veh_in = 0;
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.hpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.hpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.hpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -33,7 +33,8 @@
protected:
enum ConvertTrips_Keys {
- FIRST_HOUSEHOLD_NUMBER = 1, ADDITIONAL_TRAVEL_TIME, TOUR_DATA_FILE, TOUR_DATA_FORMAT,
+ FIRST_HOUSEHOLD_NUMBER = 1, OD_OUTPUT_TYPE, FRACTIONAL_TRIP_FLAG, MINIMUM_TRIP_VALUE,
+ ADDITIONAL_TRAVEL_TIME, TOUR_DATA_FILE, TOUR_DATA_FORMAT,
TOUR_HOUSEHOLD_FIELD, TOUR_PERSON_FIELD, TOUR_NUMBER_FIELD, TOUR_PURPOSE_FIELD,
TOUR_MODE_FIELD, TOUR_ORIGIN_FIELD, TOUR_DESTINATION_FIELD, TOUR_STOP_OUT_FIELD,
TOUR_STOP_IN_FIELD, TOUR_START_FIELD, TOUR_RETURN_FIELD, TOUR_GROUP_FIELD, TOUR_GROUP_SCRIPT,
@@ -60,13 +61,12 @@
TIME_EQUIV, ZONE_EQUIV, TRAVELER_SCRIPT, TRAVELER_STACK, ZONE_TRIP_ENDS };
bool time_flag, equiv_flag, skim_flag, zone_loc_flag, tour_flag, script_flag, diurnal_flag;
- bool new_hhold_flag, new_veh_flag, problem_flag, zone_sum_flag;
- int num_zone, tot_tours, tot_trips, tot_errors, group_number;
- int hhold_id, new_trips, new_hholds, new_persons, new_vehicles;
- int trip_copy, hhold_copy, veh_copy, max_hh_in, max_veh_in;
+ bool new_hhold_flag, new_veh_flag, problem_flag, zone_sum_flag, fraction_flag, zone_node_flag;
+ int num_zone, group_number, hhold_id, new_hholds, new_persons, new_vehicles;
+ int trip_copy, hhold_copy, veh_copy, max_hh_in, max_veh_in, od_output_type;
int group_fld, org_fld, des_fld, start_fld, mode_fld, purpose_fld, duration_fld, constraint_fld, priority_fld, veh_type_fld, passengers_fld, type_fld;
Dtime additional_time, midnight, minute, two_minutes, five_minutes, ten_minutes, one_hour;
- double tot_add, tot_del;
+ double tot_add, tot_del, tot_tours, tot_trips, tot_errors, new_trips, min_trips;
Trip_File *trip_file;
Household_File *household_file;
@@ -75,6 +75,7 @@
Random random_org, random_des, random_tod, random_stop, random_duration, random_return;
Time_Periods tour_periods;
Integers zone_loc, org_out, des_out, *org_ptr, *des_ptr;
+ Ints_Array zone_node;
Doubles org_in, des_in;
Int_Map field_map;
@@ -100,10 +101,11 @@
void Compile_Scripts (void);
void Zone_Location (void);
+ void Zone_Nodes (void);
void Parking_Check (void);
void Tour_Processing (void);
void Read_Trip_Table (ConvertTrip_Itr group);
- int Set_Trips (ConvertTrip_Itr group, int org, int des, int trips, int num, int t1, int t2, bool return_flag);
+ double Set_Trips (ConvertTrip_Itr group, int org, int des, double trips, int num, int t1, int t2, bool return_flag);
bool Set_Time (ConvertTrip_Data *group, Dtime &start, Dtime &end, Dtime ttim, int num);
bool Locate_OD (ConvertTrip_Data *group, int &org, int &des, int &stop, int &park, double &dist1, double &dist2);
void Adjust_Trips (void);
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj 2018-12-20 02:38:46 UTC (rev 1714)
@@ -186,6 +186,7 @@
<ClCompile Include="Tour_Map.cpp" />
<ClCompile Include="Tour_Process.cpp" />
<ClCompile Include="Zone_Location.cpp" />
+ <ClCompile Include="Zone_Nodes.cpp" />
<ClCompile Include="Zone_Sum_Report.cpp" />
</ItemGroup>
<ItemGroup>
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.vcxproj.filters 2018-12-20 02:38:46 UTC (rev 1714)
@@ -97,5 +97,8 @@
<ClCompile Include="Zone_Sum_Report.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Zone_Nodes.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/ConvertTrips/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Execute.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Execute.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -24,6 +24,12 @@
Zone_Location ();
+ //---- map node to zones ----
+
+ if (zone_node_flag) {
+ Zone_Nodes ();
+ }
+
//---- zone summary data ----
if (zone_sum_flag) {
@@ -126,7 +132,7 @@
//---- end the program ----
- Report_Problems (tot_trips);
+ Report_Problems ((int) tot_trips);
Exit_Stat (DONE);
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/Get_Trip_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Get_Trip_Data.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Get_Trip_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -35,7 +35,7 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (file.Household (), file.Person (), file.Tour ());
+ trip_file->Add_Trip (file.Household (), file.Person (), file.Tour (), file.Trips ());
trip_copy++;
//---- don't save the record ----
Modified: version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -11,10 +11,10 @@
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, per, num_periods;
- int total, stat, errors, org_zone, des_zone, org, des, o, d, trips, num, num_shares, even_bucket, even;
+ int p, p1, p2, num_p, period, current, first_p, last_p, per, num_periods;
+ int org_zone, des_zone, org, des, o, d, trp, 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;
+ double trip, added, deleted, bucket, trips, total, errors, stat, trip_fac;
Db_Matrix *file;
Factor_Period *period_fac;
@@ -23,7 +23,7 @@
Int_Map_Itr org_itr, des_itr;
Int_Map_RItr des_ritr;
- static string error_msg = "%d Trip%sbetween Zones %d and %d could not be allocated";
+ static string error_msg = "%.3lf Trip%sbetween Zones %d and %d could not be allocated";
//---- read the trip table ----
@@ -38,7 +38,7 @@
return_flag = group->Return_Flag ();
even_bucket = 1;
- bucket = 0.45;
+ bucket = (fraction_flag) ? 0 : 0.45;
factor_flag = group->Factor_Flag ();
time_fac_flag = group->Factor_Periods_Flag ();
@@ -154,13 +154,24 @@
org_in [org] += trip;
des_in [des] += trip;
}
- trip += bucket;
- trips = (int) trip;
- if (trips < 0) trips = 0;
- bucket = trip - trips;
+ if (fraction_flag) {
+ trip += bucket;
- if (trips == 0) continue;
- total += trips;
+ if (trip < min_trips) {
+ bucket = trip;
+ continue;
+ } else {
+ bucket = 0;
+ }
+ } else {
+ trip += bucket;
+ trp = (int) trip;
+ if (trp < 0) trp = 0;
+ bucket = trip - trp;
+ if (trp == 0) continue;
+ trip = trp;
+ }
+ total += trip;
//---- apply the selection script ----
@@ -199,7 +210,7 @@
if (time_fac_flag) {
period = -1;
p1 = p2 = 0;
- trip = 0.0;
+ trip_fac = 0.0;
for (p = first_p; p <= last_p; p++) {
tod = group->Diurnal_Period_Time (p);
@@ -210,50 +221,58 @@
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;
+ trips = trip_fac * period_fac->Factor ();
+
+ if (!fraction_flag) {
+ if (trips > trip) {
+ added += trips - trip_fac;
+ } else {
+ deleted += trip_fac - trips;
+ }
+ trips= period_fac->Bucket_Factor (trip_fac);
}
- trp = period_fac->Bucket_Factor (trip);
- if (trp > 0 && return_flag) {
+ if (trips > 0 && return_flag && !fraction_flag) {
+ trp = (int) trips;
even = (((trp + even_bucket) / 2) * 2);
even_bucket += trp - even;
- trp = even;
+ trips = even;
}
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
- if (stat > 0) {
+ if (trips > 0) {
+ stat = Set_Trips (group, org, des, trips, num, p1, p2, return_flag);
+
+ if (stat > 0.005) {
errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ Print (1, String (error_msg) % stat % ((stat != 1) ? "s " : " ") % org_zone % des_zone);
}
}
}
period = current;
p1 = p;
- trip = 0.0;
+ trip_fac = 0.0;
}
- trip += trips * group->Share (p, num);
+ trip_fac += trip * group->Share (p, num);
p2 = p;
}
+ trip = trip_fac;
} 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;
+ trips = trip * period_fac->Factor ();
+
+ if (!fraction_flag) {
+ if (trips > trip) {
+ added += trips - trip;
+ } else {
+ deleted += trip - trips;
+ }
+ trips = period_fac->Bucket_Factor (trip);
}
- trp = period_fac->Bucket_Factor (trip);
} else if (period >= 0) {
p1 = p2 = -1;
file->Period_Range (period, start, end);
@@ -269,24 +288,25 @@
}
if (p1 >= 0 && p2 >= 0) break;
}
- trp = trips;
+ trips = trip;
} else {
p1 = first_p;
p2 = last_p;
- trp = trips;
+ trips = trip;
}
- if (trp > 0 && return_flag) {
+ if (trips > 0 && return_flag && !fraction_flag) {
+ trp = (int) trips;
even = (((trp + even_bucket) / 2) * 2);
even_bucket += trp - even;
- trp = even;
+ trips = even;
}
//---- process the trips ----
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+ if (trips > 0) {
+ stat = Set_Trips (group, org, des, trips, num, p1, p2, return_flag);
- if (stat > 0) {
+ if (stat > 0.005) {
errors += stat;
Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
}
@@ -298,18 +318,18 @@
file->Close ();
- Print (1, String ("%s has %d Records and %d Trips") % file->File_Type () % Progress_Count () % total);
+ Print (1, String ("%s has %d Records and %.2lf Trips") % file->File_Type () % Progress_Count () % total);
tot_trips += total;
if (errors > 0) {
- Warning (String ("A Total of %d Trip%scould not be allocated") % errors % ((errors > 1) ? "s " : " "));
+ Warning (String ("A Total of %.2lf Trip%scould not be allocated") % errors % ((errors != 1) ? "s " : " "));
Write (1);
tot_errors += errors;
}
if (factor_flag) {
- Print (1, String ("Trip Adjustments: %.0lf trips added, %.0lf trips deleted") % added % deleted);
+ Print (1, String ("Trip Adjustments: %.2lf trips added, %.2lf trips deleted") % added % deleted);
tot_add += added;
tot_del += deleted;
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/Set_Trip.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Set_Trip.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Set_Trip.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -10,21 +10,25 @@
// Set_Trips
//---------------------------------------------------------
-int ConvertTrips::Set_Trips (ConvertTrip_Itr group, int org, int des, int trips, int num, int t1, int t2, bool return_flag)
+double ConvertTrips::Set_Trips (ConvertTrip_Itr group, int org, int des, double trips, int num, int t1, int t2, bool return_flag)
{
- int loc, trp, num_out, org_loc, org_park, des_loc, skim, period, type, org_zone, des_zone;
+ int loc, trp, num_out, org_loc, org_park, des_loc, skim, period, type, org_zone, des_zone, org_node, des_node, max_out;
int last, veh, x, y, mode, ntrips, retry_count, passengers, purpose, constraint, priority, veh_type;
- double org_wt, des_wt, prob, dist, cum_wt, dx, dy, share, share1, total, percent, percent_prob;
- bool org_flag, des_flag, travel_script_flag, skip, split_flag;
+ double org_wt, des_wt, prob, dist, cum_wt, dx, dy, share, share1, total, percent, percent_prob, last_trip, trips_out;
+ bool org_flag, des_flag, travel_script_flag, skip;
Dtime start, arrive, time, time1, ttim, t, duration;
Convert_Location *loc_ptr;
Location_Data *location_ptr;
+ Zone_Data *zone_ptr;
+ Node_Data *node_ptr;
Share_Data *share_ptr;
Int_Itr int_itr;
num_out = skim = 0;
loc_ptr = 0;
+ last_trip = 0;
+ trips_out = 0;
//---- set the vehicle access flags ----
@@ -36,65 +40,135 @@
des_flag = (mode != DRIVE_MODE && mode != PNR_IN_MODE && mode != KNR_IN_MODE &&
mode != HOV2_MODE && mode != HOV3_MODE && mode != HOV4_MODE && mode != TAXI_MODE);
- //---- calculate the origin weight ----
+ org_zone = des_zone = org_loc = des_loc = org_node = des_node = 0;
+ dist = 0;
- org_wt = 0.0;
+ if (od_output_type == ZONE_ID) {
+ org_wt = des_wt = 1.0;
- for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ org_zone = org;
+ des_zone = des;
- if (org_flag || loc_ptr->Org_Parking () >= 0) {
- org_wt += loc_ptr->Weight (group->Org_Wt ());
+ zone_ptr = &zone_array [org];
+
+ org = zone_ptr->Zone ();
+ x = zone_ptr->X ();
+ y = zone_ptr->Y ();
+
+ zone_ptr = &zone_array [des];
+
+ des = zone_ptr->Zone ();
+
+ dx = zone_ptr->X () - x;
+ dy = zone_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ } else if (od_output_type == NODE_ID) {
+
+ //---- calculate the origin weight ----
+
+ org_wt = 0.0;
+
+ for (int_itr = zone_node [org].begin (); int_itr != zone_node [org].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ org_wt += node_ptr->Control ();
}
- }
- if (org_ptr != 0) {
- for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
+ //---- calculate the destination weight ----
+
+ des_wt = 0.0;
+
+ for (int_itr = zone_node [des].begin (); int_itr != zone_node [des].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ des_wt += node_ptr->Control ();
+ }
+
+ } else {
+
+ //---- calculate the origin weight ----
+
+ org_wt = 0.0;
+
+ for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+
if (org_flag || loc_ptr->Org_Parking () >= 0) {
org_wt += loc_ptr->Weight (group->Org_Wt ());
}
}
- }
- if (org_wt == 0.0) return (trips);
+ if (org_ptr != 0) {
+ for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
- //---- check the destination weight ----
-
- des_wt = 0.0;
+ if (org_flag || loc_ptr->Org_Parking () >= 0) {
+ org_wt += loc_ptr->Weight (group->Org_Wt ());
+ }
+ }
+ }
+ if (org_wt == 0.0) return (trips);
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ //---- check the destination weight ----
- if (des_flag || loc_ptr->Des_Parking () >= 0) {
- des_wt += loc_ptr->Weight (group->Des_Wt ());
- }
- }
- if (des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
+ des_wt = 0.0;
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+
if (des_flag || loc_ptr->Des_Parking () >= 0) {
des_wt += loc_ptr->Weight (group->Des_Wt ());
}
}
+ if (des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+
+ if (des_flag || loc_ptr->Des_Parking () >= 0) {
+ des_wt += loc_ptr->Weight (group->Des_Wt ());
+ }
+ }
+ }
+ if (des_wt == 0.0) return (trips);
}
- if (des_wt == 0.0) return (trips);
- split_flag = false;
+ //---- number of output records ----
+
percent_prob = 0.0;
+ max_out = (int) trips;
if (return_flag) {
if (group->Return_Percent () == 0 || group->Return_Percent () == 100) {
- ntrips = (trips + 1) / 2;
+ ntrips = (int) (trips / 2);
} else {
- split_flag = true;
percent = (200.0 - group->Return_Percent ()) / 200.0;
percent_prob = group->Return_Percent () / percent;
ntrips = DTOI (trips * percent);
}
+ if (fraction_flag) {
+ if (ntrips <= 1) ntrips = 1;
+
+ max_out = ntrips * 2;
+ last_trip = (trips - (max_out - 2)) / 2;
+ if (trips > 0 && last_trip == 0) last_trip = 1.0;
+ }
+
} else {
- ntrips = trips;
+ ntrips = (int) trips;
+
+ if (fraction_flag) {
+ last_trip = trips - max_out;
+
+ if (ntrips == 0) {
+ if (last_trip > 0) {
+ ntrips = max_out = 1;
+ last_trip = trips;
+ }
+ } else if (trips > 0) {
+ last_trip += 1.0;
+ }
+ }
}
+ if (ntrips == 0) return (trips);
//---- distribute the trips to the time targets ----
@@ -115,96 +189,71 @@
for (trp=0; trp < ntrips; trp++) {
- //---- locate the trip origin ----
+ if (od_output_type == LOCATION_ID) {
- prob = org_wt * random_org.Probability ();
+ //---- locate the trip origin ----
- last = -1;
- cum_wt = 0.0;
+ prob = org_wt * random_org.Probability ();
- for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
+ last = -1;
+ cum_wt = 0.0;
- if (org_flag || loc_ptr->Org_Parking () >= 0) {
- share = loc_ptr->Weight (group->Org_Wt ());
+ for (loc = zone_loc [org]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
- if (share != 0.0) {
- cum_wt += share;
- if (prob < cum_wt) break;
- last = loc;
- }
- }
- }
- if (loc < 0 && org_ptr != 0) {
- for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
-
if (org_flag || loc_ptr->Org_Parking () >= 0) {
share = loc_ptr->Weight (group->Org_Wt ());
if (share != 0.0) {
cum_wt += share;
- if (prob < cum_wt) {
- loc = *int_itr;
- break;
+ if (prob < cum_wt) break;
+ last = loc;
+ }
+ }
+ }
+ if (loc < 0 && org_ptr != 0) {
+ for (int_itr = org_ptr->begin (); int_itr != org_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+
+ if (org_flag || loc_ptr->Org_Parking () >= 0) {
+ share = loc_ptr->Weight (group->Org_Wt ());
+
+ if (share != 0.0) {
+ cum_wt += share;
+ if (prob < cum_wt) {
+ loc = *int_itr;
+ break;
+ }
+ last = *int_itr;
}
- last = *int_itr;
}
}
}
- }
- if (loc < 0) {
- if (last < 0) {
- Set_Problem (LOCATION_PROBLEM);
- continue;
+ if (loc < 0) {
+ if (last < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ loc = last;
+ loc_ptr = &convert_array [last];
}
- loc = last;
- loc_ptr = &convert_array [last];
- }
- org_park = loc_ptr->Org_Parking ();
+ org_park = loc_ptr->Org_Parking ();
- location_ptr = &location_array [loc];
-
- org_loc = location_ptr->Location ();
- org_zone = location_ptr->Zone ();
- x = location_ptr->X ();
- y = location_ptr->Y ();
-
- //---- calculate the destination weight ----
-
- des_wt = 0.0;
-
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
location_ptr = &location_array [loc];
- if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
- share = loc_ptr->Weight (group->Des_Wt ());
+ org_loc = location_ptr->Location ();
+ org_zone = location_ptr->Zone ();
+ x = location_ptr->X ();
+ y = location_ptr->Y ();
- if (share != 0.0) {
+ //---- calculate the destination weight ----
- if (group->Dist_Wt ()) {
+ des_wt = 0.0;
- //--- apply the distance weight ----
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+ location_ptr = &location_array [loc];
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
-
- dist = sqrt (dx * dx + dy * dy);
- if (dist == 0.0) dist = 0.01;
-
- des_wt += share * dist;
- } else {
- des_wt += share;
- }
- }
- }
- }
- if (des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
- location_ptr = &location_array [*int_itr];
-
if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
share = loc_ptr->Weight (group->Des_Wt ());
@@ -212,7 +261,7 @@
if (group->Dist_Wt ()) {
- //---- apply the distance weight ----
+ //--- apply the distance weight ----
dx = location_ptr->X () - x;
dy = location_ptr->Y () - y;
@@ -227,51 +276,50 @@
}
}
}
- }
- if (des_wt == 0.0) {
- Set_Problem (LOCATION_PROBLEM);
- continue;
- }
+ if (des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+ location_ptr = &location_array [*int_itr];
- //---- locate the destination ----
+ if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
+ share = loc_ptr->Weight (group->Des_Wt ());
- prob = des_wt * random_des.Probability ();
-
- last = -1;
- cum_wt = 0.0;
+ if (share != 0.0) {
- for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
- loc_ptr = &convert_array [loc];
- location_ptr = &location_array [loc];
+ if (group->Dist_Wt ()) {
- if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
- share = loc_ptr->Weight (group->Des_Wt ());
+ //---- apply the distance weight ----
- if (share != 0.0) {
- if (group->Dist_Wt ()) {
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
- //--- apply the distance weight ----
+ dist = sqrt (dx * dx + dy * dy);
+ if (dist == 0.0) dist = 0.01;
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
-
- dist = sqrt (dx * dx + dy * dy);
- if (dist == 0.0) dist = 0.01;
-
- cum_wt += share * dist;
- } else {
- cum_wt += share;
+ des_wt += share * dist;
+ } else {
+ des_wt += share;
+ }
+ }
}
- if (prob < cum_wt) break;
- last = loc;
}
}
- }
- if (loc < 0 && des_ptr != 0) {
- for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
- loc_ptr = &convert_array [*int_itr];
- location_ptr = &location_array [*int_itr];
+ if (des_wt == 0.0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ //---- locate the destination ----
+
+ prob = des_wt * random_des.Probability ();
+
+ last = -1;
+ cum_wt = 0.0;
+
+ for (loc = zone_loc [des]; loc >= 0; loc = loc_ptr->Zone_List ()) {
+ loc_ptr = &convert_array [loc];
+ location_ptr = &location_array [loc];
+
if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
share = loc_ptr->Weight (group->Des_Wt ());
@@ -278,7 +326,7 @@
if (share != 0.0) {
if (group->Dist_Wt ()) {
- //---- apply the distance weight ----
+ //--- apply the distance weight ----
dx = location_ptr->X () - x;
dy = location_ptr->Y () - y;
@@ -290,33 +338,121 @@
} else {
cum_wt += share;
}
- if (prob < cum_wt) {
- loc = *int_itr;
- break;
+ if (prob < cum_wt) break;
+ last = loc;
+ }
+ }
+ }
+ if (loc < 0 && des_ptr != 0) {
+ for (int_itr = des_ptr->begin (); int_itr != des_ptr->end (); int_itr++) {
+ loc_ptr = &convert_array [*int_itr];
+ location_ptr = &location_array [*int_itr];
+
+ if (location_ptr->Location () != org_loc && (des_flag || loc_ptr->Des_Parking () >= 0)) {
+ share = loc_ptr->Weight (group->Des_Wt ());
+
+ if (share != 0.0) {
+ if (group->Dist_Wt ()) {
+
+ //---- apply the distance weight ----
+
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+ if (dist == 0.0) dist = 0.01;
+
+ cum_wt += share * dist;
+ } else {
+ cum_wt += share;
+ }
+ if (prob < cum_wt) {
+ loc = *int_itr;
+ break;
+ }
+ last = *int_itr;
}
- last = *int_itr;
}
}
}
- }
- if (loc < 0) {
- if (last < 0) {
+ if (loc < 0) {
+ if (last < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ loc = last;
+ loc_ptr = &convert_array [last];
+ }
+ location_ptr = &location_array [loc];
+ des_loc = location_ptr->Location ();
+ des_zone = location_ptr->Zone ();
+
+ dx = location_ptr->X () - x;
+ dy = location_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ if (org_loc == des_loc) continue;
+
+ } else if (od_output_type == NODE_ID) {
+
+ //---- locate the trip origin ----
+
+ prob = org_wt * random_org.Probability ();
+
+ org_node = -1;
+ cum_wt = 0.0;
+
+ for (int_itr = zone_node [org].begin (); int_itr != zone_node [org].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ cum_wt += node_ptr->Control ();
+ if (prob <= cum_wt) {
+ org_node = *int_itr;
+ break;
+ }
+ }
+
+ if (org_node < 0) {
Set_Problem (LOCATION_PROBLEM);
continue;
}
- loc = last;
- loc_ptr = &convert_array [last];
- }
- location_ptr = &location_array [loc];
- des_loc = location_ptr->Location ();
- des_zone = location_ptr->Zone ();
- dx = location_ptr->X () - x;
- dy = location_ptr->Y () - y;
+ node_ptr = &node_array [org_node];
+ x = node_ptr->X ();
+ y = node_ptr->Y ();
- dist = sqrt (dx * dx + dy * dy);
+ //---- locate the trip destination ----
+
+ prob = (des_wt - node_ptr->Control ()) * random_org.Probability ();
- if (org_loc == des_loc) continue;
+ des_node = -1;
+ cum_wt = 0.0;
+
+ for (int_itr = zone_node [des].begin (); int_itr != zone_node [des].end (); int_itr++) {
+ node_ptr = &node_array [*int_itr];
+ if (*int_itr == org_node) continue;
+ cum_wt += node_ptr->Control ();
+ if (prob <= cum_wt) {
+ des_node = *int_itr;
+ break;
+ }
+ }
+ if (des_node < 0) {
+ Set_Problem (LOCATION_PROBLEM);
+ continue;
+ }
+ node_ptr = &node_array [des_node];
+
+ dx = node_ptr->X () - x;
+ dy = node_ptr->Y () - y;
+
+ dist = sqrt (dx * dx + dy * dy);
+
+ if (org_node == des_node) continue;
+
+ des_node = node_ptr->Node ();
+ org_node = node_array [org_node].Node ();
+ }
//---- set the time of day ----
@@ -460,16 +596,35 @@
trip_file->Vehicle (veh);
trip_file->Veh_Type (veh_type);
trip_file->Start (start.Round_Seconds ());
- trip_file->Origin (org_loc);
- trip_file->Org_Type (LOCATION_ID);
trip_file->End (arrive.Round_Seconds ());
- trip_file->Destination (des_loc);
- trip_file->Des_Type (LOCATION_ID);
+
+ if (od_output_type == ZONE_ID) {
+ trip_file->Origin (org);
+ trip_file->Org_Type (ZONE_ID);
+ trip_file->Destination (des);
+ trip_file->Des_Type (ZONE_ID);
+ } else if (od_output_type == NODE_ID) {
+ trip_file->Origin (org_node);
+ trip_file->Org_Type (NODE_ID);
+ trip_file->Destination (des_node);
+ trip_file->Des_Type (NODE_ID);
+ } else {
+ trip_file->Origin (org_loc);
+ trip_file->Org_Type (LOCATION_ID);
+ trip_file->Destination (des_loc);
+ trip_file->Des_Type (LOCATION_ID);
+ }
trip_file->Duration (duration);
trip_file->Constraint (constraint);
trip_file->Priority (priority);
trip_file->Type (type);
+ if (fraction_flag) {
+ trip_file->Trips (((trp + 1) == ntrips) ? last_trip : 1.0);
+ } else {
+ trip_file->Trips (1);
+ }
+
skip = ((select_start_times && !start_range.In_Range (start)) ||
(select_end_times && !end_range.In_Range (arrive)));
@@ -481,8 +636,9 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (hhold_id, 1, 1);
- new_trips++;
+ trip_file->Add_Trip (hhold_id, 1, 1, trip_file->Trips ());
+ trips_out += trip_file->Trips ();
+ new_trips += trip_file->Trips ();
}
//---- household data ----
@@ -520,7 +676,7 @@
//---- check for return trips ----
- if (!return_flag || num_out == trips) continue;
+ if (!return_flag || num_out == max_out) continue;
if (percent_flag) {
if (percent_prob < random_return.Probability ()) continue;
@@ -550,13 +706,28 @@
trip_file->Trip (2);
trip_file->Mode (mode);
trip_file->Start (start.Round_Seconds ());
- trip_file->Origin (des_loc);
trip_file->End (arrive.Round_Seconds ());
- trip_file->Destination (org_loc);
+
+ if (od_output_type == ZONE_ID) {
+ trip_file->Origin (des);
+ trip_file->Destination (org);
+ } else if (od_output_type == NODE_ID) {
+ trip_file->Origin (des_node);
+ trip_file->Destination (org_node);
+ } else {
+ trip_file->Origin (des_loc);
+ trip_file->Destination (org_loc);
+ }
trip_file->Duration (0);
trip_file->Constraint (0);
trip_file->Purpose (purpose);
trip_file->Priority (priority);
+
+ if (fraction_flag) {
+ trip_file->Trips (((trp + 1) == ntrips) ? last_trip : 1.0);
+ } else {
+ trip_file->Trips (1);
+ }
group->Return_Period (start);
@@ -571,10 +742,11 @@
if (!trip_file->Write ()) {
Error ("Writing Trip File");
}
- trip_file->Add_Trip (hhold_id, 1, 1);
- new_trips++;
+ trip_file->Add_Trip (hhold_id, 1, 1, trip_file->Trips ());
+ trips_out += trip_file->Trips ();
+ new_trips += trip_file->Trips ();
}
num_out++;
}
- return (trips - num_out);
+ return (trips - trips_out);
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/Tour_Process.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Tour_Process.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/ConvertTrips/Tour_Process.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -304,7 +304,7 @@
Warning ("Writing ") << problem_file->File_Type ();
problem_flag = false;
}
- problem_file->Add_Trip (last_hhold, person, tour);
+ problem_file->Add_Trip (last_hhold, person, tour, 1);
}
}
@@ -330,9 +330,10 @@
trip_file->Destination (trip_itr->Destination ());
trip_file->Priority (trip_itr->Priority ());
trip_file->Vehicle (trip_itr->Vehicle ());
+ trip_file->Trips (1.0);
if (!trip_file->Write ()) goto trip_error;
- trip_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour ());
+ trip_file->Add_Trip (trip_itr->Household (), trip_itr->Person (), trip_itr->Tour (), trip_itr->Trips ());
new_trips++;
if (zone_sum_flag) {
Added: version7/branches/aecom/Transims70/ConvertTrips/Zone_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Zone_Nodes.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ConvertTrips/Zone_Nodes.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -0,0 +1,107 @@
+//*********************************************************
+// Zone_Nodes.cpp - assign nodes to zones
+//*********************************************************
+
+#include "ConvertTrips.hpp"
+
+//---------------------------------------------------------
+// Zone_Nodes
+//---------------------------------------------------------
+
+void ConvertTrips::Zone_Nodes (void)
+{
+ int zone, node, best, type, skip;
+ double x0, y0, dx, dy, diff;
+
+ Link_Itr link_itr;
+ Node_Data *node_ptr;
+ Node_Itr node_itr;
+ Zone_Itr zone_itr;
+ Zone_Data *zone_ptr;
+ Integers nodes;
+ Ints_Itr itr;
+
+ for (node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++) {
+ node_itr->Control (0);
+ }
+
+ //---- set node weights ----
+
+ for (link_itr = link_array.begin (); link_itr != link_array.end (); link_itr++) {
+ type = link_itr->Type ();
+ if (type > RAMP) continue;
+ if (type > LOCAL) type = 1;
+
+ node_ptr = &node_array [link_itr->Anode ()];
+ if (node_ptr->Control () < type) {
+ node_ptr->Control (type);
+ }
+ node_ptr = &node_array [link_itr->Bnode ()];
+ if (node_ptr->Control () < type) {
+ node_ptr->Control (type);
+ }
+ }
+ zone_node.assign (zone_array.size (), nodes);
+
+ //---- map nodes to zones ----
+
+ for (node = 0, node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++, node++) {
+ if (node_itr->Control () == 0) continue;
+
+ x0 = node_itr->X ();
+ y0 = node_itr->Y ();
+
+ best = 0;
+ diff = MAX_INTEGER;
+
+ for (zone = 0, zone_itr = zone_array.begin (); zone_itr != zone_array.end (); zone_itr++, zone++) {
+ dx = x0 - zone_itr->X ();
+ dy = y0 - zone_itr->Y ();
+
+ dx = dx * dx + dy * dy;
+
+ if (dx < diff) {
+ best = zone;
+ diff = dx;
+ }
+ }
+ zone_node [best].push_back (node);
+ }
+
+ //---- check for missing nodes ----
+
+ for (zone = 0, itr = zone_node.begin (); itr != zone_node.end (); itr++, zone++) {
+retry:
+ if (itr->size () > 1) continue;
+
+ if (itr->size () > 0) {
+ skip = itr->at (0);
+ } else {
+ skip = -1;
+ }
+
+ zone_ptr = &zone_array [zone];
+
+ x0 = zone_itr->X ();
+ y0 = zone_itr->Y ();
+
+ best = 0;
+ diff = -1;
+
+ for (node = 0, node_itr = node_array.begin (); node_itr != node_array.end (); node_itr++, node++) {
+ if (node == skip || node_itr->Control () == 0) continue;
+
+ dx = x0 - node_itr->X ();
+ dy = y0 - node_itr->Y ();
+
+ dx = dx * dx + dy * dy;
+
+ if (dx < diff || diff < 0) {
+ best = node;
+ diff = dx;
+ }
+ }
+ itr->push_back (best);
+ goto retry;
+ }
+}
Modified: version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp 2018-11-16 14:41:58 UTC (rev 1713)
+++ version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp 2018-12-20 02:38:46 UTC (rev 1714)
@@ -878,7 +878,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 group_flag, bool forward_flag)
+Dtime Perf_Period_Array::Flow_Time (int dir_index, Dtime tod, double len_factor, double len, double trips, 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;
@@ -886,6 +886,10 @@
bool first;
num_periods = periods->Num_Periods ();
+
+ if (trips == 0.0) trips = 1.0;
+ pce *= trips;
+ occ *= trips;
len *= pce;
ttime = 0;
first = true;
@@ -939,11 +943,11 @@
if (end_time <= high) {
ttime += ttim;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
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_Max_Volume (pce * trips);
perf_ptr->Add_Veh_Time (tt * pce);
perf_ptr->Add_Veh_Dist (len * len_factor);
perf_ptr->Add_Veh_Delay (delay * pce);
@@ -961,7 +965,7 @@
factor = 0.001;
}
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
@@ -980,7 +984,7 @@
if (end_time >= low) {
ttime += ttim;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
@@ -998,7 +1002,7 @@
factor = 0.001;
}
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Exit (pce);
@@ -1029,7 +1033,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 group_flag, bool forward_flag)
+Dtime Perf_Period_Array::Load_Flow (int dir_index, Dtime tod, Dtime ttime, double len_factor, double len, double trips, 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;
@@ -1037,6 +1041,10 @@
bool first;
num_periods = periods->Num_Periods ();
+
+ if (trips == 0.0) trips = 1.0;
+ occ *= trips;
+ pce *= trips;
len *= pce;
perf_time = 0;
first = true;
@@ -1081,7 +1089,7 @@
perf_time = perf_ptr->Time () * len_factor;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
perf_ptr->Add_Enter (pce);
@@ -1117,7 +1125,7 @@
factor = len_factor * (double) (high - tod) / ttime;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_type);
+ perf_ptr->Add_Vehicles (veh_type, trips);
perf_ptr->Add_Volume (pce);
if (group_flag) perf_ptr->Add_Group_Vol (pce);
if (first) perf_ptr->Add_Enter (pce);
@@ -1139,7 +1147,7 @@
perf_time = perf_ptr->Time () * len_factor;
perf_ptr->Add_Persons (occ);
- perf_ptr->Add_Vehicles (veh_typ...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-11-16 14:42:00
|
Revision: 1713
http://sourceforge.net/p/transims/code/1713
Author: davidroden
Date: 2018-11-16 14:41:58 +0000 (Fri, 16 Nov 2018)
Log Message:
-----------
TRANSIMS Version 7.2 -- Updated from AECOM branch 1712
Modified Paths:
--------------
version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/trunk/Transims70/Include/Control_Service.hpp
version7/trunk/Transims70/LinkSum/Control.cpp
version7/trunk/Transims70/LinkSum/Execute.cpp
version7/trunk/Transims70/LinkSum/Group_Sum_File.cpp
version7/trunk/Transims70/LinkSum/Group_Summary.cpp
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/LinkSum/LinkSum.hpp
version7/trunk/Transims70/LinkSum/LinkSum.vcxproj
version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters
version7/trunk/Transims70/SysLib/Service/Control_Service.cpp
Added Paths:
-----------
version7/trunk/Transims70/LinkSum/Custom_Groups.cpp
Modified: version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -460,6 +460,8 @@
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 ());
+ string func = "LINEAR, 0, 1";
+ exe->functions.Add_Function (lane_use_rec.Toll_Func (), func, false);
}
lane_use_rec.Min_Delay (file.Min_Delay ());
lane_use_rec.Max_Delay (file.Max_Delay ());
Modified: version7/trunk/Transims70/Include/Control_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Control_Service.hpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/Include/Control_Service.hpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -64,6 +64,7 @@
bool Set_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
String Get_Control_Text (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
+ String Get_Control_Text (int code, bool help);
bool Get_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
int Get_Control_Integer (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
double Get_Control_Double (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
Modified: version7/trunk/Transims70/LinkSum/Control.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Control.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/Control.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -410,6 +410,32 @@
group_sum_file.Create (Project_Filename (key));
group_sum_flag = true;
+
+ //---- group summary periods ----
+
+ if (!Control_Key_Empty (NEW_GROUP_SUMMARY_PERIODS)) {
+ group_periods_flag = group_periods.Add_Ranges (Get_Control_Text (NEW_GROUP_SUMMARY_PERIODS));
+
+ if (group_periods.Num_Periods () > num_inc) {
+ Error (String ("Group Summary Periods %d > Summary Increments %d") % group_periods.Num_Periods () % num_inc);
+ }
+ }
+
+ //---- group summary ratios ----
+
+ if (Check_Control_Key (NEW_GROUP_SUMMARY_RATIOS)) {
+ Double_List list;
+ Dbl_Itr dbl_itr;
+
+ Get_Control_List (NEW_GROUP_SUMMARY_RATIOS, list);
+
+ for (i = 0, dbl_itr = list.begin (); dbl_itr != list.end (); dbl_itr++, i++) {
+ if (i > 0 && *dbl_itr >= 1.0) {
+ group_ratios.push_back (Round (*dbl_itr * 100.0));
+ group_ratios_flag = true;
+ }
+ }
+ }
}
//---- speed contour file ----
@@ -474,15 +500,28 @@
//---- allocate work space ----
- if (periods_flag || ratios_flag) {
- num = (periods_flag) ? (int) data_periods.size () : 1;
- num += (ratios_flag) ? (int) data_ratios.size () : 1;
- if (num_inc + 1 > num) {
- num = num_inc + 1;
+ if (periods_flag || ratios_flag || group_periods_flag || group_ratios_flag) {
+ num = i = 0;
+
+ if (periods_flag || ratios_flag) {
+ num = (periods_flag) ? (int) data_periods.size () : 1;
+ num += (ratios_flag) ? (int) data_ratios.size () : 1;
+ if (num_inc + 1 > num) {
+ num = num_inc + 1;
+ }
}
+ if (group_periods_flag || group_ratios_flag) {
+ i = (group_periods_flag) ? (int) group_periods.size () : 1;
+ i += (group_ratios_flag) ? (int) group_ratios.size () : 1;
+ if (num_inc + 1 > i) {
+ i = num_inc + 1;
+ }
+ }
+ if (i > num) num = i;
} else {
num = num_inc + 1;
}
+
sum_bin.assign (num, dbl);
for (itr = sum_bin.begin (); itr != sum_bin.end (); itr++) {
Copied: version7/trunk/Transims70/LinkSum/Custom_Groups.cpp (from rev 1712, version7/branches/aecom/Transims70/LinkSum/Custom_Groups.cpp)
===================================================================
--- version7/trunk/Transims70/LinkSum/Custom_Groups.cpp (rev 0)
+++ version7/trunk/Transims70/LinkSum/Custom_Groups.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -0,0 +1,513 @@
+//*********************************************************
+// Custom_Groups.cpp - network performance data file
+//*********************************************************
+
+#include "LinkSum.hpp"
+
+#define LINKS 0
+#define LENGTH 1
+#define LANES 2
+#define MAX_DEN 3
+#define MAX_QUEUE 4
+#define VMT 5
+#define VHT 6
+#define VHD 7
+#define TIME_RATIO 8
+#define DENSITY 9
+#define QUEUE 10
+#define FAILURE 11
+#define TURNS 12
+#define CONG_VMT 13
+#define CONG_VHT 14
+#define CONG_TIME 15
+#define COUNT 16
+#define PREV 17
+
+//---------------------------------------------------------
+// Custom_Groups
+//---------------------------------------------------------
+
+void LinkSum::Custom_Groups (void)
+{
+ int i, j, k, p, num_p, r, num_r, n, index, use_index, link;
+ int text_field, value_field, compare_field, link_count, num_sum;
+ double length, value, percent, factor, time, lane_len, ratio, hours;
+ String buffer, units, vmt, lane_mi, type;
+ bool connect_flag, first_ratio;
+ Dtime low, high, tod, period, period_low, period_high;
+
+ Link_Data *link_ptr;
+ Dir_Data *dir_ptr;
+ Perf_Period_Itr period_itr;
+ Perf_Period *period_ptr;
+ Perf_Data perf_data;
+ Turn_Period_Itr turn_itr;
+ Turn_Period *compare_ptr;
+ Turn_Data *turn_ptr;
+ Connect_Data *connect_ptr;
+ Doubles_Itr itr;
+ Int_Set *group;
+ Int_Set_Itr group_itr;
+ Int_Map_Itr map_itr;
+ Performance_Data data;
+
+ Show_Message (String ("Writing %s -- Record") % group_sum_file.File_Type ());
+ Set_Progress ();
+
+ text_field = group_sum_file.Field_Number ("MEASURE");
+ value_field = group_sum_file.Field_Number ("VALUE");
+ compare_field = group_sum_file.Field_Number ("COMPARE");
+
+ if (group_periods_flag) {
+ num_p = group_periods.Num_Periods ();
+ } else {
+ num_p = 1;
+ }
+ if (group_ratios_flag) {
+ num_r = (int) group_ratios.size ();
+ } else {
+ num_r = 1;
+ }
+
+ //---- clear the summary bins -----
+
+ if (compare_flag) {
+ connect_flag = System_Data_Flag (CONNECTION) && (turn_period_array.size () > 0) && (compare_turn_array.size () > 0);
+ } else {
+ connect_flag = System_Data_Flag (CONNECTION) && (turn_period_array.size () > 0);
+ }
+
+ type = (person_flag) ? "Person" : "Vehicle";
+
+ //---- process each link group ----
+
+ for (i = link_equiv.First_Group (); i > 0; i = link_equiv.Next_Group ()) {
+
+ group = link_equiv.Group_List (i);
+ if (group == 0) continue;
+
+ header_label ("%d. %s") % i % link_equiv.Group_Label (i);
+
+ //---- clear the summary bins -----
+
+ for (itr = sum_bin.begin (); itr != sum_bin.end (); itr++) {
+ itr->assign (NUM_SUM_BINS, 0.0);
+ }
+
+ //---- process each link in the link group ----
+
+ link_count = 0;
+
+ for (group_itr = group->begin (); group_itr != group->end (); group_itr++) {
+ Show_Progress ();
+ link = *group_itr;
+
+ map_itr = link_map.find (abs (link));
+ if (map_itr == link_map.end ()) continue;
+
+ link_ptr = &link_array [map_itr->second];
+
+ if (select_link_flag && link_ptr->Use () == 0) continue;
+
+ length = UnRound (link_ptr->Length ());
+
+ if (link < 0) {
+ if (link_ptr->Use () == -1) continue;
+ index = link_ptr->BA_Dir ();
+ } else {
+ if (link_ptr->Use () == -2) continue;
+ index = link_ptr->AB_Dir ();
+ }
+ if (index < 0) continue;
+
+ dir_ptr = &dir_array [index];
+ use_index = dir_ptr->Use_Index ();
+
+ link_count++;
+
+ for (j=0, period_itr = perf_period_array.begin (); period_itr != perf_period_array.end (); period_itr++, j++) {
+
+ perf_period_array.periods->Period_Range (j, low, high);
+
+ data.Start (low);
+ data.End (high);
+
+ perf_data = period_itr->Total_Performance (index, use_index);
+
+ if (data.Get_Data (&perf_data, dir_ptr, link_ptr, Maximum_Time_Ratio (), person_flag)) {
+
+ lane_len = data.Lane_Len ();
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low < period_low || high > period_high) continue;
+
+ for (r=0; r < num_r; r++) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ sum_bin [n] [LINKS] += 1;
+ sum_bin [n] [LENGTH] += length;
+ sum_bin [n] [LANES] += lane_len;
+ sum_bin [n] [VMT] += data.Veh_Dist ();
+ sum_bin [n] [VHT] += data.Veh_Time ();
+ sum_bin [n] [VHD] += data.Veh_Delay ();
+ sum_bin [n] [TIME_RATIO] += data.Time_Ratio () * data.Veh_Dist ();
+ sum_bin [n] [DENSITY] += data.Density ();
+ sum_bin [n] [MAX_DEN] = MAX (sum_bin [n] [MAX_DEN], data.Max_Density ());
+ //sum_bin [n] [QUEUE] += data.Queue ();
+ sum_bin [n] [QUEUE] += data.Volume ();
+ //sum_bin [n] [MAX_QUEUE] = MAX (sum_bin [n] [MAX_QUEUE], data.Max_Queue ());
+ sum_bin [n] [MAX_QUEUE] = MAX (sum_bin [n] [MAX_QUEUE], data.Volume ());
+ //sum_bin [n] [FAILURE] += data.Failure ();
+ sum_bin [n] [FAILURE] += data.Time ().Minutes ();
+ sum_bin [n] [COUNT] += data.Count () * lane_len;
+
+ if (data.Time_Ratio () >= ratio) {
+ sum_bin [n] [CONG_VMT] += data.Veh_Dist ();
+ sum_bin [n] [CONG_VHT] += data.Veh_Time ();
+ sum_bin [n] [CONG_TIME] += data.Count () * lane_len;
+ }
+
+ }
+ }
+ if (compare_flag) {
+ period_ptr = &compare_perf_array [j];
+
+ perf_data = period_ptr->Total_Performance (index, use_index);
+
+ if (data.Get_Data (&perf_data, dir_ptr, link_ptr, Maximum_Time_Ratio (), person_flag)) {
+
+ lane_len = data.Lane_Len ();
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low < period_low || high > period_high) continue;
+
+ for (r=0; r < num_r; r++) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ sum_bin [n] [VMT+PREV] += data.Veh_Dist ();
+ sum_bin [n] [VHT+PREV] += data.Veh_Time ();
+ sum_bin [n] [VHD+PREV] += data.Veh_Delay ();
+ sum_bin [n] [TIME_RATIO+PREV] += data.Time_Ratio () * data.Veh_Dist ();
+ sum_bin [n] [DENSITY+PREV] += data.Density ();
+ sum_bin [n] [MAX_DEN+PREV] = MAX (sum_bin [n] [MAX_DEN+PREV], data.Max_Density ());
+ //sum_bin [n] [QUEUE+PREV] += data.Queue ();
+ sum_bin [n] [QUEUE + PREV] += data.Volume ();
+ //sum_bin [n] [MAX_QUEUE+PREV] = MAX (sum_bin [n] [MAX_QUEUE+PREV], data.Max_Queue ());
+ sum_bin [n] [MAX_QUEUE + PREV] = MAX (sum_bin [n] [MAX_QUEUE + PREV], data.Volume ());
+ //sum_bin [n] [FAILURE+PREV] += data.Failure ();
+ sum_bin [n] [FAILURE + PREV] += data.Time ().Minutes ();
+ sum_bin [n] [COUNT+PREV] += data.Count () * lane_len;
+
+ if (data.Time_Ratio () >= ratio) {
+ sum_bin [n] [CONG_VMT+PREV] += data.Veh_Dist ();
+ sum_bin [n] [CONG_VHT+PREV] += data.Veh_Time ();
+ sum_bin [n] [CONG_TIME+PREV] += data.Count () * lane_len;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //---- get the turning movements ----
+
+ if (connect_flag) {
+ for (k=dir_ptr->First_Connect (); k >= 0; k = connect_ptr->Next_Index ()) {
+ connect_ptr = &connect_array [k];
+
+ if (connect_ptr->Type () != LEFT && connect_ptr->Type () != RIGHT &&
+ connect_ptr->Type () != UTURN) continue;
+
+ for (j=0, turn_itr = turn_period_array.begin (); turn_itr != turn_period_array.end (); turn_itr++, j++) {
+ turn_ptr = turn_itr->Data_Ptr (k);
+
+ turn_period_array.periods->Period_Range (j, low, high);
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low >= period_low && high <= period_high) {
+ n = (p * num_r);
+ sum_bin [n] [VHD] += turn_ptr->Time () * turn_ptr->Turn ();
+ sum_bin [n] [TURNS] += turn_ptr->Turn ();
+ }
+ }
+ if (compare_flag) {
+ compare_ptr = &compare_turn_array [j];
+ turn_ptr = compare_ptr->Data_Ptr (k);
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low >= period_low && high <= period_high) {
+ n = (p * num_r);
+ sum_bin [n] [VHD+PREV] += turn_ptr->Time () * turn_ptr->Turn ();
+ sum_bin [n] [TURNS+PREV] += turn_ptr->Turn ();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //---- write the data ----
+
+ if (Metric_Flag ()) {
+ factor = 1.0 / 1000.0;
+ units = "Kilometers";
+ vmt = (person_flag) ? "PKT" : "VKT";
+ lane_mi = "km)";
+ } else {
+ factor = 1.0 / MILETOFEET;
+ units = "Miles";
+ vmt = (person_flag) ? "PMT" : "VMT";
+ lane_mi = "mi)";
+ }
+ tod.Hours (1);
+ if (link_count == 0) link_count = 1;
+
+ group_sum_file.Put_Field (text_field, header_label);
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ for (p = 0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = Model_Start_Time ();
+ period_high = Model_End_Time ();
+ }
+ first_ratio = true;
+ period = period_high - period_low;
+ hours = (double) period / (double) tod;
+
+ buffer = String ("Time Period %12.12s") % group_periods.Range_Format (p);
+
+ for (r = 0; r < num_r; r++, first_ratio = false) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ lane_len = sum_bin [n] [LANES];
+
+ num_sum = (int) (sum_bin [n] [LINKS] / link_count);
+
+ if (first_ratio) {
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Links"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LINKS] / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LINKS] / num_sum);
+ group_sum_file.Write ();
+
+ buffer = "Number of Roadway " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LENGTH] * factor / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LENGTH] * factor / num_sum);
+ group_sum_file.Write ();
+
+ buffer = "Number of Lane " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LANES] * factor / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LANES] * factor / num_sum);
+ group_sum_file.Write ();
+
+ buffer = type + " " + units + " of Travel";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VMT] * factor);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VMT + PREV] * factor);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("%s Hours of Travel") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VHT] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VHT + PREV] / tod);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("%s Hours of Delay") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VHD] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VHD + PREV] / tod);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Queued %ss") % type);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [QUEUE]) / (hours * 4));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [QUEUE + PREV]) / (hours * 4));
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Maximum Queued %ss") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [MAX_QUEUE]);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [MAX_QUEUE + PREV]);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Cycle Failures"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [FAILURE] / (hours * 4));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [FAILURE + PREV] / (hours * 4));
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Turning Movements"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [TURNS]);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [TURNS + PREV]);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Average Link Time Ratio"));
+ value = sum_bin [n] [VMT];
+ if (value <= 0.0) value = 1.0;
+ group_sum_file.Put_Field (value_field, sum_bin [n] [TIME_RATIO] / (value * 100.0));
+ if (compare_flag) {
+ value = sum_bin [n] [VMT + PREV];
+ if (value <= 0.0) value = 1.0;
+ group_sum_file.Put_Field (compare_field, sum_bin [n] [TIME_RATIO + PREV] / (value * 100.0));
+ }
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [LINKS];
+
+ buffer = "Average Link Density (/ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [DENSITY] / value));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [DENSITY + PREV] / value));
+ group_sum_file.Write ();
+
+ buffer = "Maximum Link Density (/ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [MAX_DEN]));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [MAX_DEN + PREV]));
+ group_sum_file.Write ();
+
+ length = sum_bin [n] [VMT] * factor;
+ time = sum_bin [n] [VHT] / tod;
+ if (time == 0.0) {
+ time = length;
+ } else {
+ time = length / time;
+ }
+ buffer = "Average " + units + " Per Hour";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, time);
+
+ if (compare_flag) {
+ length = sum_bin [n] [VMT + PREV] * factor;
+ time = sum_bin [n] [VHT + PREV] / tod;
+ if (time == 0.0) {
+ time = length;
+ } else {
+ time = length / time;
+ }
+ group_sum_file.Put_Field (compare_field, time);
+ }
+ group_sum_file.Write ();
+ }
+ group_sum_file.Put_Field (text_field, String ("Congested Ratio=%.2lf") % (ratio / 100.0));
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ buffer = "Congested " + type + " " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_VMT] * factor);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_VMT + PREV] * factor);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [VMT];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VMT] / value;
+
+ buffer = String ("Percent %s Congested") % vmt;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [VMT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VMT + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+
+ buffer = "Congested " + type + " Hours";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_VHT] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_VHT + PREV] / tod);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [VHT];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VHT] / value;
+
+ buffer = String ("Percent %sHT Congested") % ((person_flag ? "P" : "V"));
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [VHT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VHT + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+
+ value = factor * hours / num_sum;
+
+ buffer = "Congested Duration (hrs*ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_TIME] * value);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_TIME + PREV] * value);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [COUNT];
+ if (value == 0.0) value = 1.0;
+
+ percent = 100.0 * sum_bin [n] [CONG_TIME] / value;
+
+ group_sum_file.Put_Field (text_field, String ("Percent Time Congested"));
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [COUNT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_TIME + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+ }
+ }
+ }
+}
Modified: version7/trunk/Transims70/LinkSum/Execute.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Execute.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/Execute.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -94,7 +94,11 @@
//---- write the group perf file ----
if (group_sum_flag) {
- Group_Sum_File ();
+ if (group_periods_flag || group_ratios_flag) {
+ Custom_Groups ();
+ } else {
+ Group_Sum_File ();
+ }
}
//---- create speed contour file ----
Modified: version7/trunk/Transims70/LinkSum/Group_Sum_File.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Group_Sum_File.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/Group_Sum_File.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -128,7 +128,8 @@
sum_bin [j] [MAX_DEN] = MAX (sum_bin [j] [MAX_DEN], data.Max_Density ());
sum_bin [j] [QUEUE] += data.Queue ();
sum_bin [j] [MAX_QUEUE] = MAX (sum_bin [j] [MAX_QUEUE], data.Max_Queue ());
- sum_bin [j] [FAILURE] += data.Failure ();
+ //sum_bin [j] [FAILURE] += data.Failure ();
+ sum_bin [j] [FAILURE] += data.Time ().Seconds ();
sum_bin [j] [COUNT] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -153,7 +154,8 @@
sum_bin [j] [MAX_DEN+PREV] = MAX (sum_bin [j] [MAX_DEN+PREV], data.Max_Density ());
sum_bin [j] [QUEUE+PREV] += data.Queue ();
sum_bin [j] [MAX_QUEUE+PREV] = MAX (sum_bin [j] [MAX_QUEUE+PREV], data.Max_Queue ());
- sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ //sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ sum_bin [j] [FAILURE + PREV] += data.Time ().Seconds ();
sum_bin [j] [COUNT+PREV] += data.Count () * lane_len;
if (Ratio_Flag ()) {
Modified: version7/trunk/Transims70/LinkSum/Group_Summary.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Group_Summary.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/Group_Summary.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -144,7 +144,8 @@
sum_bin [j] [MAX_DEN] = MAX (sum_bin [j] [MAX_DEN], data.Max_Density ());
sum_bin [j] [QUEUE] += data.Queue ();
sum_bin [j] [MAX_QUEUE] = MAX (sum_bin [j] [MAX_QUEUE], data.Max_Queue ());
- sum_bin [j] [FAILURE] += data.Failure ();
+ //sum_bin [j] [FAILURE] += data.Failure ();
+ sum_bin [j] [FAILURE] += data.Time ().Seconds ();
sum_bin [j] [COUNT] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -169,7 +170,8 @@
sum_bin [j] [MAX_DEN+PREV] = MAX (sum_bin [j] [MAX_DEN+PREV], data.Max_Density ());
sum_bin [j] [QUEUE+PREV] += data.Queue ();
sum_bin [j] [MAX_QUEUE+PREV] = MAX (sum_bin [j] [MAX_QUEUE+PREV], data.Max_Queue ());
- sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ //sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ sum_bin [j] [FAILURE+PREV] += data.Time ().Seconds ();
sum_bin [j] [COUNT+PREV] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -268,6 +270,7 @@
Print (1, String ("Number of Roadway %-10.10s %13.2lf") % units % (sum_bin [j] [LENGTH] * factor));
Print (1, String ("Number of Lane %-10.10s %13.2lf") % units % (sum_bin [j] [LANES] * factor));
Print (1, String ("Vehicle %-20.20s %13.2lf") % (units + " of Travel") % (sum_bin [j] [VMT] * factor));
+
if (compare_flag) {
base = sum_bin [j] [VMT+PREV] * factor;
diff = sum_bin [j] [VMT] * factor - base;
@@ -316,10 +319,13 @@
Print (0, String (" %13.2lf %13.2lf (%.2lf%%)") % base % diff % ((base > 0.0) ? (100.0 * diff / base) : 0.0) % FINISH);
}
- Print (1, String ("Average Link Time Ratio %13.2lf") % (sum_bin [j] [TIME_RATIO] / len));
+ length = sum_bin [j] [VMT] * 100.0;
+ if (length == 0.0) length = 1.0;
+
+ Print (1, String ("Average Link Time Ratio %13.2lf") % (sum_bin [j] [TIME_RATIO] / length));
if (compare_flag) {
- base = sum_bin [j] [TIME_RATIO+PREV] / len;
- diff = sum_bin [j] [TIME_RATIO] / len - base;
+ base = sum_bin [j] [TIME_RATIO+PREV] / length;
+ diff = sum_bin [j] [TIME_RATIO] / length - base;
Print (0, String (" %13.2lf %13.2lf (%.2lf%%)") % base % diff % ((base > 0.0) ? (100.0 * diff / base) : 0.0) % FINISH);
}
Modified: version7/trunk/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/LinkSum.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -13,7 +13,7 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (0);
+ Version (1);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
@@ -69,6 +69,8 @@
{ NEW_DATA_SUMMARY_RATIOS, "NEW_DATA_SUMMARY_RATIOS", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0, 1.0..5.0", NO_HELP },
{ NEW_GROUP_SUMMARY_FILE, "NEW_GROUP_SUMMARY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_GROUP_SUMMARY_FORMAT, "NEW_GROUP_SUMMARY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { NEW_GROUP_SUMMARY_PERIODS, "NEW_GROUP_SUMMARY_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, " ", TIME_RANGE, NO_HELP},
+ { NEW_GROUP_SUMMARY_RATIOS, "NEW_GROUP_SUMMARY_RATIOS", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0, 1.0..5.0", NO_HELP},
{ NEW_SPEED_CONTOUR_FILE, "NEW_SPEED_CONTOUR_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_SPEED_CONTOUR_FORMAT, "NEW_SPEED_CONTOUR_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ FLIP_SPEED_CONTOUR_OUTPUT, "FLIP_SPEED_CONTOUR_OUTPUT", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
@@ -112,6 +114,7 @@
compare_flag = group_select = summary_flag = group_sum_flag = turn_flag = turn_compare_flag = false;
select_link_flag = activity_flag = zone_flag = group_flag = person_flag = periods_flag = ratios_flag = false;
link_map_flag = compare_perf_flag = skip_link_flag = speed_contour_flag = flip_flag = false;
+ group_periods_flag = group_ratios_flag = false;
nerror = 0;
minimum_volume = 2.0;
Modified: version7/trunk/Transims70/LinkSum/LinkSum.hpp
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.hpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/LinkSum.hpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -48,7 +48,8 @@
NEW_LINK_DIRECTION_FILE, NEW_LINK_DIRECTION_FORMAT, NEW_LINK_DIRECTION_FIELD, NEW_LINK_DIRECTION_INDEX,
NEW_LINK_DIRECTION_FLIP, NEW_LINK_DATA_FILE, NEW_LINK_DATA_FORMAT, NEW_LINK_DATA_FIELD,
NEW_DATA_SUMMARY_FILE, NEW_DATA_SUMMARY_FORMAT, NEW_DATA_SUMMARY_PERIODS, NEW_DATA_SUMMARY_RATIOS,
- NEW_GROUP_SUMMARY_FILE, NEW_GROUP_SUMMARY_FORMAT, NEW_SPEED_CONTOUR_FILE, NEW_SPEED_CONTOUR_FORMAT,
+ NEW_GROUP_SUMMARY_FILE, NEW_GROUP_SUMMARY_FORMAT, NEW_GROUP_SUMMARY_PERIODS, NEW_GROUP_SUMMARY_RATIOS,
+ NEW_SPEED_CONTOUR_FILE, NEW_SPEED_CONTOUR_FORMAT,
FLIP_SPEED_CONTOUR_OUTPUT,
};
virtual void Program_Control (void);
@@ -64,7 +65,7 @@
bool select_link_flag, activity_flag, zone_flag, group_flag, person_flag, periods_flag, ratios_flag, compare_perf_flag;
bool compare_flag, group_select, summary_flag, group_sum_flag, turn_flag, turn_compare_flag, link_map_flag, skip_link_flag;
- bool speed_contour_flag, flip_flag, turn_diff_flag;
+ bool speed_contour_flag, flip_flag, turn_diff_flag, group_periods_flag, group_ratios_flag;
int increment, num_inc, nerror;
double header_value, cap_factor, minimum_volume, congested_ratio;
String header_label;
@@ -73,8 +74,8 @@
typedef Doubles_Array::iterator Doubles_Itr;
Doubles_Array sum_bin, zone_vmt, zone_vht;
- Doubles data_ratios;
- Time_Periods data_periods;
+ Doubles data_ratios, group_ratios;
+ Time_Periods data_periods, group_periods;
Performance_File compare_file;
Turn_Delay_File turn_compare_file;
@@ -201,6 +202,7 @@
void Summary_File (void);
void Custom_Summaries (void);
void Group_Sum_File (void);
+ void Custom_Groups (void);
void Speed_Contour (void);
};
Modified: version7/trunk/Transims70/LinkSum/LinkSum.vcxproj
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.vcxproj 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/LinkSum.vcxproj 2018-11-16 14:41:58 UTC (rev 1713)
@@ -162,6 +162,7 @@
<ItemGroup>
<ClCompile Include="Compare_Links.cpp" />
<ClCompile Include="Control.cpp" />
+ <ClCompile Include="Custom_Groups.cpp" />
<ClCompile Include="Custom_Summaries.cpp" />
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Gap_Report.cpp" />
Modified: version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-11-16 14:41:58 UTC (rev 1713)
@@ -121,5 +121,8 @@
<ClCompile Include="Write_Turn_Diff.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Custom_Groups.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/SysLib/Service/Control_Service.cpp
===================================================================
--- version7/trunk/Transims70/SysLib/Service/Control_Service.cpp 2018-11-16 14:35:03 UTC (rev 1712)
+++ version7/trunk/Transims70/SysLib/Service/Control_Service.cpp 2018-11-16 14:41:58 UTC (rev 1713)
@@ -588,6 +588,39 @@
}
//-----------------------------------------------------------
+// Get_Control_Text - search for a string parameter
+//-----------------------------------------------------------
+
+String Control_Service::Get_Control_Text (int code, bool help)
+{
+ Control_Key *key_ptr = Get_Control_Key (code);
+ if (key_ptr == 0) return ("");
+
+ bool flag;
+ String key, default_value;
+
+ key = Get_Control_String (code);
+
+ if (key.empty ()) {
+ if (key_ptr->value.empty ()) return ("");
+
+ key = key_ptr->value;
+ flag = false;
+ } else {
+ flag = true;
+ }
+
+ //---- print the key message ----
+
+ if (flag) {
+ default_value = key_ptr->key;
+ Print (1, default_value.To_Title ()) << " = " << key;
+ if (help) Print (0, String (" (%s)") % Get_Range_String (code));
+ }
+ return (key);
+}
+
+//-----------------------------------------------------------
// Get_Control_Flag - search for a flag parameter
//-----------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-11-16 14:35:04
|
Revision: 1712
http://sourceforge.net/p/transims/code/1712
Author: davidroden
Date: 2018-11-16 14:35:03 +0000 (Fri, 16 Nov 2018)
Log Message:
-----------
TRANSIMS Version 7.2 -- AECOM branch 1704
SysLib
Additional method was added to Control Services to print default values for unspecified control keys.
Data_Service
A default linear toll function was added for lane-use toll function values that do not have a corresponding user function specification.
LinkSum 7.2.1
NEW_GROUP_SUMMARY_PERIODS and NEW_GROUP_SUMMARY_RATIOS keys were added for custom link group processing of corridor volume, queue and travel time summaries for selected time periods.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Include/Control_Service.hpp
version7/branches/aecom/Transims70/LinkSum/Control.cpp
version7/branches/aecom/Transims70/LinkSum/Execute.cpp
version7/branches/aecom/Transims70/LinkSum/Group_Sum_File.cpp
version7/branches/aecom/Transims70/LinkSum/Group_Summary.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/LinkSum/Custom_Groups.cpp
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -460,6 +460,8 @@
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 ());
+ string func = "LINEAR, 0, 1";
+ exe->functions.Add_Function (lane_use_rec.Toll_Func (), func, false);
}
lane_use_rec.Min_Delay (file.Min_Delay ());
lane_use_rec.Max_Delay (file.Max_Delay ());
Modified: version7/branches/aecom/Transims70/Include/Control_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Control_Service.hpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/Include/Control_Service.hpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -64,6 +64,7 @@
bool Set_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
String Get_Control_Text (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
+ String Get_Control_Text (int code, bool help);
bool Get_Control_Flag (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
int Get_Control_Integer (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
double Get_Control_Double (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
Modified: version7/branches/aecom/Transims70/LinkSum/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -410,6 +410,32 @@
group_sum_file.Create (Project_Filename (key));
group_sum_flag = true;
+
+ //---- group summary periods ----
+
+ if (!Control_Key_Empty (NEW_GROUP_SUMMARY_PERIODS)) {
+ group_periods_flag = group_periods.Add_Ranges (Get_Control_Text (NEW_GROUP_SUMMARY_PERIODS));
+
+ if (group_periods.Num_Periods () > num_inc) {
+ Error (String ("Group Summary Periods %d > Summary Increments %d") % group_periods.Num_Periods () % num_inc);
+ }
+ }
+
+ //---- group summary ratios ----
+
+ if (Check_Control_Key (NEW_GROUP_SUMMARY_RATIOS)) {
+ Double_List list;
+ Dbl_Itr dbl_itr;
+
+ Get_Control_List (NEW_GROUP_SUMMARY_RATIOS, list);
+
+ for (i = 0, dbl_itr = list.begin (); dbl_itr != list.end (); dbl_itr++, i++) {
+ if (i > 0 && *dbl_itr >= 1.0) {
+ group_ratios.push_back (Round (*dbl_itr * 100.0));
+ group_ratios_flag = true;
+ }
+ }
+ }
}
//---- speed contour file ----
@@ -474,15 +500,28 @@
//---- allocate work space ----
- if (periods_flag || ratios_flag) {
- num = (periods_flag) ? (int) data_periods.size () : 1;
- num += (ratios_flag) ? (int) data_ratios.size () : 1;
- if (num_inc + 1 > num) {
- num = num_inc + 1;
+ if (periods_flag || ratios_flag || group_periods_flag || group_ratios_flag) {
+ num = i = 0;
+
+ if (periods_flag || ratios_flag) {
+ num = (periods_flag) ? (int) data_periods.size () : 1;
+ num += (ratios_flag) ? (int) data_ratios.size () : 1;
+ if (num_inc + 1 > num) {
+ num = num_inc + 1;
+ }
}
+ if (group_periods_flag || group_ratios_flag) {
+ i = (group_periods_flag) ? (int) group_periods.size () : 1;
+ i += (group_ratios_flag) ? (int) group_ratios.size () : 1;
+ if (num_inc + 1 > i) {
+ i = num_inc + 1;
+ }
+ }
+ if (i > num) num = i;
} else {
num = num_inc + 1;
}
+
sum_bin.assign (num, dbl);
for (itr = sum_bin.begin (); itr != sum_bin.end (); itr++) {
Added: version7/branches/aecom/Transims70/LinkSum/Custom_Groups.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Custom_Groups.cpp (rev 0)
+++ version7/branches/aecom/Transims70/LinkSum/Custom_Groups.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -0,0 +1,513 @@
+//*********************************************************
+// Custom_Groups.cpp - network performance data file
+//*********************************************************
+
+#include "LinkSum.hpp"
+
+#define LINKS 0
+#define LENGTH 1
+#define LANES 2
+#define MAX_DEN 3
+#define MAX_QUEUE 4
+#define VMT 5
+#define VHT 6
+#define VHD 7
+#define TIME_RATIO 8
+#define DENSITY 9
+#define QUEUE 10
+#define FAILURE 11
+#define TURNS 12
+#define CONG_VMT 13
+#define CONG_VHT 14
+#define CONG_TIME 15
+#define COUNT 16
+#define PREV 17
+
+//---------------------------------------------------------
+// Custom_Groups
+//---------------------------------------------------------
+
+void LinkSum::Custom_Groups (void)
+{
+ int i, j, k, p, num_p, r, num_r, n, index, use_index, link;
+ int text_field, value_field, compare_field, link_count, num_sum;
+ double length, value, percent, factor, time, lane_len, ratio, hours;
+ String buffer, units, vmt, lane_mi, type;
+ bool connect_flag, first_ratio;
+ Dtime low, high, tod, period, period_low, period_high;
+
+ Link_Data *link_ptr;
+ Dir_Data *dir_ptr;
+ Perf_Period_Itr period_itr;
+ Perf_Period *period_ptr;
+ Perf_Data perf_data;
+ Turn_Period_Itr turn_itr;
+ Turn_Period *compare_ptr;
+ Turn_Data *turn_ptr;
+ Connect_Data *connect_ptr;
+ Doubles_Itr itr;
+ Int_Set *group;
+ Int_Set_Itr group_itr;
+ Int_Map_Itr map_itr;
+ Performance_Data data;
+
+ Show_Message (String ("Writing %s -- Record") % group_sum_file.File_Type ());
+ Set_Progress ();
+
+ text_field = group_sum_file.Field_Number ("MEASURE");
+ value_field = group_sum_file.Field_Number ("VALUE");
+ compare_field = group_sum_file.Field_Number ("COMPARE");
+
+ if (group_periods_flag) {
+ num_p = group_periods.Num_Periods ();
+ } else {
+ num_p = 1;
+ }
+ if (group_ratios_flag) {
+ num_r = (int) group_ratios.size ();
+ } else {
+ num_r = 1;
+ }
+
+ //---- clear the summary bins -----
+
+ if (compare_flag) {
+ connect_flag = System_Data_Flag (CONNECTION) && (turn_period_array.size () > 0) && (compare_turn_array.size () > 0);
+ } else {
+ connect_flag = System_Data_Flag (CONNECTION) && (turn_period_array.size () > 0);
+ }
+
+ type = (person_flag) ? "Person" : "Vehicle";
+
+ //---- process each link group ----
+
+ for (i = link_equiv.First_Group (); i > 0; i = link_equiv.Next_Group ()) {
+
+ group = link_equiv.Group_List (i);
+ if (group == 0) continue;
+
+ header_label ("%d. %s") % i % link_equiv.Group_Label (i);
+
+ //---- clear the summary bins -----
+
+ for (itr = sum_bin.begin (); itr != sum_bin.end (); itr++) {
+ itr->assign (NUM_SUM_BINS, 0.0);
+ }
+
+ //---- process each link in the link group ----
+
+ link_count = 0;
+
+ for (group_itr = group->begin (); group_itr != group->end (); group_itr++) {
+ Show_Progress ();
+ link = *group_itr;
+
+ map_itr = link_map.find (abs (link));
+ if (map_itr == link_map.end ()) continue;
+
+ link_ptr = &link_array [map_itr->second];
+
+ if (select_link_flag && link_ptr->Use () == 0) continue;
+
+ length = UnRound (link_ptr->Length ());
+
+ if (link < 0) {
+ if (link_ptr->Use () == -1) continue;
+ index = link_ptr->BA_Dir ();
+ } else {
+ if (link_ptr->Use () == -2) continue;
+ index = link_ptr->AB_Dir ();
+ }
+ if (index < 0) continue;
+
+ dir_ptr = &dir_array [index];
+ use_index = dir_ptr->Use_Index ();
+
+ link_count++;
+
+ for (j=0, period_itr = perf_period_array.begin (); period_itr != perf_period_array.end (); period_itr++, j++) {
+
+ perf_period_array.periods->Period_Range (j, low, high);
+
+ data.Start (low);
+ data.End (high);
+
+ perf_data = period_itr->Total_Performance (index, use_index);
+
+ if (data.Get_Data (&perf_data, dir_ptr, link_ptr, Maximum_Time_Ratio (), person_flag)) {
+
+ lane_len = data.Lane_Len ();
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low < period_low || high > period_high) continue;
+
+ for (r=0; r < num_r; r++) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ sum_bin [n] [LINKS] += 1;
+ sum_bin [n] [LENGTH] += length;
+ sum_bin [n] [LANES] += lane_len;
+ sum_bin [n] [VMT] += data.Veh_Dist ();
+ sum_bin [n] [VHT] += data.Veh_Time ();
+ sum_bin [n] [VHD] += data.Veh_Delay ();
+ sum_bin [n] [TIME_RATIO] += data.Time_Ratio () * data.Veh_Dist ();
+ sum_bin [n] [DENSITY] += data.Density ();
+ sum_bin [n] [MAX_DEN] = MAX (sum_bin [n] [MAX_DEN], data.Max_Density ());
+ //sum_bin [n] [QUEUE] += data.Queue ();
+ sum_bin [n] [QUEUE] += data.Volume ();
+ //sum_bin [n] [MAX_QUEUE] = MAX (sum_bin [n] [MAX_QUEUE], data.Max_Queue ());
+ sum_bin [n] [MAX_QUEUE] = MAX (sum_bin [n] [MAX_QUEUE], data.Volume ());
+ //sum_bin [n] [FAILURE] += data.Failure ();
+ sum_bin [n] [FAILURE] += data.Time ().Minutes ();
+ sum_bin [n] [COUNT] += data.Count () * lane_len;
+
+ if (data.Time_Ratio () >= ratio) {
+ sum_bin [n] [CONG_VMT] += data.Veh_Dist ();
+ sum_bin [n] [CONG_VHT] += data.Veh_Time ();
+ sum_bin [n] [CONG_TIME] += data.Count () * lane_len;
+ }
+
+ }
+ }
+ if (compare_flag) {
+ period_ptr = &compare_perf_array [j];
+
+ perf_data = period_ptr->Total_Performance (index, use_index);
+
+ if (data.Get_Data (&perf_data, dir_ptr, link_ptr, Maximum_Time_Ratio (), person_flag)) {
+
+ lane_len = data.Lane_Len ();
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low < period_low || high > period_high) continue;
+
+ for (r=0; r < num_r; r++) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ sum_bin [n] [VMT+PREV] += data.Veh_Dist ();
+ sum_bin [n] [VHT+PREV] += data.Veh_Time ();
+ sum_bin [n] [VHD+PREV] += data.Veh_Delay ();
+ sum_bin [n] [TIME_RATIO+PREV] += data.Time_Ratio () * data.Veh_Dist ();
+ sum_bin [n] [DENSITY+PREV] += data.Density ();
+ sum_bin [n] [MAX_DEN+PREV] = MAX (sum_bin [n] [MAX_DEN+PREV], data.Max_Density ());
+ //sum_bin [n] [QUEUE+PREV] += data.Queue ();
+ sum_bin [n] [QUEUE + PREV] += data.Volume ();
+ //sum_bin [n] [MAX_QUEUE+PREV] = MAX (sum_bin [n] [MAX_QUEUE+PREV], data.Max_Queue ());
+ sum_bin [n] [MAX_QUEUE + PREV] = MAX (sum_bin [n] [MAX_QUEUE + PREV], data.Volume ());
+ //sum_bin [n] [FAILURE+PREV] += data.Failure ();
+ sum_bin [n] [FAILURE + PREV] += data.Time ().Minutes ();
+ sum_bin [n] [COUNT+PREV] += data.Count () * lane_len;
+
+ if (data.Time_Ratio () >= ratio) {
+ sum_bin [n] [CONG_VMT+PREV] += data.Veh_Dist ();
+ sum_bin [n] [CONG_VHT+PREV] += data.Veh_Time ();
+ sum_bin [n] [CONG_TIME+PREV] += data.Count () * lane_len;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //---- get the turning movements ----
+
+ if (connect_flag) {
+ for (k=dir_ptr->First_Connect (); k >= 0; k = connect_ptr->Next_Index ()) {
+ connect_ptr = &connect_array [k];
+
+ if (connect_ptr->Type () != LEFT && connect_ptr->Type () != RIGHT &&
+ connect_ptr->Type () != UTURN) continue;
+
+ for (j=0, turn_itr = turn_period_array.begin (); turn_itr != turn_period_array.end (); turn_itr++, j++) {
+ turn_ptr = turn_itr->Data_Ptr (k);
+
+ turn_period_array.periods->Period_Range (j, low, high);
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low >= period_low && high <= period_high) {
+ n = (p * num_r);
+ sum_bin [n] [VHD] += turn_ptr->Time () * turn_ptr->Turn ();
+ sum_bin [n] [TURNS] += turn_ptr->Turn ();
+ }
+ }
+ if (compare_flag) {
+ compare_ptr = &compare_turn_array [j];
+ turn_ptr = compare_ptr->Data_Ptr (k);
+
+ for (p=0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = low;
+ period_high = high;
+ }
+ if (low >= period_low && high <= period_high) {
+ n = (p * num_r);
+ sum_bin [n] [VHD+PREV] += turn_ptr->Time () * turn_ptr->Turn ();
+ sum_bin [n] [TURNS+PREV] += turn_ptr->Turn ();
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ //---- write the data ----
+
+ if (Metric_Flag ()) {
+ factor = 1.0 / 1000.0;
+ units = "Kilometers";
+ vmt = (person_flag) ? "PKT" : "VKT";
+ lane_mi = "km)";
+ } else {
+ factor = 1.0 / MILETOFEET;
+ units = "Miles";
+ vmt = (person_flag) ? "PMT" : "VMT";
+ lane_mi = "mi)";
+ }
+ tod.Hours (1);
+ if (link_count == 0) link_count = 1;
+
+ group_sum_file.Put_Field (text_field, header_label);
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ for (p = 0; p < num_p; p++) {
+ if (group_periods_flag) {
+ group_periods.Period_Range (p, period_low, period_high);
+ } else {
+ period_low = Model_Start_Time ();
+ period_high = Model_End_Time ();
+ }
+ first_ratio = true;
+ period = period_high - period_low;
+ hours = (double) period / (double) tod;
+
+ buffer = String ("Time Period %12.12s") % group_periods.Range_Format (p);
+
+ for (r = 0; r < num_r; r++, first_ratio = false) {
+ if (group_ratios_flag) {
+ ratio = UnRound (group_ratios [r]);
+ } else {
+ ratio = UnRound (Congested_Ratio ());
+ }
+ n = (p * num_r + r);
+
+ lane_len = sum_bin [n] [LANES];
+
+ num_sum = (int) (sum_bin [n] [LINKS] / link_count);
+
+ if (first_ratio) {
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Links"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LINKS] / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LINKS] / num_sum);
+ group_sum_file.Write ();
+
+ buffer = "Number of Roadway " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LENGTH] * factor / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LENGTH] * factor / num_sum);
+ group_sum_file.Write ();
+
+ buffer = "Number of Lane " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [LANES] * factor / num_sum);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [LANES] * factor / num_sum);
+ group_sum_file.Write ();
+
+ buffer = type + " " + units + " of Travel";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VMT] * factor);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VMT + PREV] * factor);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("%s Hours of Travel") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VHT] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VHT + PREV] / tod);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("%s Hours of Delay") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [VHD] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [VHD + PREV] / tod);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Queued %ss") % type);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [QUEUE]) / (hours * 4));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [QUEUE + PREV]) / (hours * 4));
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Maximum Queued %ss") % type);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [MAX_QUEUE]);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [MAX_QUEUE + PREV]);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Cycle Failures"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [FAILURE] / (hours * 4));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [FAILURE + PREV] / (hours * 4));
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Number of Turning Movements"));
+ group_sum_file.Put_Field (value_field, sum_bin [n] [TURNS]);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [TURNS + PREV]);
+ group_sum_file.Write ();
+
+ group_sum_file.Put_Field (text_field, String ("Average Link Time Ratio"));
+ value = sum_bin [n] [VMT];
+ if (value <= 0.0) value = 1.0;
+ group_sum_file.Put_Field (value_field, sum_bin [n] [TIME_RATIO] / (value * 100.0));
+ if (compare_flag) {
+ value = sum_bin [n] [VMT + PREV];
+ if (value <= 0.0) value = 1.0;
+ group_sum_file.Put_Field (compare_field, sum_bin [n] [TIME_RATIO + PREV] / (value * 100.0));
+ }
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [LINKS];
+
+ buffer = "Average Link Density (/ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [DENSITY] / value));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [DENSITY + PREV] / value));
+ group_sum_file.Write ();
+
+ buffer = "Maximum Link Density (/ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, UnRound (sum_bin [n] [MAX_DEN]));
+ if (compare_flag) group_sum_file.Put_Field (compare_field, UnRound (sum_bin [n] [MAX_DEN + PREV]));
+ group_sum_file.Write ();
+
+ length = sum_bin [n] [VMT] * factor;
+ time = sum_bin [n] [VHT] / tod;
+ if (time == 0.0) {
+ time = length;
+ } else {
+ time = length / time;
+ }
+ buffer = "Average " + units + " Per Hour";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, time);
+
+ if (compare_flag) {
+ length = sum_bin [n] [VMT + PREV] * factor;
+ time = sum_bin [n] [VHT + PREV] / tod;
+ if (time == 0.0) {
+ time = length;
+ } else {
+ time = length / time;
+ }
+ group_sum_file.Put_Field (compare_field, time);
+ }
+ group_sum_file.Write ();
+ }
+ group_sum_file.Put_Field (text_field, String ("Congested Ratio=%.2lf") % (ratio / 100.0));
+ group_sum_file.Put_Field (value_field, 0.0);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, 0.0);
+ group_sum_file.Write ();
+
+ buffer = "Congested " + type + " " + units;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_VMT] * factor);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_VMT + PREV] * factor);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [VMT];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VMT] / value;
+
+ buffer = String ("Percent %s Congested") % vmt;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [VMT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VMT + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+
+ buffer = "Congested " + type + " Hours";
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_VHT] / tod);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_VHT + PREV] / tod);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [VHT];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VHT] / value;
+
+ buffer = String ("Percent %sHT Congested") % ((person_flag ? "P" : "V"));
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [VHT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_VHT + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+
+ value = factor * hours / num_sum;
+
+ buffer = "Congested Duration (hrs*ln-" + lane_mi;
+ group_sum_file.Put_Field (text_field, buffer);
+ group_sum_file.Put_Field (value_field, sum_bin [n] [CONG_TIME] * value);
+ if (compare_flag) group_sum_file.Put_Field (compare_field, sum_bin [n] [CONG_TIME + PREV] * value);
+ group_sum_file.Write ();
+
+ value = sum_bin [n] [COUNT];
+ if (value == 0.0) value = 1.0;
+
+ percent = 100.0 * sum_bin [n] [CONG_TIME] / value;
+
+ group_sum_file.Put_Field (text_field, String ("Percent Time Congested"));
+ group_sum_file.Put_Field (value_field, percent);
+ if (compare_flag) {
+ value = sum_bin [n] [COUNT + PREV];
+ if (value == 0.0) value = 1.0;
+ percent = 100.0 * sum_bin [n] [CONG_TIME + PREV] / value;
+
+ group_sum_file.Put_Field (compare_field, percent);
+ }
+ group_sum_file.Write ();
+ }
+ }
+ }
+}
Modified: version7/branches/aecom/Transims70/LinkSum/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -94,7 +94,11 @@
//---- write the group perf file ----
if (group_sum_flag) {
- Group_Sum_File ();
+ if (group_periods_flag || group_ratios_flag) {
+ Custom_Groups ();
+ } else {
+ Group_Sum_File ();
+ }
}
//---- create speed contour file ----
Modified: version7/branches/aecom/Transims70/LinkSum/Group_Sum_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Group_Sum_File.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/Group_Sum_File.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -128,7 +128,8 @@
sum_bin [j] [MAX_DEN] = MAX (sum_bin [j] [MAX_DEN], data.Max_Density ());
sum_bin [j] [QUEUE] += data.Queue ();
sum_bin [j] [MAX_QUEUE] = MAX (sum_bin [j] [MAX_QUEUE], data.Max_Queue ());
- sum_bin [j] [FAILURE] += data.Failure ();
+ //sum_bin [j] [FAILURE] += data.Failure ();
+ sum_bin [j] [FAILURE] += data.Time ().Seconds ();
sum_bin [j] [COUNT] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -153,7 +154,8 @@
sum_bin [j] [MAX_DEN+PREV] = MAX (sum_bin [j] [MAX_DEN+PREV], data.Max_Density ());
sum_bin [j] [QUEUE+PREV] += data.Queue ();
sum_bin [j] [MAX_QUEUE+PREV] = MAX (sum_bin [j] [MAX_QUEUE+PREV], data.Max_Queue ());
- sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ //sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ sum_bin [j] [FAILURE + PREV] += data.Time ().Seconds ();
sum_bin [j] [COUNT+PREV] += data.Count () * lane_len;
if (Ratio_Flag ()) {
Modified: version7/branches/aecom/Transims70/LinkSum/Group_Summary.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Group_Summary.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/Group_Summary.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -144,7 +144,8 @@
sum_bin [j] [MAX_DEN] = MAX (sum_bin [j] [MAX_DEN], data.Max_Density ());
sum_bin [j] [QUEUE] += data.Queue ();
sum_bin [j] [MAX_QUEUE] = MAX (sum_bin [j] [MAX_QUEUE], data.Max_Queue ());
- sum_bin [j] [FAILURE] += data.Failure ();
+ //sum_bin [j] [FAILURE] += data.Failure ();
+ sum_bin [j] [FAILURE] += data.Time ().Seconds ();
sum_bin [j] [COUNT] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -169,7 +170,8 @@
sum_bin [j] [MAX_DEN+PREV] = MAX (sum_bin [j] [MAX_DEN+PREV], data.Max_Density ());
sum_bin [j] [QUEUE+PREV] += data.Queue ();
sum_bin [j] [MAX_QUEUE+PREV] = MAX (sum_bin [j] [MAX_QUEUE+PREV], data.Max_Queue ());
- sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ //sum_bin [j] [FAILURE+PREV] += data.Failure ();
+ sum_bin [j] [FAILURE+PREV] += data.Time ().Seconds ();
sum_bin [j] [COUNT+PREV] += data.Count () * lane_len;
if (Ratio_Flag ()) {
@@ -268,6 +270,7 @@
Print (1, String ("Number of Roadway %-10.10s %13.2lf") % units % (sum_bin [j] [LENGTH] * factor));
Print (1, String ("Number of Lane %-10.10s %13.2lf") % units % (sum_bin [j] [LANES] * factor));
Print (1, String ("Vehicle %-20.20s %13.2lf") % (units + " of Travel") % (sum_bin [j] [VMT] * factor));
+
if (compare_flag) {
base = sum_bin [j] [VMT+PREV] * factor;
diff = sum_bin [j] [VMT] * factor - base;
@@ -316,10 +319,13 @@
Print (0, String (" %13.2lf %13.2lf (%.2lf%%)") % base % diff % ((base > 0.0) ? (100.0 * diff / base) : 0.0) % FINISH);
}
- Print (1, String ("Average Link Time Ratio %13.2lf") % (sum_bin [j] [TIME_RATIO] / len));
+ length = sum_bin [j] [VMT] * 100.0;
+ if (length == 0.0) length = 1.0;
+
+ Print (1, String ("Average Link Time Ratio %13.2lf") % (sum_bin [j] [TIME_RATIO] / length));
if (compare_flag) {
- base = sum_bin [j] [TIME_RATIO+PREV] / len;
- diff = sum_bin [j] [TIME_RATIO] / len - base;
+ base = sum_bin [j] [TIME_RATIO+PREV] / length;
+ diff = sum_bin [j] [TIME_RATIO] / length - base;
Print (0, String (" %13.2lf %13.2lf (%.2lf%%)") % base % diff % ((base > 0.0) ? (100.0 * diff / base) : 0.0) % FINISH);
}
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -13,7 +13,7 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (0);
+ Version (1);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
@@ -69,6 +69,8 @@
{ NEW_DATA_SUMMARY_RATIOS, "NEW_DATA_SUMMARY_RATIOS", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0, 1.0..5.0", NO_HELP },
{ NEW_GROUP_SUMMARY_FILE, "NEW_GROUP_SUMMARY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_GROUP_SUMMARY_FORMAT, "NEW_GROUP_SUMMARY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { NEW_GROUP_SUMMARY_PERIODS, "NEW_GROUP_SUMMARY_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, " ", TIME_RANGE, NO_HELP},
+ { NEW_GROUP_SUMMARY_RATIOS, "NEW_GROUP_SUMMARY_RATIOS", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0, 1.0..5.0", NO_HELP},
{ NEW_SPEED_CONTOUR_FILE, "NEW_SPEED_CONTOUR_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_SPEED_CONTOUR_FORMAT, "NEW_SPEED_CONTOUR_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ FLIP_SPEED_CONTOUR_OUTPUT, "FLIP_SPEED_CONTOUR_OUTPUT", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
@@ -112,6 +114,7 @@
compare_flag = group_select = summary_flag = group_sum_flag = turn_flag = turn_compare_flag = false;
select_link_flag = activity_flag = zone_flag = group_flag = person_flag = periods_flag = ratios_flag = false;
link_map_flag = compare_perf_flag = skip_link_flag = speed_contour_flag = flip_flag = false;
+ group_periods_flag = group_ratios_flag = false;
nerror = 0;
minimum_volume = 2.0;
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -48,7 +48,8 @@
NEW_LINK_DIRECTION_FILE, NEW_LINK_DIRECTION_FORMAT, NEW_LINK_DIRECTION_FIELD, NEW_LINK_DIRECTION_INDEX,
NEW_LINK_DIRECTION_FLIP, NEW_LINK_DATA_FILE, NEW_LINK_DATA_FORMAT, NEW_LINK_DATA_FIELD,
NEW_DATA_SUMMARY_FILE, NEW_DATA_SUMMARY_FORMAT, NEW_DATA_SUMMARY_PERIODS, NEW_DATA_SUMMARY_RATIOS,
- NEW_GROUP_SUMMARY_FILE, NEW_GROUP_SUMMARY_FORMAT, NEW_SPEED_CONTOUR_FILE, NEW_SPEED_CONTOUR_FORMAT,
+ NEW_GROUP_SUMMARY_FILE, NEW_GROUP_SUMMARY_FORMAT, NEW_GROUP_SUMMARY_PERIODS, NEW_GROUP_SUMMARY_RATIOS,
+ NEW_SPEED_CONTOUR_FILE, NEW_SPEED_CONTOUR_FORMAT,
FLIP_SPEED_CONTOUR_OUTPUT,
};
virtual void Program_Control (void);
@@ -64,7 +65,7 @@
bool select_link_flag, activity_flag, zone_flag, group_flag, person_flag, periods_flag, ratios_flag, compare_perf_flag;
bool compare_flag, group_select, summary_flag, group_sum_flag, turn_flag, turn_compare_flag, link_map_flag, skip_link_flag;
- bool speed_contour_flag, flip_flag, turn_diff_flag;
+ bool speed_contour_flag, flip_flag, turn_diff_flag, group_periods_flag, group_ratios_flag;
int increment, num_inc, nerror;
double header_value, cap_factor, minimum_volume, congested_ratio;
String header_label;
@@ -73,8 +74,8 @@
typedef Doubles_Array::iterator Doubles_Itr;
Doubles_Array sum_bin, zone_vmt, zone_vht;
- Doubles data_ratios;
- Time_Periods data_periods;
+ Doubles data_ratios, group_ratios;
+ Time_Periods data_periods, group_periods;
Performance_File compare_file;
Turn_Delay_File turn_compare_file;
@@ -201,6 +202,7 @@
void Summary_File (void);
void Custom_Summaries (void);
void Group_Sum_File (void);
+ void Custom_Groups (void);
void Speed_Contour (void);
};
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-11-16 14:35:03 UTC (rev 1712)
@@ -162,6 +162,7 @@
<ItemGroup>
<ClCompile Include="Compare_Links.cpp" />
<ClCompile Include="Control.cpp" />
+ <ClCompile Include="Custom_Groups.cpp" />
<ClCompile Include="Custom_Summaries.cpp" />
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Gap_Report.cpp" />
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-11-16 14:35:03 UTC (rev 1712)
@@ -121,5 +121,8 @@
<ClCompile Include="Write_Turn_Diff.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Custom_Groups.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp 2018-08-10 16:45:12 UTC (rev 1711)
+++ version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp 2018-11-16 14:35:03 UTC (rev 1712)
@@ -588,6 +588,39 @@
}
//-----------------------------------------------------------
+// Get_Control_Text - search for a string parameter
+//-----------------------------------------------------------
+
+String Control_Service::Get_Control_Text (int code, bool help)
+{
+ Control_Key *key_ptr = Get_Control_Key (code);
+ if (key_ptr == 0) return ("");
+
+ bool flag;
+ String key, default_value;
+
+ key = Get_Control_String (code);
+
+ if (key.empty ()) {
+ if (key_ptr->value.empty ()) return ("");
+
+ key = key_ptr->value;
+ flag = false;
+ } else {
+ flag = true;
+ }
+
+ //---- print the key message ----
+
+ if (flag) {
+ default_value = key_ptr->key;
+ Print (1, default_value.To_Title ()) << " = " << key;
+ if (help) Print (0, String (" (%s)") % Get_Range_String (code));
+ }
+ return (key);
+}
+
+//-----------------------------------------------------------
// Get_Control_Flag - search for a flag parameter
//-----------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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] |
|
From: subversion c. n. <tra...@li...> - 2018-08-10 16:40:28
|
Revision: 1710
http://sourceforge.net/p/transims/code/1710
Author: davidroden
Date: 2018-08-10 16:40:25 +0000 (Fri, 10 Aug 2018)
Log Message:
-----------
TRANSIMS Version 7.2 - August 2018
SysLib
The overall numbering sequence was updated from 7.1 to 7.2 and all of the program versions were reset to 0. The Release method used in Db_Header to permit derivative applications to utilize version numbers less than 4.0 and avoid the TRANSIMS 4.0 legacy conventions. Additional messages and processing checks were added to the Db_Matrix method. The Smooth option was removed from the convergence averaging options. It was replaced with a separate smoothing method. A full set of DTime variables and functions were added to the User Program interface. A String_Range class was added. VMT, VHT, VHD and CAV are not kept as all cap during a String To_Title conversion.
File_Service
The TOLL_TIME_PERIODS key was removed. The Lane Use file structure was changed to delete toll period fields in favor of individual records for toll time periods. A Toll Function variable was added to enable different dynamic toll functions for different links.
Data_Service
Dynamic_Tolling method was removed and replaced by the Toll Function field in the Lane Use file.
Select_Service
The SELECT_ACCESS_LINKS key and associated methods were added.
Flow_Time_Service
Smooth_Flows method was added.
Convergence_Service
The Smooth_Flows method is now used to implement flow smoothing rather than the averaging method. The Update_Tolls method was modified to use the new Lane Use method of defining toll time periods and toll functions.
Router_Service
The DYNAMIC_TOLL_FUNCTION key was removed and replaced by the new Lane Use toll function codes that reference a User Function number.
ConvertTrips 7.2.1
The input matrix processing was modified to handle matrix files with multiple time periods.
GTFSData 7.2.2
The option to include an input Transit Stop file to reuse existing stop numbers was added. ADD_SCHEDULE_VEHICLE_TYPE key was added to insert a vehicle type code at the beginning of each scheduled run. The program now inherits from Draw_Services to include additional shape processing logic. A Build_Shapes method was added to construct route shapes based on network links if the input GTFS data does not include shape information.
MatrixData 7.2.2
Logic was added to scan the input matrix file or the equivalence file to determine the highest zone numbers when the zone file or the HIGHEST_ZONE_NUMBER key is not provided.
NetPrep 7.2.1
Logic was added to detect local thru and local selection spacing controls.
NewFormat 7.2.1
TOLL_TIME_PERIODS key was removed and VERSION71_LANE_USE_FILE and TOLL_FUNCTION_NUMBER keys were added to convert the Version 7.1 lane use file to the new Lane Use format.
PlanCompare 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanPrep 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanSelect 7.2.1
SELECT_ACCESS_LINKS functionality was added.
PlanSum 7.2.1
SELECT_ACCESS_LINKS functionality was added.
TransitNet 7.2.1
Logic was added to fix or recreate a Transit Driver file based on updated Transit Route data. A bug was fixed in the Node Path tracing to include the first or last link in the path. The ADD_ROUTE_STOPS_FILE logic was significantly expanded to include inserting stops in the middle of a line, adding stops to the beginning of a route and adding stops to the end of a route and updating the interpolating or extrapolating the schedule and driver data appropriately.
Modified Paths:
--------------
version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp
version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp
version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
version7/branches/aecom/Transims70/ArcRider/Control.cpp
version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp
version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
version7/branches/aecom/Transims70/Data_Service/Control.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
version7/branches/aecom/Transims70/File_Service/Control.cpp
version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp
version7/branches/aecom/Transims70/File_Service/Services.cpp
version7/branches/aecom/Transims70/Fratar/Control.cpp
version7/branches/aecom/Transims70/Fratar/Fratar.cpp
version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Control.cpp
version7/branches/aecom/Transims70/GTFSData/Draw_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/Execute.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.hpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj.filters
version7/branches/aecom/Transims70/GTFSData/GTFS_Data.hpp
version7/branches/aecom/Transims70/GTFSData/Read_Stop_Times.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Stops.cpp
version7/branches/aecom/Transims70/GTFSData/Read_Trips.cpp
version7/branches/aecom/Transims70/GridData/GridData.cpp
version7/branches/aecom/Transims70/Include/Data_Range.hpp
version7/branches/aecom/Transims70/Include/Data_Service.hpp
version7/branches/aecom/Transims70/Include/File_Service.hpp
version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_File.hpp
version7/branches/aecom/Transims70/Include/Select_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/User_Program.hpp
version7/branches/aecom/Transims70/IntControl/IntControl.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LocationData/LocationData.cpp
version7/branches/aecom/Transims70/MatrixData/Control.cpp
version7/branches/aecom/Transims70/MatrixData/Expand_Matrix.cpp
version7/branches/aecom/Transims70/MatrixData/MatrixData.cpp
version7/branches/aecom/Transims70/MatrixData/Read_Matrix.cpp
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp
version7/branches/aecom/Transims70/NJFare2/NJFare2.cpp
version7/branches/aecom/Transims70/NetFix/NetFix.cpp
version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
version7/branches/aecom/Transims70/NetPrep/Control.cpp
version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NewFormat/Control.cpp
version7/branches/aecom/Transims70/NewFormat/Execute.cpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.cpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.hpp
version7/branches/aecom/Transims70/NewFormat/NewFormat.vcxproj
version7/branches/aecom/Transims70/NewFormat/NewFormat.vcxproj.filters
version7/branches/aecom/Transims70/PathSkim/PathSkim.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/Progression/Control.cpp
version7/branches/aecom/Transims70/Relocate/Relocate.cpp
version7/branches/aecom/Transims70/RiderSum/Control.cpp
version7/branches/aecom/Transims70/RiderSum/RiderSum.cpp
version7/branches/aecom/Transims70/RoutePrep/RoutePrep.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Control.cpp
version7/branches/aecom/Transims70/Router_Service/Link_Impedance.cpp
version7/branches/aecom/Transims70/Router_Service/Router_Service.cpp
version7/branches/aecom/Transims70/Select_Service/Control.cpp
version7/branches/aecom/Transims70/Select_Service/Select_Plan_Data.cpp
version7/branches/aecom/Transims70/Select_Service/Select_Service.cpp
version7/branches/aecom/Transims70/Select_Service/Services.cpp
version7/branches/aecom/Transims70/Simulator/Simulator.cpp
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.cpp
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/branches/aecom/Transims70/SysLib/Program/Assign.cpp
version7/branches/aecom/Transims70/SysLib/Program/Convert.cpp
version7/branches/aecom/Transims70/SysLib/Program/Execute.cpp
version7/branches/aecom/Transims70/SysLib/Program/Initial_Declare.cpp
version7/branches/aecom/Transims70/SysLib/Program/Initial_Table.cpp
version7/branches/aecom/Transims70/SysLib/Program/Input_Output.cpp
version7/branches/aecom/Transims70/SysLib/Program/Print_Commands.cpp
version7/branches/aecom/Transims70/SysLib/Program/Process_Token.cpp
version7/branches/aecom/Transims70/SysLib/Program/Program_Code.cpp
version7/branches/aecom/Transims70/SysLib/Program/Read_Value.cpp
version7/branches/aecom/Transims70/SysLib/Program/Table.cpp
version7/branches/aecom/Transims70/SysLib/Program/User_Program.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/SysLib.vcxproj
version7/branches/aecom/Transims70/SysLib/SysLib.vcxproj.filters
version7/branches/aecom/Transims70/SysLib/Tools/Data_Range.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Equiv_Data.cpp
version7/branches/aecom/Transims70/SysLib/Tools/String.cpp
version7/branches/aecom/Transims70/TransimsNet/TransimsNet.cpp
version7/branches/aecom/Transims70/TransitNet/Add_Route_Stops.cpp
version7/branches/aecom/Transims70/TransitNet/Control.cpp
version7/branches/aecom/Transims70/TransitNet/Execute.cpp
version7/branches/aecom/Transims70/TransitNet/Node_Path.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.cpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.hpp
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj
version7/branches/aecom/Transims70/TransitNet/TransitNet.vcxproj.filters
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/Validate/Control.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/VissimXML/VissimXML.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/GTFSData/Build_Shapes.cpp
version7/branches/aecom/Transims70/GTFSData/Get_Stop_Data.cpp
version7/branches/aecom/Transims70/NewFormat/Old_Lane_Use_File.cpp
version7/branches/aecom/Transims70/NewFormat/Old_Lane_Use_File.hpp
version7/branches/aecom/Transims70/NewFormat/Read_Old_Lane_Use.cpp
version7/branches/aecom/Transims70/Transims72.sln
version7/branches/aecom/Transims70/TransitNet/Build_Driver.cpp
Removed Paths:
-------------
version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp
Modified: version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp
===================================================================
--- version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/AddLRSData/AddLRSData.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
AddLRSData::AddLRSData (void) : Execution_Service ()
{
Program ("AddLRSData");
- Version (1);
+ Version (0);
Title ("LRS Data Processing");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcJoin/ArcJoin.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcJoin::ArcJoin (void) : Data_Service ()
{
Program ("ArcJoin");
- Version (8);
+ Version (0);
Title ("Join Shapefiles");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcNet/ArcNet.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcNet::ArcNet (void) : Draw_Service ()
{
Program ("ArcNet");
- Version (7);
+ Version (0);
Title ("Generate ArcView Shapefiles from a TRANSIMS Network");
System_File_Type optional_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (11);
+ Version (0);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (6);
+ Version (0);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcRider/ArcRider.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcRider::ArcRider (void) : Draw_Service ()
{
Program ("ArcRider");
- Version (3);
+ Version (0);
Title ("Ridership File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcRider/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcRider/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcRider/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -12,7 +12,7 @@
{
String key;
- //---- set the equivalance flag ----
+ //---- set the equivalence flag ----
Stop_Equiv_Flag (Check_Control_Key (NEW_ARC_STOP_GROUP_FILE));
Line_Equiv_Flag (Check_Control_Key (NEW_ARC_LINE_GROUP_FILE));
Modified: version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ArcSnapshot/ArcSnapshot.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ArcSnapshot::ArcSnapshot (void) : Draw_Service ()
{
Program ("ArcSnapshot");
- Version (1);
+ Version (0);
Title ("Generate ArcView Shapefiles from TRANSIMS Snapshots");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -15,7 +15,7 @@
update_link_gap = gap_flag;
link_gap_data.Clear ();
- if (step_itr->time_averaging == SMOOTH_AVERAGING) {
+ if (Smooth_Flows ()) {
Smooth_Performance ();
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Tolls.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -12,8 +12,8 @@
void Converge_Service::Update_Tolls (bool gap_flag)
{
- int p1, p2, p3, p4, p, toll, old_toll, function, index;
- double ratio, tim_ratio, factor, factor1;
+ int p1, p2, p3, p4, toll, old_toll, function, index;
+ double ratio, tim_ratio, sum_time, sum_time0, factor, factor1;
Dtime low, high;
bool skip;
@@ -23,10 +23,6 @@
Perf_Data *perf_ptr;
Gap_Data data;
- function = Dynamic_Toll_Function ();
-
- if (function == 0) return;
-
skip = (step_itr->toll_averaging == SKIP_AVERAGING);
if (step_itr->toll_averaging == YES_AVERAGING) {
factor = 1.0;
@@ -40,24 +36,26 @@
for (lane_use_itr = lane_use_array.begin (); lane_use_itr != lane_use_array.end (); lane_use_itr++) {
if (lane_use_itr->Max_Rate () > lane_use_itr->Min_Rate ()) {
- p1 = lane_use_array.toll_periods.Period (lane_use_itr->Start ());
- p2 = lane_use_array.toll_periods.Period (lane_use_itr->End () - 1);
- if (p2 < 0) p2 = lane_use_array.toll_periods.Num_Periods () - 1;
+ function = lane_use_itr->Toll_Func ();
+ if (function <= 0) continue;
+ low = lane_use_itr->Start ();
+ high = lane_use_itr->End () - 1;
+
+ p1 = perf_period_array.periods->Period (low);
+ p2 = perf_period_array.periods->Period (high);
+
+ sum_time = sum_time0 = 0;
+
for (; p1 <= p2; p1++) {
- lane_use_array.toll_periods.Period_Range (p1, low, high);
- p = perf_period_array.periods->Period (low, high);
- if (p < 0) continue;
-
- per_ptr = perf_period_array.Period_Ptr (p);
+ per_ptr = perf_period_array.Period_Ptr (p1);
if (per_ptr == 0) continue;
index = lane_use_itr->Dir_Index ();
dir_ptr = &dir_array [index];
- low = dir_ptr->Time0 ();
- if (low == 0) low = 1;
+ sum_time0 += dir_ptr->Time0 ();
if (dir_ptr->Use_Index () >= 0) {
index = dir_ptr->Use_Index ();
@@ -64,17 +62,21 @@
}
perf_ptr = per_ptr->Data_Ptr (lane_use_itr->Dir_Index ());
- tim_ratio = (double) perf_ptr->Time () / low;
+ sum_time += perf_ptr->Time ();
+ }
+ if (sum_time0 > 0.0) {
+ tim_ratio = sum_time / sum_time0;
+
ratio = functions.Apply_Function (function, tim_ratio);
- toll = lane_use_itr->Toll () + lane_use_itr->Min_Rate ();
+ toll = lane_use_itr->Min_Rate ();
if (ratio > 0.0) {
if (ratio > 1.0) ratio = 1.0;
toll += DTOI (ratio * (lane_use_itr->Max_Rate () - lane_use_itr->Min_Rate ()));
}
- old_toll = lane_use_itr->Period_Toll (p1);
+ old_toll = lane_use_itr->Toll ();
if (save_toll_gap && gap_flag) {
data.Add (old_toll, toll);
@@ -81,7 +83,7 @@
if (toll_tod_gap_flag) {
p3 = toll_tod_gap_file.Period (low);
- p4 = toll_tod_gap_file.Period (high - 1);
+ p4 = toll_tod_gap_file.Period (high);
if (p3 < 0 && p4 < 0) continue;
if (p3 < 0) p3 = 0;
@@ -94,7 +96,7 @@
}
if (!skip) {
toll = DTOI ((old_toll * factor + toll) / factor1);
- lane_use_itr->Period_Toll (p1, toll);
+ lane_use_itr->Toll (toll);
}
}
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrip_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -99,7 +99,11 @@
if (trip_file->Max_OD () == 0) {
trip_file->Max_OD (max_zone);
}
- exe->Print (0, " (Zones=") << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ if (trip_file->Num_Periods () > 1) {
+ exe->Print (0, " (Periods=") << trip_file->Num_Periods () << " Zones=" << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ } else {
+ exe->Print (0, " (Zones=") << trip_file->Max_OD () << " Tables=" << trip_file->Tables () << ")";
+ }
}
}
Modified: version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/ConvertTrips.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
ConvertTrips::ConvertTrips (void) : Select_Service ()
{
Program ("ConvertTrips");
- Version (7);
+ Version (1);
Title ("Trip Table Conversion Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp
===================================================================
--- version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/ConvertTrips/Read_Trip_Table.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
void ConvertTrips::Read_Trip_Table (ConvertTrip_Itr group)
{
Dtime tod, low, high, start, end;
- int p, p1, p2, num_p, trp, period, current, first_p, last_p;
+ int p, p1, p2, num_p, trp, period, current, first_p, last_p, per, num_periods;
int total, stat, errors, org_zone, des_zone, org, des, o, d, trips, num, num_shares, even_bucket, even;
bool share_flag, factor_flag, time_fac_flag, scale_flag, return_flag, period_flag, forward;
double trip, factor, added, deleted, bucket;
@@ -31,6 +31,9 @@
added = deleted = 0.0;
file = group->Trip_File ();
+ num_periods = file->Num_Periods ();
+ if (num_periods < 1) num_periods = 1;
+
period_flag = (file->Num_Periods () > 1);
return_flag = group->Return_Flag ();
@@ -57,235 +60,238 @@
forward = false;
- //---- process each origin zone ----
+ for (per = 0; per < num_periods; per++) {
- for (org_itr = org_map->begin (); org_itr != org_map->end (); org_itr++) {
- Show_Progress ();
- org_zone = org_itr->first;
- org = org_itr->second;
+ //---- process each origin zone ----
- if (select_org_zones && !org_zone_range.In_Range (org_zone)) continue;
+ for (org_itr = org_map->begin (); org_itr != org_map->end (); org_itr++) {
+ Show_Progress ();
+ org_zone = org_itr->first;
+ org = org_itr->second;
- //---- read trip matrix ----
+ if (select_org_zones && !org_zone_range.In_Range (org_zone)) continue;
- if (!file->Read_Record (org_zone)) continue;
+ //---- read trip matrix ----
- if (file->Row_Sum (group->Table ()) == 0.0) continue;
+ if (!file->Read_Row (org_zone, per)) continue;
- org_ptr = zone_loc_map.Locations (org_zone);
- forward = !forward;
+ if (file->Row_Sum (group->Table ()) == 0.0) continue;
- //---- process each destination ----
+ org_ptr = zone_loc_map.Locations (org_zone);
+ forward = !forward;
- for (des = -1; ; ) {
- if (forward) {
- if (des == -1) {
- des_itr = des_map->begin ();
+ //---- process each destination ----
+
+ for (des = -1; ; ) {
+ if (forward) {
+ if (des == -1) {
+ des_itr = des_map->begin ();
+ } else {
+ des_itr++;
+ }
+ if (des_itr == des_map->end ()) break;
+
+ des_zone = des_itr->first;
+ des = des_itr->second;
} else {
- des_itr++;
+ if (des == -1) {
+ des_ritr = des_map->rbegin ();
+ } else {
+ des_ritr++;
+ }
+ if (des_ritr == des_map->rend ()) break;
+
+ des_zone = des_ritr->first;
+ des = des_ritr->second;
}
- if (des_itr == des_map->end ()) break;
-
- des_zone = des_itr->first;
- des = des_itr->second;
- } else {
- if (des == -1) {
- des_ritr = des_map->rbegin ();
- } else {
- des_ritr++;
- }
- if (des_ritr == des_map->rend ()) break;
+ if (select_des_zones && !des_zone_range.In_Range (des_zone)) continue;
- des_zone = des_ritr->first;
- des = des_ritr->second;
- }
- if (select_des_zones && !des_zone_range.In_Range (des_zone)) continue;
+ if (!file->Get_Cell (des_zone, group->Table (), trip)) continue;
- if (!file->Get_Cell (des_zone, group->Table (), trip)) continue;
+ if (trip == 0.0) continue;
+ if (trip < 0) {
+ if (trip > -32767 && trip < -0.0001) Warning (String ("Trips from %d to %d are Out of Range (%lf < 0)") % org_zone % des_zone % trip);
+ continue;
+ }
+ des_ptr = zone_loc_map.Locations (des_zone);
- if (trip == 0.0) continue;
- if (trip < 0) {
- if (trip > -32767 && trip < -0.0001) Warning (String ("Trips from %d to %d are Out of Range (%lf < 0)") % org_zone % des_zone % trip);
- continue;
- }
- des_ptr = zone_loc_map.Locations (des_zone);
+ if (period_flag) {
+ period = per;
+ }
- if (period_flag) {
- period = file->Period ();
- }
+ //---- check for a factor period ----
- //---- check for a factor period ----
+ if (time_fac_flag) {
+ if (period >= 0) {
+ first_p = last_p = -1;
- if (time_fac_flag) {
- if (period >= 0) {
- first_p = last_p = -1;
+ for (p = 0; p <= num_p; p++) {
+ tod = group->Diurnal_Period_Time (p);
- for (p = 0; p <= num_p; p++) {
- tod = group->Diurnal_Period_Time (p);
-
- if (group->Factor_Period_Num (tod) == period) {
- if (first_p < 0) first_p = p;
- last_p = p;
+ if (group->Factor_Period_Num (tod) == period) {
+ if (first_p < 0) first_p = p;
+ last_p = p;
+ }
}
- }
- if (last_p < 0) {
+ if (last_p < 0) {
+ first_p = 0;
+ last_p = num_p;
+ period = 0;
+ }
+ } else {
first_p = 0;
last_p = num_p;
period = 0;
}
- } else {
- first_p = 0;
- last_p = num_p;
- period = 0;
}
- }
- //---- apply the scaling factor ----
+ //---- apply the scaling factor ----
- if (scale_flag) {
- trip *= group->Scaling_Factor ();
- }
- if (zone_sum_flag) {
- org_in [org] += trip;
- des_in [des] += trip;
- }
- trip += bucket;
- trips = (int) trip;
- if (trips < 0) trips = 0;
- bucket = trip - trips;
+ if (scale_flag) {
+ trip *= group->Scaling_Factor ();
+ }
+ if (zone_sum_flag) {
+ org_in [org] += trip;
+ des_in [des] += trip;
+ }
+ trip += bucket;
+ trips = (int) trip;
+ if (trips < 0) trips = 0;
+ bucket = trip - trips;
- if (trips == 0) continue;
- total += trips;
+ if (trips == 0) continue;
+ total += trips;
- //---- apply the selection script ----
+ //---- apply the selection script ----
- if (share_flag) {
- group->Diurnal_OD (org_zone, des_zone);
+ if (share_flag) {
+ group->Diurnal_OD (org_zone, des_zone);
- num = group->Execute_Diurnal ();
+ num = group->Execute_Diurnal ();
- if (num < 1 || num > num_shares) {
- Error (String ("Diurnal Selection Value %d is Out of Range (1..%d)") % num % num_shares);
+ if (num < 1 || num > num_shares) {
+ Error (String ("Diurnal Selection Value %d is Out of Range (1..%d)") % num % num_shares);
+ }
+ num--;
+ } else {
+ num = 0;
}
- num--;
- } else {
- num = 0;
- }
- //---- get the travel time ----
+ //---- get the travel time ----
- if (skim_flag) {
- o = skim_file->Org_Index (org_zone);
- d = skim_file->Des_Index (des_zone);
+ if (skim_flag) {
+ o = skim_file->Org_Index (org_zone);
+ d = skim_file->Des_Index (des_zone);
- if (o >= 0 && d >= 0) {
- skim_ptr = skim_file->Time_Skim (o, d);
- } else {
- skim_ptr = 0;
+ if (o >= 0 && d >= 0) {
+ skim_ptr = skim_file->Time_Skim (o, d);
+ } else {
+ skim_ptr = 0;
+ }
}
- }
- //---- apply adjustment factors ----
+ //---- apply adjustment factors ----
- if (factor_flag) {
- o = (equiv_flag) ? zone_equiv.Zone_Group (org_zone) : org_zone;
- d = (equiv_flag) ? zone_equiv.Zone_Group (des_zone) : des_zone;
+ if (factor_flag) {
+ o = (equiv_flag) ? zone_equiv.Zone_Group (org_zone) : org_zone;
+ d = (equiv_flag) ? zone_equiv.Zone_Group (des_zone) : des_zone;
- if (time_fac_flag) {
- period = -1;
- p1 = p2 = 0;
- trip = 0.0;
+ if (time_fac_flag) {
+ period = -1;
+ p1 = p2 = 0;
+ trip = 0.0;
- for (p = first_p; p <= last_p; p++) {
- tod = group->Diurnal_Period_Time (p);
+ for (p = first_p; p <= last_p; p++) {
+ tod = group->Diurnal_Period_Time (p);
- current = group->Factor_Period_Num (tod);
+ current = group->Factor_Period_Num (tod);
- if (current != period) {
- if (period >= 0) {
- period_fac = group->Period_Factor (o, d, period);
+ if (current != period) {
+ if (period >= 0) {
+ period_fac = group->Period_Factor (o, d, period);
- factor = trip * period_fac->Factor ();
- if (factor > trip) {
- added += factor - trip;
- } else {
- deleted += trip - factor;
- }
- trp = period_fac->Bucket_Factor (trip);
+ factor = trip * period_fac->Factor ();
+ if (factor > trip) {
+ added += factor - trip;
+ } else {
+ deleted += trip - factor;
+ }
+ trp = period_fac->Bucket_Factor (trip);
- if (trp > 0 && return_flag) {
- even = (((trp + even_bucket) / 2) * 2);
- even_bucket += trp - even;
- trp = even;
- }
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+ if (trp > 0 && return_flag) {
+ even = (((trp + even_bucket) / 2) * 2);
+ even_bucket += trp - even;
+ trp = even;
+ }
+ if (trp > 0) {
+ stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
- if (stat > 0) {
- errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ if (stat > 0) {
+ errors += stat;
+ Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
+ }
}
}
+ period = current;
+ p1 = p;
+ trip = 0.0;
}
- period = current;
+ trip += trips * group->Share (p, num);
+ p2 = p;
+ }
+
+ } else {
+ p1 = first_p;
+ p2 = last_p;
+ trip = trips;
+ }
+ period_fac = group->Period_Factor (o, d, period);
+
+ factor = trip * period_fac->Factor ();
+ if (factor > trip) {
+ added += factor - trip;
+ } else {
+ deleted += trip - factor;
+ }
+ trp = period_fac->Bucket_Factor (trip);
+ } else if (period >= 0) {
+ p1 = p2 = -1;
+ file->Period_Range (period, start, end);
+
+ for (p = first_p; p <= last_p; p++) {
+ group->Diurnal_Time_Range (p, low, high);
+
+ if (low <= start && start <= high) {
p1 = p;
- trip = 0.0;
}
- trip += trips * group->Share (p, num);
- p2 = p;
+ if (low <= end && end <= high) {
+ p2 = p;
+ }
+ if (p1 >= 0 && p2 >= 0) break;
}
-
+ trp = trips;
} else {
p1 = first_p;
p2 = last_p;
- trip = trips;
+ trp = trips;
}
- period_fac = group->Period_Factor (o, d, period);
-
- factor = trip * period_fac->Factor ();
- if (factor > trip) {
- added += factor - trip;
- } else {
- deleted += trip - factor;
+ if (trp > 0 && return_flag) {
+ even = (((trp + even_bucket) / 2) * 2);
+ even_bucket += trp - even;
+ trp = even;
}
- trp = period_fac->Bucket_Factor (trip);
- } else if (period >= 0) {
- p1 = p2 = -1;
- file->Period_Range (period, start, end);
- for (p = first_p; p <= last_p; p++) {
- group->Diurnal_Time_Range (p, low, high);
+ //---- process the trips ----
- if (low <= start && start <= high) {
- p1 = p;
+ if (trp > 0) {
+ stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
+
+ if (stat > 0) {
+ errors += stat;
+ Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
}
- if (low <= end && end <= high) {
- p2 = p;
- }
- if (p1 >= 0 && p2 >= 0) break;
}
- trp = trips;
- } else {
- p1 = first_p;
- p2 = last_p;
- trp = trips;
}
- if (trp > 0 && return_flag) {
- even = (((trp + even_bucket) / 2) * 2);
- even_bucket += trp - even;
- trp = even;
- }
-
- //---- process the trips ----
-
- if (trp > 0) {
- stat = Set_Trips (group, org, des, trp, num, p1, p2, return_flag);
-
- if (stat > 0) {
- errors += stat;
- Print (1, String (error_msg) % stat % ((stat > 1) ? "s " : " ") % org_zone % des_zone);
- }
- }
}
}
End_Progress (clock ());
Modified: version7/branches/aecom/Transims70/Data_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -203,18 +203,6 @@
}
}
- //---- dynamic toll function ----
-
- if (Control_Key_Status (DYNAMIC_TOLL_FUNCTION)) {
- key = Get_Control_Text (DYNAMIC_TOLL_FUNCTION);
-
- if (!key.empty ()) {
- toll_function = functions.Max_Function () + 1;
-
- functions.Add_Function (toll_function, key, false);
- }
- }
-
//---- parking penalty function ----
if (Control_Key_Status (PARKING_DEMAND_TYPE)) {
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -29,6 +29,7 @@
Bearing_Warnings (false);
Detector_Flag (true);
Zone_Loc_Flag (false);
+ Dynamic_Tolling (false);
Congested_Ratio (Round (300));
Maximum_Time_Ratio (300);
@@ -38,7 +39,7 @@
perf_veh_type_map.assign (25, 0);
fare_flag = false;
- num_fare_zone = num_lane_flows = toll_function = 0;
+ num_fare_zone = num_lane_flows = 0;
turn_shape_setback = TURN_SHAPE_SETBACK;
dat = this;
@@ -63,7 +64,6 @@
{ ZONE_LOCATION_MAP_FILE, "ZONE_LOCATION_MAP_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ ROUTE_MODE_MAP, "ROUTE_MODE_MAP", LEVEL1, OPT_KEY, LIST_KEY, "1=BUS", "#=BUS, #=EXPRESS, #=BRT, #=STREETCAR, #=LRT, #=RAPIDRAIL, #=REGIONRAIL", NO_HELP },
{ MODE_VEH_TYPE_MAP, "MODE_VEH_TYPE_MAP", LEVEL1, OPT_KEY, LIST_KEY, "BUS=4", "BUS=4, EXPRESS=5, BRT=6, STREETCAR=7, LRT=8, RAPIDRAIL=9, REGIONRAIL=10", NO_HELP },
- { DYNAMIC_TOLL_FUNCTION, "DYNAMIC_TOLL_FUNCTION", LEVEL0, OPT_KEY, TEXT_KEY, "", "TYPE, A, B, C, D", NO_HELP },
{ PARKING_DEMAND_TYPE, "PARKING_DEMAND_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "CAPACITY", "ALL, CAPACITY, PARKRIDE, TRANSIT", NO_HELP },
{ PARKING_PENALTY_FUNCTION, "PARKING_PENALTY_FUNCTION", LEVEL0, OPT_KEY, TEXT_KEY, "", "TYPE, A, B, C, D", NO_HELP },
END_CONTROL
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj 2018-08-10 16:40:25 UTC (rev 1710)
@@ -91,7 +91,6 @@
<ClCompile Include="Gap_Data.cpp" />
<ClCompile Include="Internal_External.cpp" />
<ClCompile Include="Lane_Services.cpp" />
- <ClCompile Include="Lane_Use_Data.cpp" />
<ClCompile Include="Line_Data.cpp" />
<ClCompile Include="Park_Demand_Data.cpp" />
<ClCompile Include="Performance_Data.cpp" />
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.vcxproj.filters 2018-08-10 16:40:25 UTC (rev 1710)
@@ -508,9 +508,6 @@
<ClCompile Include="Vehicle_Index.cpp">
<Filter>Source Files\Data</Filter>
</ClCompile>
- <ClCompile Include="Lane_Use_Data.cpp">
- <Filter>Source Files\Data</Filter>
- </ClCompile>
<ClCompile Include="Turn_Delay_Data.cpp">
<Filter>Source Files\Data</Filter>
</ClCompile>
Deleted: version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Lane_Use_Data.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -1,77 +0,0 @@
-//*********************************************************
-// Lane_Use_Data.cpp - lane use data process
-//*********************************************************
-
-#include "Lane_Use_Data.hpp"
-#include "Data_Service.hpp"
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-int Lane_Use_Data::Toll (Dtime tod)
-{
- if (tolls.size () == 0 || tod < start || tod > end) return (0);
-
- int period = dat->lane_use_array.toll_periods.Period (tod);
- if (period < 0) {
- period = dat->toll_time_periods.Period (tod);
- if (period < 0) return (0);
- }
- return (Period_Toll (period));
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-int Lane_Use_Data::Period_Toll (int period)
-{
- if (period < 0 || period >= (int) tolls.size ()) return (Toll () + Min_Rate ());
- return (tolls [period]);
-}
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Toll (Dtime tod, int value)
-{
- if (tod < start || tod > end) return;
-
- int period = dat->lane_use_array.toll_periods.Period (tod);
- if (period < 0) {
- period = dat->toll_time_periods.Period (tod);
- if (period < 0) return;
- }
- Period_Toll (period, value);
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Period_Toll (int period, int value)
-{
- if (period >= 0 && period < (int) tolls.size ()) {
- tolls [period] = (short) value;
- }
-}
-
-//-----------------------------------------------------------
-// Initialize_Tolls
-//-----------------------------------------------------------
-
-void Lane_Use_Data::Initialize_Tolls (void)
-{
- int num_periods = dat->lane_use_array.toll_periods.Num_Periods ();
-
- if (num_periods > 0) {
- tolls.assign (num_periods, 0);
-
- int p1 = dat->lane_use_array.toll_periods.Period (start);
- int p2 = dat->lane_use_array.toll_periods.Period (end - 1);
-
- for (; p1 <= p2; p1++) {
- tolls [p1] = (short) (Toll () + Min_Rate ());
- }
- }
-}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -66,6 +66,10 @@
lane_use_ptr->Next_Index (dir_ptr->First_Lane_Use ());
dir_ptr->First_Lane_Use (num);
+
+ if (lane_use_ptr->Max_Rate () > 0 && lane_use_ptr->Toll_Func () > 0) {
+ Dynamic_Tolling (true);
+ }
}
//----- identify time period restrictions ----
@@ -247,12 +251,6 @@
}
int percent = System_Data_Reserve (LANE_USE);
- if (file.toll_periods.Num_Periods () > toll_time_periods.Num_Periods ()) {
- lane_use_array.toll_periods = file.toll_periods;
- } else {
- lane_use_array.toll_periods = toll_time_periods;
- }
-
if (lane_use_array.capacity () == 0 && percent > 0) {
int num = file.Num_Records ();
@@ -455,18 +453,14 @@
lane_use_rec.Max_Rate (DTOI (rate));
}
+ if (lane_use_rec.Max_Rate () < lane_use_rec.Min_Rate ()) {
+ Warning (String ("Lane Use %d Toll Rate Range is Illegal") % Progress_Count ());
+ }
+ lane_use_rec.Toll_Func (file.Toll_Func ());
- if (lane_use_rec.Max_Rate () > lane_use_rec.Min_Rate () || file.toll_periods.Num_Periods () > 0) {
- lane_use_rec.Initialize_Tolls ();
-
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- int toll = Round (file.Period_Toll (i));
- if (toll > lane_use_rec.Period_Toll (i)) {
- lane_use_rec.Period_Toll (i, toll);
- }
- }
+ if (lane_use_rec.Toll_Func () > 0 && !exe->functions.Function_Check (lane_use_rec.Toll_Func ())) {
+ Warning (String ("Lane Use %d Toll Function %d was Not Found") % Progress_Count () % lane_use_rec.Toll_Func ());
}
-
lane_use_rec.Min_Delay (file.Min_Delay ());
lane_use_rec.Max_Delay (file.Max_Delay ());
lane_use_rec.Speed (file.Speed ());
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Lane_Uses.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -158,17 +158,7 @@
}
file.Max_Rate (rate);
- if (data.Max_Rate () > data.Min_Rate ()) {
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- Dtime tod = file.toll_periods.Period_Time (i);
- rate = UnRound (data.Toll (tod));
- file.Period_Toll (i, rate);
- }
- } else {
- for (int i = 0; i < file.toll_periods.Num_Periods (); i++) {
- file.Period_Toll (i, 0.0);
- }
- }
+ file.Toll_Func (data.Toll_Func ());
file.Min_Delay (UnRound (data.Min_Delay ()));
file.Max_Delay (UnRound (data.Max_Delay ()));
Modified: version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
FileFormat::FileFormat (void) : Execution_Service ()
{
Program ("FileFormat");
- Version (7);
+ Version (0);
Title ("File Format Conversion");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/File_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -34,13 +34,6 @@
} else {
Volume_Data_Type (VOLUME_DATA);
}
- if (Control_Key_Status (TOLL_TIME_PERIODS)) {
- key = Get_Control_String (TOLL_TIME_PERIODS);
-
- if (!key.empty ()) {
- toll_time_periods.Add_Breaks (key);
- }
- }
if (Control_Key_Status (TRANSIT_TIME_PERIODS)) {
key = Get_Control_String (TRANSIT_TIME_PERIODS);
@@ -156,25 +149,6 @@
case LANE_USE:
case NEW_LANE_USE:
file->file = new Lane_Use_File (key, file->access, format);
- if (i == NEW_LANE_USE) {
- Lane_Use_File *use_file = (Lane_Use_File *) file->file;
-
- if (!Control_Key_Empty (TOLL_TIME_PERIODS)) {
- use_file->Clear_Fields ();
- use_file->toll_periods.Copy_Periods (toll_time_periods);
- use_file->Create_Fields ();
- use_file->Write_Header ();
- Print (1);
- } else if (toll_time_periods.Num_Periods () > 0) {
- use_file->Clear_Fields ();
- use_file->toll_periods.Copy_Periods (toll_time_periods);
- use_file->Create_Fields ();
- use_file->Write_Header ();
- }
- } else if (Control_Key_Empty (TOLL_TIME_PERIODS)) {
- Lane_Use_File *use_file = (Lane_Use_File *) file->file;
- toll_time_periods.Copy_Periods (use_file->toll_periods);
- }
break;
case CONNECTION:
turn_delay = turn_perf = true;
@@ -385,10 +359,6 @@
if (!Control_Key_Empty (VOLUME_DATA_TYPE)) Print (1);
Get_Control_Text (VOLUME_DATA_TYPE);
}
- if (Control_Key_Status (TOLL_TIME_PERIODS) && !System_File_Flag (NEW_LANE_USE)) {
- if (!Control_Key_Empty (TOLL_TIME_PERIODS)) Print (1);
- key = Get_Control_Text (TOLL_TIME_PERIODS);
- }
if (Control_Key_Status (TRANSIT_TIME_PERIODS) && !System_File_Flag (NEW_ROUTE_NODES)) {
if (!Control_Key_Empty (TRANSIT_TIME_PERIODS)) Print (1);
key = Get_Control_Text (TRANSIT_TIME_PERIODS);
Modified: version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Lane_Use_File.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -55,10 +55,6 @@
bool Lane_Use_File::Create_Fields (void)
{
- int i;
- String name;
- Dtime low, high;
-
Clear_Fields ();
Add_Field ("LINK", DB_INTEGER, 10);
@@ -83,6 +79,7 @@
Add_Field ("TOLL", DB_DOUBLE, 2.1, CENTS, true);
Add_Field ("MIN_RATE", DB_DOUBLE, 4.1, CENT_MI, true);
Add_Field ("MAX_RATE", DB_DOUBLE, 4.1, CENT_MI, true);
+ Add_Field ("TOLL_FUNC", DB_INTEGER, 2, NO_UNITS, true);
Add_Field ("MIN_DELAY", DB_DOUBLE, 8.1, SECONDS);
Add_Field ("MAX_DELAY", DB_DOUBLE, 8.1, SECONDS);
Add_Field ("SPEED", DB_DOUBLE, 5.1, MPH);
@@ -90,11 +87,6 @@
Add_Field ("CAPACITY", DB_UNSIGNED, 8, VPH);
Add_Field ("CAP_FAC", DB_DOUBLE, 6.2);
- for (i = 0; i < toll_periods.Num_Periods (); i++) {
- toll_periods.Period_Range (i, low, high);
- name = "TOLL_" + low.Time_Label (HOUR_MINUTE);
- Add_Field (name, DB_DOUBLE, 4.1, CENTS, true);
- }
if (exe->Notes_Name_Flag ()) {
Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
}
@@ -129,6 +121,7 @@
toll = Optional_Field ("TOLL", "COST", "CENTS");
min_rate = Optional_Field ("MIN_RATE", "MIN_TOLL", "TOLL_RATE", "RATE", "COST_RATE");
max_rate = Optional_Field ("MAX_RATE", "MAX_TOLL", "MAX_COST");
+ toll_func = Optional_Field ("TOLL_FUNC", "FUNCTION", "TOLL_RATIO");
min_delay = Optional_Field ("MIN_DELAY", "FIXED", "DELAY");
max_delay = Optional_Field ("MAX_DELAY", "VARIABLE", "RANDOM");
speed = Optional_Field ("SPEED", "SPEEDLMT", "SPD", "MAXSPD", "FSPD");
@@ -136,35 +129,6 @@
capacity = Optional_Field ("CAP", "CAPACITY");
cap_fac = Optional_Field ("CAP_FAC", "CAPACITY_FACTOR", "CAP_FACTOR");
- toll_periods.Clear ();
-
- int i;
- Field_Ptr fld_ptr;
- String name, breaks;
- Dtime time;
-
- for (i = 0; i < Num_Fields (); i++) {
- if (i == toll || i == min_rate) continue;
-
- fld_ptr = Field (i);
- name = fld_ptr->Name ();
-
- if (name.Starts_With ("TOLL_")) {
- name.erase (0, 5);
- time.Time_Label (name, HOUR_MINUTE);
-
- if (breaks.size () > 0) {
- breaks += ", ";
- }
- breaks += time.Time_String (HOUR_CLOCK);
-
- tolls.push_back (i);
- Set_Units (i, CENTS);
- }
- }
- if (breaks.size () > 0) {
- toll_periods.Add_Breaks (breaks);
- }
dir = LinkDir_Type_Field ();
Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
@@ -207,45 +171,3 @@
return (true);
}
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-double Lane_Use_File::Toll (Dtime tod)
-{
- int period = toll_periods.Period (tod);
- if (period < 0) return (0);
-
- return (Get_Double (tolls [period]));
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-double Lane_Use_File::Period_Toll (int period)
-{
- if (period < 0 || period >= toll_periods.Num_Periods ()) return (0);
- return (Get_Double (tolls [period]));
-}
-
-//-----------------------------------------------------------
-// Toll
-//-----------------------------------------------------------
-
-void Lane_Use_File::Toll (Dtime tod, double value)
-{
- int period = toll_periods.Period (tod);
- if (period >= 0) {
- Put_Field (tolls [period], value);
- }
-}
-//-----------------------------------------------------------
-// Period_Toll
-//-----------------------------------------------------------
-
-void Lane_Use_File::Period_Toll (int period, double value)
-{
- if (period >= 0 && period < toll_periods.Num_Periods ()) {
- Put_Field (tolls [period], value);
- }
-}
Modified: version7/branches/aecom/Transims70/File_Service/Services.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Services.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/File_Service/Services.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -148,8 +148,6 @@
{ SAVE_LANE_USE_FLOWS, "SAVE_LANE_USE_FLOWS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ VOLUME_DATA_TYPE, "VOLUME_DATA_TYPE", LEVEL0, OPT_KEY, TEXT_KEY, "VOLUME", VOLUME_FIELD_RANGE, NO_HELP },
- { TOLL_TIME_PERIODS, "TOLL_TIME_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, "NONE", TIME_BREAK_RANGE, NO_HELP },
-
{ TRANSIT_TIME_PERIODS, "TRANSIT_TIME_PERIODS", LEVEL0, OPT_KEY, TEXT_KEY, "NONE", TIME_BREAK_RANGE, NO_HELP },
{ ROUTE_NODE_OFFSET_FLAG, "ROUTE_NODE_OFFSET_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ ROUTE_NODE_RUN_TIME_FLAG, "ROUTE_NODE_RUN_TIME_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
Modified: version7/branches/aecom/Transims70/Fratar/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Fratar/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Fratar/Control.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -313,7 +313,7 @@
if (!key.empty ()) {
margin_ptr->zone_equiv = new Zone_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Origin Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Origin Equivalence File");
margin_ptr->zone_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
@@ -419,7 +419,7 @@
if (!key.empty ()) {
margin_ptr->zone_equiv = new Zone_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Destination Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Destination Equivalence File");
margin_ptr->zone_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
@@ -527,7 +527,7 @@
if (!key.empty ()) {
margin_ptr->time_equiv = new Time_Equiv ();
- margin_ptr->zone_equiv->File_Type ("Period Equivalance File");
+ margin_ptr->zone_equiv->File_Type ("Period Equivalence File");
margin_ptr->time_equiv->Open (Project_Filename (key));
margin_ptr->equiv_flag = true;
}
Modified: version7/branches/aecom/Transims70/Fratar/Fratar.cpp
===================================================================
--- version7/branches/aecom/Transims70/Fratar/Fratar.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/Fratar/Fratar.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -11,7 +11,7 @@
Fratar::Fratar (void) : Data_Service ()
{
Program ("Fratar");
- Version (1);
+ Version (0);
Title ("Trip Table Factoring");
int data_service_keys [] = {
Modified: version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-07-08 18:32:12 UTC (rev 1709)
+++ version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-08-10 16:40:25 UTC (rev 1710)
@@ -10,9 +10,9 @@
void GTFSData::Build_Routes (void)
{
- int dir, line, index, service, link, link_dir, last_dir, last_node, last_link, best_dir, best_link, best_node, join_node;
+ int dir, line, index, service, link, link_dir, last_dir, last_node, last_link, best_dir, best_link, best_node, join_node, stop_index;
double distance, diff, offset, diff1, diff2, off1, off2, best_diff, best_offset;
- String route;
+ String route, sign;
bool new_route, new_stops;
XY_Points *xy_ptr;
XY_Point point, pt1, pt2;
@@ -41,7 +41,11 @@
Link_Data *link_ptr;
Link_Itr link_itr;
Node_Data *node_ptr;
+ Point_Map_Itr stop_pt_itr;
+ Int2_Map_Itr int2_itr;
+ Integers *list_ptr;
+
//---- draw GTFS routes ----
Show_Message (1, "Building TRANSIMS Routes -- Record");
@@ -55,253 +59,256 @@
for (route_itr = gtfs_route_array.begin (); route_itr != gtfs_route_array.end (); route_itr++) {
Show_Progress ();
- new_route = !route.Equals (route_itr->ID ());
+ for (int2_itr = route_itr->route_dir.begin (); int2_itr != route_itr->route_dir.end (); int2_itr++) {
+ route = route_itr->Code ();
+ route += " to ";
+ route += head_sign [int2_itr->first.first];
- //---- process each trip ----
+ list_ptr = &trip_list [int2_itr->second];
- for (trip_itr = route_itr->trip_list.begin (); trip_itr != route_itr->trip_list.end (); trip_itr++) {
- trip_ptr = >fs_trip_array [*trip_itr];
+ //---- initialize a new route ----
- if (new_route || trip_ptr->Dir () != dir || trip_ptr->Service () != service) {
+ line_data.Clear ();
+ line_data.Route (line++);
+ line_data.Mode (mode_map [route_itr->Type ()]);
+ line_data.Type (type_map [route_itr->Type ()] - 1);
+ line_data.Name (route);
+ line_data.Notes (route_itr->Name ());
- //---- save the current route ----
+ new_stops = true;
+ xy_ptr = 0;
+ stop_list.clear ();
- if (line_data.Route () > 0) {
- index = (int) line_array.size ();
- map_stat = line_map.insert (Int_Map_Data (line_data.Route (), index));
+ //---- process each trip ----
- if (!map_stat.second) {
- Warning (String ("Inserting Route %d") % line_data.Route ());
- } else {
- line_array.push_back (line_data);
+ for (trip_itr = list_ptr->begin (); trip_itr != list_ptr->end (); trip_itr++) {
+ trip_ptr = >fs_trip_array [*trip_itr];
+
+ if (new_stops) {
+
+ //---- get the trip shape ----
+
+ if (trip_ptr->Shape () >= 0) {
+ shape_ptr = >fs_shape_array [trip_ptr->Shape ()];
+ xy_ptr = &shape_ptr->point_array;
}
}
- //---- initialize a new route ----
+ //---- save the vehicle types ----
- line_data.Clear ();
- line_data.Route (line++);
- line_data.Mode (mode_map [route_itr->Type ()]);
- line_data.Type (type_map [route_itr->Type ()]);
- line_data.Name (route_itr->Code ());
- line_data.Notes (route_itr->Name ());
+ if (schedule_veh_type > 0) {
+ line_data.Add_Run_Type (schedule_veh_type);
+ }
- route = route_itr->ID ();
- dir = trip_ptr->Dir ();
- service = trip_ptr->Service ();
- new_route = false;
- new_stops = true;
- stop_list.clear ();
+ //---- process each stop on the trip ----
- //---- get the trip shape ----
+ for (stop_time_itr = trip_ptr->stop_time_map.begin (); stop_time_itr != trip_ptr->stop_time_map.end (); stop_time_itr++) {
+ stop_time_ptr = &stop_time_itr->second;
+ stop_index = stop_time_ptr->Stop ();
- if (trip_ptr->Shape () >= 0) {
- shape_ptr = >fs_shape_array [trip_ptr->Shape ()];
- xy_ptr = &shape_ptr->point_array;
- } else {
- xy_ptr = 0;
- }
- }
+ gtfs_stop_ptr = >fs_stop_array [stop_index];
- //---- process each stop on the trip ----
+ if (input_stops) {
+ stop_index = gtfs_stop_ptr->Stop ();
+ }
- for (stop_time_itr = trip_ptr->stop_time_map.begin (); stop_time_itr != trip_ptr->stop_time_map.end (); stop_time_itr++) {
- stop_time_ptr = &stop_time_itr->second;
+ distance = stop_time_ptr->Distance ();
- distance = stop_time_ptr->Distance ();
+ //---- build the stop list ----
- //---- build the stop list ----
+ if (new_stops) {
+ if (!input_stops && xy_ptr != 0) {
+ stop_ptr = &stop_array [stop_index];
- if (new_stops) {
- if (xy_ptr != 0) {
- stop_ptr = &stop_array [stop_time_ptr->Stop ()];
+ if (stop_ptr->Space () == 0) {
- //---- create a TRANSIMS stop ----
+ //---- create a TRANSIMS stop ----
- if (stop_ptr->Space () == 0) {
+ point.x = gtfs_stop_ptr->X ();
+ point.y = gtfs_stop_ptr->Y ();
- gtfs_stop_ptr = >fs_stop_array [stop_time_ptr->Stop ()];
- point.x = gtfs_stop_ptr->X ();
- point.y = gtfs_stop_ptr->Y ();
+ box = Shape_Tools::Buffer_Box (point, buffer);
- box = Shape_Tools::Buffer_Box (point, buffer);
+ Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
- Shape_Tools::Point_Shape_Distance_Offset (point, *xy_ptr, distance);
+ Offset_Points (*xy_ptr, distance - 150.0, 300.0, pt1, pt2);
- Offset_Points (*xy_ptr, distance - 150.0, 300.0, pt1, pt2);
+ //---- find the best link ----
- //---- find the best link ----
+ link = link_dir = -1;
+ best_diff = best_offset = buffer;
+ offset = off1 = off2 = 0;
- link = link_dir = -1;
- best_diff = best_offset = buffer;
- offset = off1 = off2 = 0;
+ for (shape_itr = link_shapes.begin (); shape_itr != link_shapes.end (); shape_itr++) {
+ if (Shape_Tools::In_Range (shape_itr->box, box)) {
+ diff = Shape_Tools::Point_Shape_Distance_Offset (point, shape_itr->shape, offset);
- for (shape_itr = link_shapes.begin (); shape_itr != link_shapes.end (); shape_itr++) {
- if (Shape_Tools::In_Range (shape_itr->box, box)) {
- diff = Shape_Tools::Point_Shape_Distance_Offset (point, shape_itr->shape, offset);
+ if (diff < buffer) {
+ diff1 = Shape_Tools::Point_Shape_Distance_Offset (pt1, shape_itr->shape, off1);
+ diff2 = Shape_Tools::Point_Shape_Distance_Offset (pt2, shape_itr->shape, off2);
- if (diff < buffer) {
- diff1 = Shape_Tools::Point_Shape_Distance_Offset (pt1, shape_itr->shape, off1);
- diff2 = Shape_Tools::Point_Shape_Distance_Offset (pt2, shape_itr->shape, off2);
-
- if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
- if (diff < best_diff) {
- best_diff = diff;
- best_offset = offset;
- link = shape_itr->link;
- link_dir = shape_itr->dir;
+ if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
+ if (diff < best_diff) {
+ best_diff = diff;
+ best_offset = offset;
+ link = shape_itr->link;
+ link_dir = shape_itr->dir;
+ }
}
}
}
}
- }
- if (link < 0) continue;
+ if (link < 0) continue;
- stop_ptr->Link (link);
- stop_ptr->Dir (link_dir);
- stop_ptr->Offset (Round (best_offset));
- stop_ptr->Space (1);
+ stop_ptr->Link (link);
...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-07-08 18:32:14
|
Revision: 1709
http://sourceforge.net/p/transims/code/1709
Author: davidroden
Date: 2018-07-08 18:32:12 +0000 (Sun, 08 Jul 2018)
Log Message:
-----------
TRANSIMS Version 7.1 -- updated from AECOM branch 1708
Modified Paths:
--------------
version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
version7/trunk/Transims70/Converge_Service/Iteration_Output.cpp
version7/trunk/Transims70/Converge_Service/Step_Output.cpp
version7/trunk/Transims70/Data_Service/Lane_Services.cpp
version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/trunk/Transims70/Data_Service/Read_Link_Data.cpp
version7/trunk/Transims70/Data_Service/Read_Link_Dir.cpp
version7/trunk/Transims70/Data_Service/Write_Link_Data.cpp
version7/trunk/Transims70/Data_Service/Write_Volume_Speeds.cpp
version7/trunk/Transims70/File_Service/File_Service.vcxproj
version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
version7/trunk/Transims70/File_Service/Link_Data_File.cpp
version7/trunk/Transims70/File_Service/Link_Dir_File.cpp
version7/trunk/Transims70/Include/Db_Header.hpp
version7/trunk/Transims70/Include/Db_Matrix.hpp
version7/trunk/Transims70/Include/Execution_Service.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/Turn_Delay_Data.hpp
version7/trunk/Transims70/Include/TypeDefs.hpp
version7/trunk/Transims70/Include/Volume_Speed_Data.hpp
version7/trunk/Transims70/LinkSum/Control.cpp
version7/trunk/Transims70/LinkSum/Execute.cpp
version7/trunk/Transims70/LinkSum/LinkSum.cpp
version7/trunk/Transims70/LinkSum/LinkSum.hpp
version7/trunk/Transims70/LinkSum/LinkSum.vcxproj
version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters
version7/trunk/Transims70/LinkSum/Write_Turn_Data.cpp
version7/trunk/Transims70/NetPrep/Control.cpp
version7/trunk/Transims70/NetPrep/Input_Links.cpp
version7/trunk/Transims70/NetPrep/Input_Nodes.cpp
version7/trunk/Transims70/NetPrep/NetPrep.cpp
version7/trunk/Transims70/NetPrep/NetPrep.hpp
version7/trunk/Transims70/PlanPrep/Control.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.cpp
version7/trunk/Transims70/PlanPrep/PlanPrep.hpp
version7/trunk/Transims70/PlanPrep/Process_Plan.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/PlanSelect/Read_Vol_Cnt.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/trunk/Transims70/SysLib/Service/Convert_Service.cpp
version7/trunk/Transims70/SysLib/Service/Message_Service.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/Tools/Functions.cpp
version7/trunk/Transims70/Validate/Validate.cpp
version7/trunk/Transims70/Validate/Write_Vol_Cnt.cpp
version7/trunk/Transims70/Validate/Write_Vol_Spd_Diff.cpp
version7/trunk/Transims70/Validate/Write_Volume.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.cpp
version7/trunk/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/trunk/Transims70/File_Service/Turn_Diff_File.cpp
version7/trunk/Transims70/Include/Turn_Diff_File.hpp
version7/trunk/Transims70/LinkSum/Write_Turn_Diff.cpp
Modified: version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -11,7 +11,7 @@
void ArcPerf::Write_Performance (void)
{
int dir, period, index, use_index, num;
- double length, speed;
+ double length; // , speed;
Dtime low, high, time, delay;
String buffer;
Modified: version7/trunk/Transims70/Converge_Service/Iteration_Output.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Iteration_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Converge_Service/Iteration_Output.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -31,7 +31,7 @@
System_Performance_File (true)->Open (iteration);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (iteration);
Write_Turn_Delays ();
}
Modified: version7/trunk/Transims70/Converge_Service/Step_Output.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Step_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Converge_Service/Step_Output.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -32,7 +32,7 @@
System_Performance_File (true)->Open (file_num);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (file_num);
Write_Turn_Delays ();
}
Modified: version7/trunk/Transims70/Data_Service/Lane_Services.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Lane_Services.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Lane_Services.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -19,8 +19,8 @@
if (lane < 1 || lane > dir_ptr->Left ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Left ());
+ Warning (String ("Record %d Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Left ());
}
lane = dir_ptr->Left ();
}
@@ -29,8 +29,8 @@
if (lane < 1 || lane > dir_ptr->Right ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Right ());
+ Warning (String ("Record %d Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Right ());
}
lane = dir_ptr->Right ();
}
@@ -39,8 +39,8 @@
if (lane == 0) return (-1);
if (lane < 1 || lane > dir_ptr->Lanes ()) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Main Lane %d is Out of Range (1..%d)") %
- link_ptr->Link () % lane % dir_ptr->Lanes ());
+ Warning (String ("Record %d Link %d Main Lane %d is Out of Range (1..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Lanes ());
lane = dir_ptr->Lanes ();
}
lane = dir_ptr->Lanes () - lane + dir_ptr->Left ();
@@ -59,7 +59,7 @@
if (lane == -1) return (0);
if (lane < 0 || lane >= code) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane %d is Out of Range (0..%d)") % link_ptr->Link () % lane % (code-1));
+ Warning (String ("Record %d Link %d Lane %d is Out of Range (0..%d)") % Progress_Count () % link_ptr->Link () % lane % (code-1));
return (1);
}
if (lane < dir_ptr->Left ()) {
@@ -94,7 +94,7 @@
} else {
low = Convert_Lane_ID (dir_ptr, low);
if (low > high) {
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_array [dir_ptr->Link ()].Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_array [dir_ptr->Link ()].Link () % low % high);
int temp = low;
low = high;
high = temp;
@@ -110,7 +110,7 @@
{
if (low > high) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_ptr->Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_ptr->Link () % low % high);
return (0);
}
low = Make_Lane_ID (dir_ptr, low);
Modified: version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -450,7 +450,10 @@
} else {
rate /= MILETOFEET;
}
- lane_use_rec.Max_Rate (DTOI (rate * link_ptr->Length ()));
+ rate *= link_ptr->Length ();
+ if (rate > 32500) rate = 32500;
+
+ lane_use_rec.Max_Rate (DTOI (rate));
}
if (lane_use_rec.Max_Rate () > lane_use_rec.Min_Rate () || file.toll_periods.Num_Periods () > 0) {
Modified: version7/trunk/Transims70/Data_Service/Read_Link_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Read_Link_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Link_Data *link_ptr;
Int_Map_Itr map_itr;
@@ -68,6 +69,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
anode = file.Anode ();
bnode = file.Bnode ();
Modified: version7/trunk/Transims70/Data_Service/Read_Link_Dir.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Link_Dir.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Read_Link_Dir.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Volume_Speed_Data *data_ptr;
Link_Data *link_ptr;
@@ -66,6 +67,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
dir = file.Dir ();
if (dir) {
Modified: version7/trunk/Transims70/Data_Service/Write_Link_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Write_Link_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -13,6 +13,8 @@
int period, num_periods, count;
double value;
bool flag;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Link_Data *link_ptr;
@@ -65,6 +67,15 @@
}
}
if (flag) {
+ str_itr = data.notes_map.find (link_ptr->Link ());
+ if (str_itr != data.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ link_data_file.Notes (notes);
+
link_data_file.Write ();
count++;
}
Modified: version7/trunk/Transims70/Data_Service/Write_Volume_Speeds.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -19,6 +19,8 @@
{
int i, dir, index, count;
Dtime low, high, time;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Dir_Data *dir_ptr;
@@ -80,6 +82,15 @@
data_rec.Total_Vol_Spd_BA ();
data_rec.Total_Vol_Spd ();
+ str_itr = array.notes_map.find (link_ptr->Link ());
+ if (str_itr != array.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ data_rec.Notes (notes);
+
count += Put_Volume_Speed_Data (file, data_rec);
}
}
Modified: version7/trunk/Transims70/File_Service/File_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/File_Service/File_Service.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/File_Service/File_Service.vcxproj 2018-07-08 18:32:12 UTC (rev 1709)
@@ -73,6 +73,7 @@
<ClInclude Include="..\Include\Travel_Time_File.hpp" />
<ClInclude Include="..\Include\Trip_File.hpp" />
<ClInclude Include="..\Include\Turn_Delay_File.hpp" />
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp" />
<ClInclude Include="..\Include\Turn_Pen_File.hpp" />
<ClInclude Include="..\Include\Vehicle_File.hpp" />
<ClInclude Include="..\Include\Veh_Type_File.hpp" />
@@ -138,6 +139,7 @@
<ClCompile Include="Travel_Time_File.cpp" />
<ClCompile Include="Trip_File.cpp" />
<ClCompile Include="Turn_Delay_File.cpp" />
+ <ClCompile Include="Turn_Diff_File.cpp" />
<ClCompile Include="Turn_Pen_File.cpp" />
<ClCompile Include="Vehicle_File.cpp" />
<ClCompile Include="Veh_Type_File.cpp" />
Modified: version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters 2018-07-08 18:32:12 UTC (rev 1709)
@@ -200,6 +200,9 @@
<ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="File_Service.cpp">
@@ -391,5 +394,8 @@
<ClCompile Include="Vol_Spd_Diff_Data_File.cpp">
<Filter>Source Files\Files</Filter>
</ClCompile>
+ <ClCompile Include="Turn_Diff_File.cpp">
+ <Filter>Source Files\Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/File_Service/Link_Data_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Link_Data_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/File_Service/Link_Data_File.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -132,6 +132,9 @@
Add_Field (name, DB_DOUBLE, size, units);
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -201,6 +204,7 @@
Set_Units (ba [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Modified: version7/trunk/Transims70/File_Service/Link_Dir_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Link_Dir_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/File_Service/Link_Dir_File.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -160,6 +160,9 @@
}
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -273,6 +276,7 @@
Set_Units (diff [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Copied: version7/trunk/Transims70/File_Service/Turn_Diff_File.cpp (from rev 1708, version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp)
===================================================================
--- version7/trunk/Transims70/File_Service/Turn_Diff_File.cpp (rev 0)
+++ version7/trunk/Transims70/File_Service/Turn_Diff_File.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -0,0 +1,107 @@
+//*********************************************************
+// Turn_Diff_File.cpp - Turn Movement File Input/Output
+//*********************************************************
+
+#include "Turn_Diff_File.hpp"
+
+//-----------------------------------------------------------
+// Turn_Diff_File constructors
+//-----------------------------------------------------------
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+//-----------------------------------------------------------
+// Setup
+//-----------------------------------------------------------
+
+void Turn_Diff_File::Setup (void)
+{
+ File_Type ("Turn Diff File");
+ File_ID ("Turn");
+
+ node = link = to_link = start = end = turn = base = diff = -1;
+}
+
+//---------------------------------------------------------
+// Create_Fields
+//---------------------------------------------------------
+
+bool Turn_Diff_File::Create_Fields (void)
+{
+ Clear_Fields ();
+
+ Add_Field ("NODE", DB_INTEGER, 10);
+ Add_Field ("LINK", DB_INTEGER, 10);
+ Add_Field ("TO_LINK", DB_INTEGER, 10);
+ Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("TURN", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("BASE", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("DIFF", DB_DOUBLE, 10.1, PCE);
+
+ return (Set_Field_Numbers ());
+}
+
+//-----------------------------------------------------------
+// Set_Field_Numbers
+//-----------------------------------------------------------
+
+bool Turn_Diff_File::Set_Field_Numbers (void)
+{
+ //---- required fields ----
+
+ link = Required_Field (IN_LINK_FIELD_NAMES);
+ to_link = Required_Field (OUT_LINK_FIELD_NAMES);
+ turn = Required_Field ("TURN", "VOLUME", "TURN_VOL", "COUNT");
+
+ if (link < 0 || to_link < 0 || turn < 0) return (false);
+
+ node = Optional_Field ("NODE");
+ start = Optional_Field (START_FIELD_NAMES);
+ end = Optional_Field (END_FIELD_NAMES);
+ base = Optional_Field ("BASE", "COUNT", "OLD", "PREVIOUS");
+ diff = Optional_Field ("DIFF", "DIFFERENCE", "CHANGE");
+
+ //---- set default units ----
+
+ if (Version () <= 40) {
+ Set_Units (start, SECONDS);
+ Set_Units (end, SECONDS);
+ Set_Units (turn, VEHICLES);
+ Set_Units (base, VEHICLES);
+ Set_Units (diff, VEHICLES);
+ } else {
+ Set_Units (start, HOUR_CLOCK);
+ Set_Units (end, HOUR_CLOCK);
+ Set_Units (turn, PCE);
+ Set_Units (base, PCE);
+ Set_Units (diff, PCE);
+ }
+ return (true);
+}
Modified: version7/trunk/Transims70/Include/Db_Header.hpp
===================================================================
--- version7/trunk/Transims70/Include/Db_Header.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/Db_Header.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -40,6 +40,9 @@
bool Custom_Header (void) { return (_custom_header); }
void Custom_Header (bool flag) { _custom_header = flag; }
+
+ bool Check_Def (void) { return (_check_def); }
+ void Check_Def (bool flag) { _check_def = flag; }
int LinkDir_Type (void) { return (_linkdir_type); }
void LinkDir_Type (Direction_Type type) { _linkdir_type = type; }
@@ -130,7 +133,7 @@
//#endif
bool Read_Def_Header (void);
- bool _custom_header;
+ bool _custom_header, _check_def;
int _header_lines, _scan_lines, _notes, _num_nest, _linkdir_type;
Trip_Sort_Type _sort_type;
String _header_record;
Modified: version7/trunk/Transims70/Include/Db_Matrix.hpp
===================================================================
--- version7/trunk/Transims70/Include/Db_Matrix.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/Db_Matrix.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -178,7 +178,7 @@
int _org_field, _des_field, _period_field, _num_org, _num_des, _max_od, _row_size;
Integers _table_fields;
Int_Map _org_map, _des_map;
- bool _data_flag, _matrix_flag;
+ bool _data_flag, _matrix_flag, _sort_flag;
Buffer _rec_buffer;
};
Modified: version7/trunk/Transims70/Include/Execution_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Execution_Service.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/Execution_Service.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -87,7 +87,7 @@
bool Z_Flag (void) { return (z_flag); }
bool M_Flag (void) { return (m_flag); }
-
+
void Default_Link_Data (bool value) { default_link_data = value; }
bool Default_Link_Data (void) { return (default_link_data); }
Modified: version7/trunk/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/trunk/Transims70/Include/System_Defines.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/System_Defines.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -212,7 +212,7 @@
FPS, MPS, MPH, KPH, FEET, METERS, MILES, KILOMETERS, DEGREES, MILLION_DEG,
FPS2, MPS2, MPHPS, KPHPS, SPP, RATIO, STOPPED, LANE_KM, LANE_MILE,
IMP_METER, IMP_FOOT, CENT_KM, CENT_MI, VHT, VHD, VMT, VKT, EHT, EHD, EMT, EKT, PHT, PHD, PMT, PKT,
- LITERS, GALLONS,
+ LITERS, GALLONS, DOLLARS,
//---- unconverted units ----
NEST_COUNT, CENTS, DOLLARS_HR, IMPEDANCE, IMP_SECOND, IMP_CENT, VPH, VPHPL, PPV,
VEH_TYPE, FARE_ZONE, TIME_PERIOD, YEARS, PERCENT, VEHICLES, PCE, PERSONS, TRIPS,
@@ -447,7 +447,7 @@
};
enum Function_Type { //---- general function types ----
- LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT
+ LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT, SCURVE
};
//---- Projection Service ----
Modified: version7/trunk/Transims70/Include/Turn_Delay_Data.hpp
===================================================================
--- version7/trunk/Transims70/Include/Turn_Delay_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/Turn_Delay_Data.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -106,10 +106,13 @@
public:
Turn_Period (void) {}
- Dtime Time (int index) { return (at (index).Time ()); }
- double Turn (int index) { return (at (index).Turn ()); }
+ Dtime Time (int index) { return (Index (index) ? at (index).Time () : Dtime (0)); }
+ double Turn (int index) { return (Index (index) ? at (index).Turn () : 0); }
- Turn_Data * Data_Ptr (int index) { return (&at (index)); }
+ Turn_Data * Data_Ptr (int index) { return (Index (index) ? &at (index) : 0); }
+
+private:
+ bool Index (int index) { return (index >= 0 && index < (int) size ()); }
};
typedef Turn_Period::iterator Turn_Itr;
typedef Turn_Period::pointer Turn_Ptr;
@@ -142,13 +145,14 @@
void Average_Turn_Times (Turn_Period_Array &period_array, int weight = 1);
Turn_Period * Period_Ptr (Dtime time);
- Turn_Period * Period_Ptr (int period) { return (&at (period)); }
+ Turn_Period * Period_Ptr (int period) { return (Per (period) ? &at (period) : 0); }
Time_Periods * periods;
- int Period (Dtime time) { return (periods->Period (time)); }
+ int Period (Dtime time) { return ((periods > 0) ? periods->Period (time) : -1); }
int Num_Records (void) { return (num_records); }
private:
+ bool Per (int period) { return ((periods > 0 && period >= 0 && period < (int) size ())); }
int num_records;
};
typedef Turn_Period_Array::iterator Turn_Period_Itr;
Copied: version7/trunk/Transims70/Include/Turn_Diff_File.hpp (from rev 1708, version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp)
===================================================================
--- version7/trunk/Transims70/Include/Turn_Diff_File.hpp (rev 0)
+++ version7/trunk/Transims70/Include/Turn_Diff_File.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -0,0 +1,52 @@
+//********************************************************
+// Turn_Diff_File.hpp - Turn Movement File Input/Output
+//********************************************************
+
+#ifndef TURN_DIFF_FILE_HPP
+#define TURN_DIFF_FILE_HPP
+
+#include "APIDefs.hpp"
+#include "Db_Header.hpp"
+
+//---------------------------------------------------------
+// Turn_Diff_File Class definition
+//---------------------------------------------------------
+
+class SYSLIB_API Turn_Diff_File : public Db_Header
+{
+public:
+ Turn_Diff_File (Access_Type access, string format);
+ Turn_Diff_File (string filename, Access_Type access, string format);
+ Turn_Diff_File (Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+ Turn_Diff_File (string filename, Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+
+ int Node (void) { return (Get_Integer (node)); }
+ int Link (void) { return (Get_Integer (link)); }
+ int To_Link (void) { return (Get_Integer (to_link)); }
+ Dtime Start (void) { return (Get_Time (start)); }
+ Dtime End (void) { return (Get_Time (end)); }
+ double Turn (void) { return (Get_Double (turn)); }
+ double Base (void) { return (Get_Double (base)); }
+ double Diff (void) { return (Get_Double (diff)); }
+
+ void Node (int value) { Put_Field (node, value); }
+ void Link (int value) { Put_Field (link, value); }
+ void To_Link (int value) { Put_Field (to_link, value); }
+ void Start (Dtime value) { Put_Field (start, value); }
+ void End (Dtime value) { Put_Field (end, value); }
+ void Turn (double value) { Put_Field (turn, value); }
+ void Base (double value) { Put_Field (base, value); }
+ void Diff (double value) { Put_Field (diff, value); }
+
+ virtual bool Create_Fields (void);
+
+protected:
+ virtual bool Set_Field_Numbers (void);
+
+private:
+ void Setup (void);
+
+ int node, link, to_link, start, end, turn, base, diff;
+};
+
+#endif
Modified: version7/trunk/Transims70/Include/TypeDefs.hpp
===================================================================
--- version7/trunk/Transims70/Include/TypeDefs.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/TypeDefs.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -124,6 +124,13 @@
typedef Floats::reverse_iterator Flt_RItr;
typedef Floats::pointer Flt_Ptr;
+//---- an integer sorted array of floats ----
+
+typedef map <int, Floats> Flts_Map;
+typedef pair <int, Floats> Flts_Map_Data;
+typedef Flts_Map::iterator Flts_Map_Itr;
+typedef pair <Flts_Map_Itr, bool > Flts_Map_Stat;
+
//---- array of float arrays ----
typedef Vector <Floats> Flts_Array;
Modified: version7/trunk/Transims70/Include/Volume_Speed_Data.hpp
===================================================================
--- version7/trunk/Transims70/Include/Volume_Speed_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/Include/Volume_Speed_Data.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -81,6 +81,8 @@
Time_Periods * periods;
int Num_Records (void) { return (num_records); }
+ Str_Map notes_map;
+
private:
int num_records;
};
@@ -113,6 +115,7 @@
double Spd_BA (void) { return (spd_ba); }
double Volume (void) { return (volume); }
double Speed (void) { return (speed); }
+ string Notes (void) { return (notes); }
void Link (int value) { link = value; }
void Start (Dtime value) { start = value; }
@@ -131,6 +134,7 @@
void Spd_BA (double value) { spd_ba = (float) value; }
void Volume (double value) { volume = (float) value; }
void Speed (double value) { speed = (float) value; }
+ void Notes (string value) { notes = value; }
void Add_Vol_Spd_AB (Volume_Speed_Data &data);
void Add_Vol_Spd_BA (Volume_Speed_Data &data);
@@ -163,6 +167,7 @@
float spd_ba;
float volume;
float speed;
+ string notes;
};
Modified: version7/trunk/Transims70/LinkSum/Control.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -11,7 +11,7 @@
void LinkSum::Program_Control (void)
{
int i, field, ngroup, num;
- bool binary;
+ bool binary, perf_flag;
String key, token;
Location_File *location_file;
@@ -32,6 +32,7 @@
Select_Service::Program_Control ();
+ perf_flag = System_File_Flag (PERFORMANCE);
turn_flag = System_File_Flag (TURN_DELAY);
Print (2, String ("%s Control Keys:") % Program ());
@@ -41,6 +42,9 @@
key = Get_Control_String (COMPARE_PERFORMANCE_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is Required for Compare Processing");
+ }
compare_file.File_Type ("Compare Performance File");
Print (1);
@@ -105,6 +109,26 @@
turn_compare_flag = true;
}
+ //---- open the new turn difference file ----
+
+ key = Get_Control_String (NEW_TURN_DIFFERENCE_FILE);
+
+ if (!key.empty ()) {
+ if (!turn_compare_flag) {
+ Error ("Compare Turn Delay File is Required for Turn Differences");
+ }
+ turn_diff_file.File_Type ("New Turn Difference File");
+ Print (1);
+
+ if (Check_Control_Key (NEW_TURN_DIFFERENCE_FORMAT)) {
+ turn_diff_file.Dbase_Format (Get_Control_String (NEW_TURN_DIFFERENCE_FORMAT));
+ }
+ turn_diff_file.Create (Project_Filename (key));
+ turn_diff_flag = true;
+ } else {
+ Warning ("New Turn Difference File is needed to Comparison Turns");
+ }
+
//---- select turn nodes----
key = exe->Get_Control_Text (TURN_NODE_RANGE);
@@ -114,6 +138,16 @@
exe->Error ("Adding Turn Node Ranges");
}
}
+ key = exe->Get_Control_String (TURN_NODE_FILE);
+
+ if (!key.empty ()) {
+ turn_node_file.File_Type ("Turn Node File");
+ turn_node_file.Open (Project_Filename (key));
+
+ while (turn_node_file.Read ()) {
+ turn_range.Add_Ranges (turn_node_file.Record_String ());
+ }
+ }
}
//---- create link activity file ----
@@ -121,6 +155,9 @@
key = Get_Control_String (NEW_LINK_ACTIVITY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Link Activity File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Link Activity File");
}
@@ -139,7 +176,7 @@
key = Get_Control_Text (COPY_LOCATION_FIELDS);
if (key.empty ()) {
- Error ("Location Field Names are Required for Link Activity File");
+ Error ("Location Field Names are Required for the Link Activity File");
}
link_db.File_Type ("Link Location Database");
@@ -171,6 +208,9 @@
key = Get_Control_String (NEW_ZONE_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Zone Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Zone Travel File");
}
@@ -189,6 +229,9 @@
key = Get_Control_String (NEW_GROUP_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Group Travel File");
}
@@ -213,6 +256,9 @@
if (ngroup > 0) {
Dir_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Direction Files");
+ }
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -260,6 +306,10 @@
if (ngroup > 0) {
Data_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Data Files");
+ }
+
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -297,6 +347,9 @@
key = Get_Control_String (NEW_DATA_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Data Summary File");
+ }
Print (1);
summary_file.File_Type ("New Data Summary File");
@@ -342,6 +395,9 @@
key = Get_Control_String (NEW_GROUP_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Summary File");
+ }
Print (1);
group_sum_file.File_Type ("New Group Summary File");
@@ -361,6 +417,9 @@
key = Get_Control_String (NEW_SPEED_CONTOUR_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Speed Contour File");
+ }
Print (1);
speed_contour_file.File_Type ("New Speed Contour File");
Modified: version7/trunk/Transims70/LinkSum/Execute.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Execute.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/Execute.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -109,6 +109,12 @@
Write_Turn_Data ();
}
+ //---- write the turn difference file ----
+
+ if (turn_diff_flag) {
+ Write_Turn_Difference ();
+ }
+
//---- print reports ----
for (int i=First_Report (); i != 0; i=Next_Report ()) {
Modified: version7/trunk/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/LinkSum.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -13,14 +13,14 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (7);
+ Version (8);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
- NODE, LINK, PERFORMANCE, END_FILE
+ NODE, LINK, END_FILE
};
System_File_Type optional_files [] = {
- CONNECTION, LANE_USE, LOCATION, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
+ CONNECTION, LANE_USE, LOCATION, PERFORMANCE, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
};
int file_service_keys [] = {
SAVE_LANE_USE_FLOWS, LINK_EQUIVALENCE_FILE, ZONE_EQUIVALENCE_FILE, 0
@@ -44,7 +44,10 @@
{ SELECT_BY_LINK_GROUP, "SELECT_BY_LINK_GROUP", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FILE, "COMPARE_TURN_DELAY_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FORMAT, "COMPARE_TURN_DELAY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { NEW_TURN_DIFFERENCE_FILE, "NEW_TURN_DIFFERENCE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
+ { NEW_TURN_DIFFERENCE_FORMAT, "NEW_TURN_DIFFERENCE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP},
{ TURN_NODE_RANGE, "TURN_NODE_RANGE", LEVEL0, OPT_KEY, LIST_KEY, "ALL", RANGE_RANGE, NO_HELP },
+ { TURN_NODE_FILE, "TURN_NODE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
{ NEW_LINK_ACTIVITY_FILE, "NEW_LINK_ACTIVITY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_LINK_ACTIVITY_FORMAT, "NEW_LINK_ACTIVITY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ COPY_LOCATION_FIELDS, "COPY_LOCATION_FIELDS", LEVEL0, OPT_KEY, TEXT_KEY, "", "", NO_HELP },
Modified: version7/trunk/Transims70/LinkSum/LinkSum.hpp
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/LinkSum.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -13,6 +13,7 @@
#include "Db_Array.hpp"
#include "TypeDefs.hpp"
#include "Data_Range.hpp"
+#include "Turn_Diff_File.hpp"
#define NUM_SUM_BINS 1000
#define NUM_PERCENTILES 9
@@ -39,7 +40,8 @@
COMPARE_PERFORMANCE_FILE = 1, COMPARE_PERFORMANCE_FORMAT,
COMPARE_LINK_MAP_FILE, COMPARE_LINK_MAP_FORMAT, SKIP_MAPPED_LINKS,
MINIMUM_LINK_VOLUME, PERSON_BASED_STATISTICS, SELECT_BY_LINK_GROUP,
- COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, TURN_NODE_RANGE,
+ COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, NEW_TURN_DIFFERENCE_FILE, NEW_TURN_DIFFERENCE_FORMAT,
+ TURN_NODE_RANGE, TURN_NODE_FILE,
NEW_LINK_ACTIVITY_FILE, NEW_LINK_ACTIVITY_FORMAT, COPY_LOCATION_FIELDS,
NEW_ZONE_TRAVEL_FILE, NEW_ZONE_TRAVEL_FORMAT,
NEW_GROUP_TRAVEL_FILE, NEW_GROUP_TRAVEL_FORMAT,
@@ -62,7 +64,7 @@
bool select_link_flag, activity_flag, zone_flag, group_flag, person_flag, periods_flag, ratios_flag, compare_perf_flag;
bool compare_flag, group_select, summary_flag, group_sum_flag, turn_flag, turn_compare_flag, link_map_flag, skip_link_flag;
- bool speed_contour_flag, flip_flag;
+ bool speed_contour_flag, flip_flag, turn_diff_flag;
int increment, num_inc, nerror;
double header_value, cap_factor, minimum_volume, congested_ratio;
String header_label;
@@ -76,8 +78,10 @@
Performance_File compare_file;
Turn_Delay_File turn_compare_file;
+ Turn_Diff_File turn_diff_file;
Data_Range turn_range;
+ Db_File turn_node_file;
Perf_Period_Array compare_perf_array;
Turn_Period_Array compare_turn_array;
@@ -144,6 +148,7 @@
void Write_Link_Data (Data_Group_Itr &group);
void Write_Link_Dir (Dir_Group_Itr &group);
void Write_Turn_Data (void);
+ void Write_Turn_Difference (void);
void Top_100_Report (int number);
void Top_100_Link_Header (void);
Modified: version7/trunk/Transims70/LinkSum/LinkSum.vcxproj
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/LinkSum.vcxproj 2018-07-08 18:32:12 UTC (rev 1709)
@@ -192,6 +192,7 @@
<ClCompile Include="Write_Link_Data.cpp" />
<ClCompile Include="Write_Link_Dir.cpp" />
<ClCompile Include="Write_Turn_Data.cpp" />
+ <ClCompile Include="Write_Turn_Diff.cpp" />
<ClCompile Include="Write_Zone.cpp" />
<ClCompile Include="Zone_Summary.cpp" />
</ItemGroup>
Modified: version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-07-08 18:32:12 UTC (rev 1709)
@@ -118,5 +118,8 @@
<ClCompile Include="Speed_Contour.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Turn_Diff.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/LinkSum/Write_Turn_Data.cpp
===================================================================
--- version7/trunk/Transims70/LinkSum/Write_Turn_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/LinkSum/Write_Turn_Data.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -79,11 +79,14 @@
turn_data.To_Index (connect_ptr->To_Index ());
for (period=0; period < nperiod; period++) {
- period_ptr = &turn_period_array [period];
- if (index >= (int) period_ptr->size ()) continue;
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+ turn_period_array.periods->Period_Range (period, low, high);
+
turn_data.Start (low);
turn_data.End (high);
turn_data.Time (turn_ptr->Time ());
Copied: version7/trunk/Transims70/LinkSum/Write_Turn_Diff.cpp (from rev 1708, version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp)
===================================================================
--- version7/trunk/Transims70/LinkSum/Write_Turn_Diff.cpp (rev 0)
+++ version7/trunk/Transims70/LinkSum/Write_Turn_Diff.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -0,0 +1,120 @@
+//*********************************************************
+// Write_Turn_Diff.cpp - Write the Turn Difference File
+//*********************************************************
+
+#include "LinkSum.hpp"
+
+//---------------------------------------------------------
+// Write_Turn_Difference
+//---------------------------------------------------------
+
+void LinkSum::Write_Turn_Difference (void)
+{
+ int nrec, node, index, period, nperiod;
+ Dtime low, high;
+ bool select_turn_flag;
+
+ Ints_Map node_sort;
+ Ints_Map_Itr sort_itr;
+ Integers ints_rec;
+ Int_Itr int_itr;
+ Int_Map_Itr itr;
+ Dir_Itr dir_itr;
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+ Node_Data *node_ptr;
+ Connect_Data *connect_ptr;
+ Turn_Period *period_ptr, *compare_ptr;
+ Turn_Data *turn_ptr, *base_ptr;
+
+ Show_Message (String ("Writing %s -- Record") % turn_diff_file.File_Type ());
+ Set_Progress ();
+
+ //---- construct the node link liste ----
+
+ select_turn_flag = (turn_range.size () > 0);
+ nperiod = time_periods.Num_Periods ();
+
+ for (itr = node_map.begin (); itr != node_map.end (); itr++) {
+ if (select_turn_flag && !turn_range.In_Range (itr->first)) continue;
+
+ node_sort.insert (Ints_Map_Data (itr->first, ints_rec));
+ }
+
+ //---- assign links to nodes ----
+
+ for (index=0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
+ link_ptr = &link_array [dir_itr->Link ()];
+
+ node = (dir_itr->Dir () == 0) ? link_ptr->Bnode () : link_ptr->Anode ();
+
+ node_ptr = &node_array [node];
+
+ sort_itr = node_sort.find (node_ptr->Node ());
+ if (sort_itr == node_sort.end ()) continue;
+
+ sort_itr->second.push_back (index);
+ }
+
+ //---- process each node ----
+
+ nrec = 0;
+
+ for (sort_itr = node_sort.begin (); sort_itr != node_sort.end (); sort_itr++) {
+ Show_Progress ();
+
+ for (int_itr = sort_itr->second.begin (); int_itr != sort_itr->second.end (); int_itr++) {
+
+ dir_ptr = &dir_array [*int_itr];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.Link (link_ptr->Link ());
+
+ if (dir_ptr->Dir ()) {
+ node_ptr = &node_array [link_ptr->Anode ()];
+ } else {
+ node_ptr = &node_array [link_ptr->Bnode ()];
+ }
+ turn_diff_file.Node (node_ptr->Node ());
+
+ for (index = dir_ptr->First_Connect (); index >= 0; index = connect_ptr->Next_Index ()) {
+ connect_ptr = &connect_array [index];
+
+ dir_ptr = &dir_array [connect_ptr->To_Index ()];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.To_Link (link_ptr->Link ());
+
+ for (period=0; period < nperiod; period++) {
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
+
+ compare_ptr = compare_turn_array.Period_Ptr (period);
+ if (compare_ptr == 0) continue;
+
+ turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+
+ base_ptr = compare_ptr->Data_Ptr (index);
+ if (base_ptr == 0) continue;
+
+ turn_period_array.periods->Period_Range (period, low, high);
+ turn_diff_file.Start (low);
+ turn_diff_file.End (high);
+
+ turn_diff_file.Turn (turn_ptr->Turn ());
+ turn_diff_file.Base (base_ptr->Turn ());
+ turn_diff_file.Diff (turn_ptr->Turn () - base_ptr->Turn ());
+
+ if (!turn_diff_file.Write (false)) {
+ Error (String ("Writing %s") % turn_diff_file.File_Type ());
+ }
+ nrec++;
+ }
+ }
+ }
+ }
+ End_Progress ();
+
+ Print (2, "Number of New Turn Difference Records = ") << nrec;
+}
Modified: version7/trunk/Transims70/NetPrep/Control.cpp
===================================================================
--- version7/trunk/Transims70/NetPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/NetPrep/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -78,6 +78,10 @@
script_file.Open (Project_Filename (key));
convert_flag = true;
}
+
+ //---- keep duplicate links ----
+
+ keep_dup_links = Get_Control_Flag (KEEP_DUPLICATE_LINKS);
}
//---- open the input node file ----
Modified: version7/trunk/Transims70/NetPrep/Input_Links.cpp
===================================================================
--- version7/trunk/Transims70/NetPrep/Input_Links.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/NetPrep/Input_Links.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -17,7 +17,7 @@
int i, anode, bnode, node, xa, ya, xb, yb, index, lanes, num, ft, at, spd, min_spd, num_approach, num_use, field;
int bearing_in, bearing_out, bear_in, bear_out;
double length, x1, y1, x2, y2, z1, z2, dx, dy, dz, ratio, speed, len;
- bool add_node_flag;
+ bool add_node_flag, duplicate_flag;
Db_Header *file;
Link_File *new_file;
@@ -325,9 +325,10 @@
//---- check for duplicate links ----
+ duplicate_flag = false;
ab_ptr = &ab_map;
ab_itr = ab_ptr->find (Int2_Key (anode, bnode));
-
+
if (ab_itr != ab_ptr->end ()) {
dir_ptr = &dir_array [ab_itr->second];
@@ -338,9 +339,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction A-B = ") << anode << "-" << bnode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -356,9 +359,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction B-A = ") << bnode << "-" << anode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -383,7 +388,7 @@
}
}
- if (ab_itr == ab_ptr->end ()) {
+ if (ab_itr == ab_ptr->end () || duplicate_flag) {
//---- create a new record ----
@@ -623,7 +628,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
@@ -708,7 +713,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
Modified: version7/trunk/Transims70/NetPrep/Input_Nodes.cpp
===================================================================
--- version7/trunk/Transims70/NetPrep/Input_Nodes.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/NetPrep/Input_Nodes.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -10,7 +10,7 @@
void NetPrep::Input_Nodes (void)
{
- int node, node_field, x_field, y_field, z_field, notes_field;
+ int node, node_field, x_field, y_field, z_field, notes_field, subarea_field;
double x, y, z;
Node_File *new_file;
@@ -40,6 +40,7 @@
}
node_field = file->Required_Field (NODE_FIELD_NAMES);
notes_field = file->Optional_Field (NOTES_FIELD_NAMES);
+ subarea_field = file->Optional_Field ("SUBAREA", "AREA");
//---- read each node record----
@@ -125,6 +126,7 @@
node_rec.Y (Round (y));
node_rec.Z (Round (z));
node_rec.Notes (file->Get_String (notes_field));
+ node_rec.Subarea (file->Get_Integer (subarea_field));
node_rec.Count (0);
map_stat = node_map.insert (Int_Map_Data (node, (int) node_array.size ()));
Modified: version7/trunk/Transims70/NetPrep/NetPrep.cpp
===================================================================
--- version7/trunk/Transims70/NetPrep/NetPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/NetPrep/NetPrep.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -11,7 +11,7 @@
NetPrep::NetPrep (void) : Data_Service ()
{
Program ("NetPrep");
- Version (11);
+ Version (12);
Title ("Network Preparation Utility");
System_File_Type optional_files [] = {
@@ -27,6 +27,7 @@
{ INPUT_LINK_FILE, "INPUT_LINK_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_LINK_FORMAT, "INPUT_LINK_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_LINK_SCRIPT, "INPUT_LINK_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { KEEP_DUPLICATE_LINKS, "KEEP_DUPLICATE_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ INPUT_NODE_FILE, "INPUT_NODE_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_NODE_FORMAT, "INPUT_NODE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_NODE_SCRIPT, "INPUT_NODE_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
@@ -101,7 +102,7 @@
fac_fld = at_fld = -1;
drop_length = split_length = num_loops = max_angle = min_length = next_loop = num_ratio = 0;
convert_flag = spdcap_flag = link_flag = node_flag = zone_flag = route_flag = new_zone_flag = connector_flag = false;
- link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= false;
+ link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= keep_dup_links = false;
units_flag = keep_node_flag = keep_link_flag = drop_node_flag = drop_link_flag = shape_flag = correct_flag = false;
length_flag = split_flag = split_ab_flag = collapse_flag = drop_flag = loop_flag = spacing_flag = false;
divided_flag = segment_flag = speed_flag = link_use_flag = approach_flag = link_node_flag = offset_flag = time_flag = false;
Modified: version7/trunk/Transims70/NetPrep/NetPrep.hpp
===================================================================
--- version7/trunk/Transims70/NetPrep/NetPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/NetPrep/NetPrep.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -36,7 +36,8 @@
protected:
enum NetPrep_Keys {
- INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
+ INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, KEEP_DUPLICATE_LINKS,
+ INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
INPUT_ZONE_FILE, INPUT_ZONE_FORMAT, INPUT_ZONE_SCRIPT, INPUT_SPDCAP_FILE, INPUT_SPDCAP_FORMAT,
INPUT_UNITS_OF_MEASURE, FACILITY_INDEX_FIELD, AREA_TYPE_INDEX_FIELD, CONVERSION_SCRIPT,
INTERNAL_ZONE_RANGE, KEEP_ZONE_CONNECTORS_AS_LOCALS,
@@ -71,7 +72,7 @@
int straight_diff, thru_diff, forward_diff, short_links, cross_min, cross_max, next_loop, num_ratio;
int num_periods, new_route, num_match;
bool convert_flag, spdcap_flag, link_flag, node_flag, zone_flag, route_flag, new_zone_flag, connector_flag;
- bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag;
+ bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag, keep_dup_links;
bool units_flag, keep_node_flag, keep_link_flag, drop_node_flag, drop_link_flag, shape_flag, correct_flag;
bool length_flag, split_flag, split_ab_flag, collapse_flag, drop_flag, short_flag, loop_flag, spacing_flag;
bool divided_flag, segment_flag, speed_flag, link_use_flag, approach_flag, link_node_flag, offset_flag, time_flag;
Modified: version7/trunk/Transims70/PlanPrep/Control.cpp
===================================================================
--- version7/trunk/Transims70/PlanPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/PlanPrep/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -160,7 +160,7 @@
shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
shift_start_flag = (shift_rate > 0.0);
} else if (Check_Control_Key (SHIFT_END_PERCENTAGE)) {
- shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
+ shift_rate = Get_Control_Double (SHIFT_END_PERCENTAGE);
shift_end_flag = (shift_rate > 0.0);
}
if (shift_rate > 0.0) {
@@ -186,6 +186,8 @@
Error ("Shift Time Range is Out of Range");
}
shift_factor = (double) (high_to - low_to) / (high_from - low_from);
+
+ shift_select_flag = Get_Control_Flag (SHIFT_SELECTED_PLANS);
}
if (!thread_flag && plan_flag && (new_plan_flag || plan_skim_flag) && !merge_flag && !subarea_flag && !combine_flag && !repair_flag && !reroute_flag) {
Modified: version7/trunk/Transims70/PlanPrep/PlanPrep.cpp
===================================================================
--- version7/trunk/Transims70/PlanPrep/PlanPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/PlanPrep/PlanPrep.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -11,7 +11,7 @@
PlanPrep::PlanPrep (void) : Select_Service ()
{
Program ("PlanPrep");
- Version (13);
+ Version (14);
Title ("Travel Plan Processing Utility");
System_File_Type optional_files [] = {
@@ -42,6 +42,11 @@
{ SHIFT_END_PERCENTAGE, "SHIFT_END_PERCENTAGE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0..100.0", NO_HELP },
{ SHIFT_FROM_TIME_RANGE, "SHIFT_FROM_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
{ SHIFT_TO_TIME_RANGE, "SHIFT_TO_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
+ { SHIFT_SELECTED_PLANS, "SHIFT_SELECTED_PLANS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
+ { REROUTE_PLAN_FILE, "REROUTE_PLAN_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { REROUTE_PLAN_FORMAT, "REROUTE_PLAN_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
+ { REROUTE_TIME_RANGE, "REROUTE_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "0:00..24:00", TIME_RANGE, NO_HELP },
+ { REROUTE_PERCENTAGE, "REROUTE_PERCENTAGE", LEVEL0, OPT_KEY, FLOAT_KEY, "100.0", "1.0..100.0", NO_HELP },
END_CONTROL
};
const char *reports [] = {
@@ -59,11 +64,14 @@
num_repair = repair_plans = num_subarea_merge = num_new_skims = num_constraints = num_merge_files = check_sum = check_sum_type = 0;
select_flag = merge_flag = subarea_flag = combine_flag = output_flag = new_plan_flag = new_trip_flag = new_select_flag = false;
repair_flag = skim_flag = plan_skim_flag = plan_flag = check_sum_flag = export_flag = false;
- shift_start_flag = shift_end_flag = false;
+ shift_start_flag = shift_end_flag = shift_select_flag = reroute_flag = false;
shift_rate = 0.0;
shift_factor = 1.0;
num_shifted = 0;
+ reroute_start = 0;
+ reroute_end = MIDNIGHT;
+
max_ratio = max_factor = 1.2;
plan_processing = 0;
Modified: version7/trunk/Transims70/PlanPrep/PlanPrep.hpp
===================================================================
--- version7/trunk/Transims70/PlanPrep/PlanPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/PlanPrep/PlanPrep.hpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -28,7 +28,7 @@
enum PlanPrep_Keys {
MERGE_PLAN_FILE = 1, MERGE_PLAN_FORMAT, MERGE_SUBAREA_LEGS, REPAIR_PLAN_LEGS, CHECK_PLAN_SUMS,
CONSTRAIN_PARKRIDE_LOTS, MAX_PARKING_DEMAND_RATIO, CONSTRAIN_TRANSIT_LOADS, MAX_ROUTE_LOAD_FACTOR,
- SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE,
+ SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE, SHIFT_SELECTED_PLANS,
REROUTE_PLAN_FILE, REROUTE_PLAN_FORMAT, REROUTE_TIME_RANGE, REROUTE_PERCENTAGE,
};
virtual void Program_Control (void);
@@ -47,7 +47,7 @@
int check_sum, check_sum_type, num_reroute, num_shifted;
bool select_flag, merge_flag, subarea_flag, combine_flag, output_flag, new_plan_flag, new_trip_flag, new_select_flag;
bool repair_flag, plan_skim_flag, skim_flag, plan_flag, check_sum_flag, export_flag;
- bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, reroute_flag;
+ bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, shift_select_flag, reroute_flag;
double max_ratio, max_factor, shift_rate, shift_factor, reroute_percent;
Dtime low_from, high_from, low_to, high_to, reroute_start, reroute_end;
Time_Periods shift_from, shift_to;
Modified: version7/trunk/Transims70/PlanPrep/Process_Plan.cpp
===================================================================
--- version7/trunk/Transims70/PlanPrep/Process_Plan.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/PlanPrep/Process_Plan.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -13,7 +13,7 @@
string process_type;
Dtime shift, duration;
double prob;
- bool keep_flag, out_flag;
+ bool keep_flag, out_flag, shift_flag;
Trip_Index trip_index;
Time_Index time_index;
@@ -24,7 +24,7 @@
//---- selection checks ----
- if (!exe->Select_Plan_Data (*plan_ptr)) {
+ if (!exe->shift_select_flag && !exe->Select_Plan_Data (*plan_ptr)) {
keep_flag = false;
} else {
@@ -73,46 +73,55 @@
keep_flag = false;
} else {
+
+ if (exe->shift_select_flag) {
+ shift_flag = exe->Select_Plan_Data (*plan_ptr);
+ } else {
+ shift_flag = true;
+ }
- //---- shift start times ----
+ if (shift_flag) {
- if (exe->shift_start_flag) {
- out_flag = false;
+ //---- shift start times ----
- if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_start_flag) {
+ out_flag = false;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
+ prob = random_thread.Probability ();
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- plan_ptr->Depart (exe->low_to + shift);
- plan_ptr->Arrive (plan_ptr->Depart () + duration);
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
- plan_ptr->Start (plan_ptr->Depart ());
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Depart (exe->low_to + shift);
+ plan_ptr->Arrive (plan_ptr->Depart () + duration);
+
+ plan_ptr->Start (plan_ptr->Depart ());
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
+
}
- }
+ } else if (exe->shift_end_flag) { //---- shift the end time ----
+ out_flag = false;
- } else if (exe->shift_end_flag) { //---- shift the end time ----
- out_flag = false;
+ if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
+ prob = random_thread.Probability ();
- if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
-
- plan_ptr->Arrive (exe->low_to + shift);
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Arrive (exe->low_to + shift);
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
}
}
}
Modified: version7/trunk/Transims70/PlanSelect/Control.cpp
===================================================================
--- version7/trunk/Transims70/PlanSelect/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
+++ version7/trunk/Transims70/PlanSelect/Control.cpp 2018-07-08 18:32:12 UTC (rev 1709)
@@ -49,6 +49,12 @@
}
vol_cnt_file.Open (Project_Filename (key));
+ Mode_Range_Key (MODE_DELETE_LIMITS, delete_flag);
+ Mode_Range_Key (MODE_ADD_LIMITS, add_flag);
+
new_hhold = Get_Control_Integer (NEW_HOUSEHOLD_ID);
+
+ num_iter = Get_Control_Integer (NUMBER_OF_ITERATIONS);
}
+ if (num_iter == 0) num_iter = 1;
}
Modified: version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
===================================================================
--- version7/trunk/Transims70/PlanSelect/PlanSelect.cpp 2018-07-08 18:22:37 UTC (rev 1708...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-07-08 18:22:39
|
Revision: 1708
http://sourceforge.net/p/transims/code/1708
Author: davidroden
Date: 2018-07-08 18:22:37 +0000 (Sun, 08 Jul 2018)
Log Message:
-----------
TRANSIMS Version 7.1
SysLib
A warning message was added to Db_Matrix to check for trip tables that are not sorted by origin zone number. An S-Curve function was added to the user function options. {U+201C}Dollars{U+201D} was added to the conversion services. {U+201C}Waterway{U+201D} was added to the facility codes
File_Service
NOTES field was added to the Link Data and Link Direction files. A Turn Difference file was added.
Data_Service
Record numbers were added to the lane ID conversion warning messages. NOTES fields are read by the Link Data, Link Direction and Volume-Speed file I/O functions. Overflow protection was added to the maximum toll rate in the lane use file.
Converge_Service
Turn-Delay files can be output without a Signal file.
LinkSum 7.1.8
Performance file was made optional and a TURN_NODE_FILE and NEW_TURN_DIFFERENCE_FILE/FORMAT keys were added to output turning movement differences for selected nodes.
NetPrep 7.1.12
KEEP_DUPLICATE_LINKS key was added to avoid warning messages and key links with the same A->B node combination.
PlanPrep 7.1.14
SHIFT_SELECTED_PLANS key was added to enable the Select Service to identify specific plans to shift time of day.
PlanSelect 7.1.7
MODE_DELETE_LIMITS and NUMBER_OF_ITERATIONS keys were added to limit the modes that can be deleted to match a traffic count and enable the process to do multiple adjustment iterations to improve the count match. The logic was also changed to limit the replication or deletion of plans if all of the count links need corrections in the same direction (i.e., increase or decrease).
Router 7.1.50
Incorporated updated step convergence logic.
Validate 7.1.12
NOTES fields were added to the Volume-Count, Volume-Speed-Difference, and Volume output files.
VolSpdData 7.1.18
NOTES field was added to the Volume-Speed-Difference file.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp
version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp
version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp
version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp
version7/branches/aecom/Transims70/Include/Db_Matrix.hpp
version7/branches/aecom/Transims70/Include/Execution_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp
version7/branches/aecom/Transims70/Include/TypeDefs.hpp
version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp
version7/branches/aecom/Transims70/LinkSum/Control.cpp
version7/branches/aecom/Transims70/LinkSum/Execute.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp
version7/branches/aecom/Transims70/NetPrep/Control.cpp
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
version7/branches/aecom/Transims70/PlanPrep/Control.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
version7/branches/aecom/Transims70/PlanSelect/Control.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSelect/Read_Vol_Cnt.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/branches/aecom/Transims70/SysLib/Service/Convert_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Functions.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Cnt.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/Validate/Write_Volume.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp
version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp
version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp
Modified: version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Converge_Service/Iteration_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -31,7 +31,7 @@
System_Performance_File (true)->Open (iteration);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (iteration);
Write_Turn_Delays ();
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Converge_Service/Step_Output.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -32,7 +32,7 @@
System_Performance_File (true)->Open (file_num);
Write_Performance ();
}
- if (System_File_Flag (NEW_TURN_DELAY) && System_File_Flag (SIGNAL)) {
+ if (System_File_Flag (NEW_TURN_DELAY)) {
System_Turn_Delay_File (true)->Open (file_num);
Write_Turn_Delays ();
}
Modified: version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Lane_Services.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -19,8 +19,8 @@
if (lane < 1 || lane > dir_ptr->Left ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Left ());
+ Warning (String ("Record %d Link %d Left Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Left ());
}
lane = dir_ptr->Left ();
}
@@ -29,8 +29,8 @@
if (lane < 1 || lane > dir_ptr->Right ()) {
if (lane != 0 && System_File_Flag (POCKET)) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
- link_ptr->Link () % lane % dir_ptr->Right ());
+ Warning (String ("Record %d Link %d Right Pocket Lane %d is Out of Range (0..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Right ());
}
lane = dir_ptr->Right ();
}
@@ -39,8 +39,8 @@
if (lane == 0) return (-1);
if (lane < 1 || lane > dir_ptr->Lanes ()) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Main Lane %d is Out of Range (1..%d)") %
- link_ptr->Link () % lane % dir_ptr->Lanes ());
+ Warning (String ("Record %d Link %d Main Lane %d is Out of Range (1..%d)") %
+ Progress_Count () % link_ptr->Link () % lane % dir_ptr->Lanes ());
lane = dir_ptr->Lanes ();
}
lane = dir_ptr->Lanes () - lane + dir_ptr->Left ();
@@ -59,7 +59,7 @@
if (lane == -1) return (0);
if (lane < 0 || lane >= code) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane %d is Out of Range (0..%d)") % link_ptr->Link () % lane % (code-1));
+ Warning (String ("Record %d Link %d Lane %d is Out of Range (0..%d)") % Progress_Count () % link_ptr->Link () % lane % (code-1));
return (1);
}
if (lane < dir_ptr->Left ()) {
@@ -94,7 +94,7 @@
} else {
low = Convert_Lane_ID (dir_ptr, low);
if (low > high) {
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_array [dir_ptr->Link ()].Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_array [dir_ptr->Link ()].Link () % low % high);
int temp = low;
low = high;
high = temp;
@@ -110,7 +110,7 @@
{
if (low > high) {
Link_Data *link_ptr = &link_array [dir_ptr->Link ()];
- Warning (String ("Link %d Lane Range %d..%d is Illogical") % link_ptr->Link () % low % high);
+ Warning (String ("Record %d Link %d Lane Range %d..%d is Illogical") % Progress_Count () % link_ptr->Link () % low % high);
return (0);
}
low = Make_Lane_ID (dir_ptr, low);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -450,7 +450,10 @@
} else {
rate /= MILETOFEET;
}
- lane_use_rec.Max_Rate (DTOI (rate * link_ptr->Length ()));
+ rate *= link_ptr->Length ();
+ if (rate > 32500) rate = 32500;
+
+ lane_use_rec.Max_Rate (DTOI (rate));
}
if (lane_use_rec.Max_Rate () > lane_use_rec.Min_Rate () || file.toll_periods.Num_Periods () > 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Link_Data *link_ptr;
Int_Map_Itr map_itr;
@@ -68,6 +69,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
anode = file.Anode ();
bnode = file.Bnode ();
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Link_Dir.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -14,6 +14,7 @@
Dtime low, high;
Integers volume_map;
Doubles volume;
+ String notes;
Volume_Speed_Data *data_ptr;
Link_Data *link_ptr;
@@ -66,6 +67,10 @@
}
link_ptr = &link_array [map_itr->second];
+ notes = file.Notes ();
+ if (!notes.empty ()) {
+ data.notes_map.insert (Str_Map_Data (link, notes));
+ }
dir = file.Dir ();
if (dir) {
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Link_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,6 +13,8 @@
int period, num_periods, count;
double value;
bool flag;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Link_Data *link_ptr;
@@ -65,6 +67,15 @@
}
}
if (flag) {
+ str_itr = data.notes_map.find (link_ptr->Link ());
+ if (str_itr != data.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ link_data_file.Notes (notes);
+
link_data_file.Write ();
count++;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Volume_Speeds.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -19,6 +19,8 @@
{
int i, dir, index, count;
Dtime low, high, time;
+ String notes;
+ Str_Map_Itr str_itr;
Int_Map_Itr map_itr;
Dir_Data *dir_ptr;
@@ -80,6 +82,15 @@
data_rec.Total_Vol_Spd_BA ();
data_rec.Total_Vol_Spd ();
+ str_itr = array.notes_map.find (link_ptr->Link ());
+ if (str_itr != array.notes_map.end ()) {
+ notes = str_itr->second;
+ } else {
+ notes = link_ptr->Name ();
+ if (notes.empty ()) notes = link_ptr->Notes ();
+ }
+ data_rec.Notes (notes);
+
count += Put_Volume_Speed_Data (file, data_rec);
}
}
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
@@ -73,6 +73,7 @@
<ClInclude Include="..\Include\Travel_Time_File.hpp" />
<ClInclude Include="..\Include\Trip_File.hpp" />
<ClInclude Include="..\Include\Turn_Delay_File.hpp" />
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp" />
<ClInclude Include="..\Include\Turn_Pen_File.hpp" />
<ClInclude Include="..\Include\Vehicle_File.hpp" />
<ClInclude Include="..\Include\Veh_Type_File.hpp" />
@@ -138,6 +139,7 @@
<ClCompile Include="Travel_Time_File.cpp" />
<ClCompile Include="Trip_File.cpp" />
<ClCompile Include="Turn_Delay_File.cpp" />
+ <ClCompile Include="Turn_Diff_File.cpp" />
<ClCompile Include="Turn_Pen_File.cpp" />
<ClCompile Include="Vehicle_File.cpp" />
<ClCompile Include="Veh_Type_File.cpp" />
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
@@ -200,6 +200,9 @@
<ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Turn_Diff_File.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="File_Service.cpp">
@@ -391,5 +394,8 @@
<ClCompile Include="Vol_Spd_Diff_Data_File.cpp">
<Filter>Source Files\Files</Filter>
</ClCompile>
+ <ClCompile Include="Turn_Diff_File.cpp">
+ <Filter>Source Files\Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/Link_Data_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -132,6 +132,9 @@
Add_Field (name, DB_DOUBLE, size, units);
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -201,6 +204,7 @@
Set_Units (ba [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Modified: version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/File_Service/Link_Dir_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -160,6 +160,9 @@
}
}
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -273,6 +276,7 @@
Set_Units (diff [i], units);
}
}
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
return (true);
}
Added: version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp (rev 0)
+++ version7/branches/aecom/Transims70/File_Service/Turn_Diff_File.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,107 @@
+//*********************************************************
+// Turn_Diff_File.cpp - Turn Movement File Input/Output
+//*********************************************************
+
+#include "Turn_Diff_File.hpp"
+
+//-----------------------------------------------------------
+// Turn_Diff_File constructors
+//-----------------------------------------------------------
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, string format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+Turn_Diff_File::Turn_Diff_File (Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+}
+
+Turn_Diff_File::Turn_Diff_File (string filename, Access_Type access, Format_Type format) :
+ Db_Header (access, format)
+{
+ Setup ();
+
+ Open (filename);
+}
+
+//-----------------------------------------------------------
+// Setup
+//-----------------------------------------------------------
+
+void Turn_Diff_File::Setup (void)
+{
+ File_Type ("Turn Diff File");
+ File_ID ("Turn");
+
+ node = link = to_link = start = end = turn = base = diff = -1;
+}
+
+//---------------------------------------------------------
+// Create_Fields
+//---------------------------------------------------------
+
+bool Turn_Diff_File::Create_Fields (void)
+{
+ Clear_Fields ();
+
+ Add_Field ("NODE", DB_INTEGER, 10);
+ Add_Field ("LINK", DB_INTEGER, 10);
+ Add_Field ("TO_LINK", DB_INTEGER, 10);
+ Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("TURN", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("BASE", DB_DOUBLE, 10.1, PCE);
+ Add_Field ("DIFF", DB_DOUBLE, 10.1, PCE);
+
+ return (Set_Field_Numbers ());
+}
+
+//-----------------------------------------------------------
+// Set_Field_Numbers
+//-----------------------------------------------------------
+
+bool Turn_Diff_File::Set_Field_Numbers (void)
+{
+ //---- required fields ----
+
+ link = Required_Field (IN_LINK_FIELD_NAMES);
+ to_link = Required_Field (OUT_LINK_FIELD_NAMES);
+ turn = Required_Field ("TURN", "VOLUME", "TURN_VOL", "COUNT");
+
+ if (link < 0 || to_link < 0 || turn < 0) return (false);
+
+ node = Optional_Field ("NODE");
+ start = Optional_Field (START_FIELD_NAMES);
+ end = Optional_Field (END_FIELD_NAMES);
+ base = Optional_Field ("BASE", "COUNT", "OLD", "PREVIOUS");
+ diff = Optional_Field ("DIFF", "DIFFERENCE", "CHANGE");
+
+ //---- set default units ----
+
+ if (Version () <= 40) {
+ Set_Units (start, SECONDS);
+ Set_Units (end, SECONDS);
+ Set_Units (turn, VEHICLES);
+ Set_Units (base, VEHICLES);
+ Set_Units (diff, VEHICLES);
+ } else {
+ Set_Units (start, HOUR_CLOCK);
+ Set_Units (end, HOUR_CLOCK);
+ Set_Units (turn, PCE);
+ Set_Units (base, PCE);
+ Set_Units (diff, PCE);
+ }
+ return (true);
+}
Modified: version7/branches/aecom/Transims70/Include/Db_Matrix.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Db_Matrix.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Db_Matrix.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -178,7 +178,7 @@
int _org_field, _des_field, _period_field, _num_org, _num_des, _max_od, _row_size;
Integers _table_fields;
Int_Map _org_map, _des_map;
- bool _data_flag, _matrix_flag;
+ bool _data_flag, _matrix_flag, _sort_flag;
Buffer _rec_buffer;
};
Modified: version7/branches/aecom/Transims70/Include/Execution_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Execution_Service.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Execution_Service.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -87,7 +87,7 @@
bool Z_Flag (void) { return (z_flag); }
bool M_Flag (void) { return (m_flag); }
-
+
void Default_Link_Data (bool value) { default_link_data = value; }
bool Default_Link_Data (void) { return (default_link_data); }
Modified: version7/branches/aecom/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -212,7 +212,7 @@
FPS, MPS, MPH, KPH, FEET, METERS, MILES, KILOMETERS, DEGREES, MILLION_DEG,
FPS2, MPS2, MPHPS, KPHPS, SPP, RATIO, STOPPED, LANE_KM, LANE_MILE,
IMP_METER, IMP_FOOT, CENT_KM, CENT_MI, VHT, VHD, VMT, VKT, EHT, EHD, EMT, EKT, PHT, PHD, PMT, PKT,
- LITERS, GALLONS,
+ LITERS, GALLONS, DOLLARS,
//---- unconverted units ----
NEST_COUNT, CENTS, DOLLARS_HR, IMPEDANCE, IMP_SECOND, IMP_CENT, VPH, VPHPL, PPV,
VEH_TYPE, FARE_ZONE, TIME_PERIOD, YEARS, PERCENT, VEHICLES, PCE, PERSONS, TRIPS,
@@ -447,7 +447,7 @@
};
enum Function_Type { //---- general function types ----
- LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT
+ LINEAR, LOGIT, EXPONENTIAL, LOGARITHMIC, POWER, POLYNOMIAL, GAMMA, MAX_LOGIT, SCURVE
};
//---- Projection Service ----
Modified: version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Turn_Delay_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -106,10 +106,13 @@
public:
Turn_Period (void) {}
- Dtime Time (int index) { return (at (index).Time ()); }
- double Turn (int index) { return (at (index).Turn ()); }
+ Dtime Time (int index) { return (Index (index) ? at (index).Time () : Dtime (0)); }
+ double Turn (int index) { return (Index (index) ? at (index).Turn () : 0); }
- Turn_Data * Data_Ptr (int index) { return (&at (index)); }
+ Turn_Data * Data_Ptr (int index) { return (Index (index) ? &at (index) : 0); }
+
+private:
+ bool Index (int index) { return (index >= 0 && index < (int) size ()); }
};
typedef Turn_Period::iterator Turn_Itr;
typedef Turn_Period::pointer Turn_Ptr;
@@ -142,13 +145,14 @@
void Average_Turn_Times (Turn_Period_Array &period_array, int weight = 1);
Turn_Period * Period_Ptr (Dtime time);
- Turn_Period * Period_Ptr (int period) { return (&at (period)); }
+ Turn_Period * Period_Ptr (int period) { return (Per (period) ? &at (period) : 0); }
Time_Periods * periods;
- int Period (Dtime time) { return (periods->Period (time)); }
+ int Period (Dtime time) { return ((periods > 0) ? periods->Period (time) : -1); }
int Num_Records (void) { return (num_records); }
private:
+ bool Per (int period) { return ((periods > 0 && period >= 0 && period < (int) size ())); }
int num_records;
};
typedef Turn_Period_Array::iterator Turn_Period_Itr;
Added: version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp (rev 0)
+++ version7/branches/aecom/Transims70/Include/Turn_Diff_File.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,52 @@
+//********************************************************
+// Turn_Diff_File.hpp - Turn Movement File Input/Output
+//********************************************************
+
+#ifndef TURN_DIFF_FILE_HPP
+#define TURN_DIFF_FILE_HPP
+
+#include "APIDefs.hpp"
+#include "Db_Header.hpp"
+
+//---------------------------------------------------------
+// Turn_Diff_File Class definition
+//---------------------------------------------------------
+
+class SYSLIB_API Turn_Diff_File : public Db_Header
+{
+public:
+ Turn_Diff_File (Access_Type access, string format);
+ Turn_Diff_File (string filename, Access_Type access, string format);
+ Turn_Diff_File (Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+ Turn_Diff_File (string filename, Access_Type access = READ, Format_Type format = DEFAULT_FORMAT);
+
+ int Node (void) { return (Get_Integer (node)); }
+ int Link (void) { return (Get_Integer (link)); }
+ int To_Link (void) { return (Get_Integer (to_link)); }
+ Dtime Start (void) { return (Get_Time (start)); }
+ Dtime End (void) { return (Get_Time (end)); }
+ double Turn (void) { return (Get_Double (turn)); }
+ double Base (void) { return (Get_Double (base)); }
+ double Diff (void) { return (Get_Double (diff)); }
+
+ void Node (int value) { Put_Field (node, value); }
+ void Link (int value) { Put_Field (link, value); }
+ void To_Link (int value) { Put_Field (to_link, value); }
+ void Start (Dtime value) { Put_Field (start, value); }
+ void End (Dtime value) { Put_Field (end, value); }
+ void Turn (double value) { Put_Field (turn, value); }
+ void Base (double value) { Put_Field (base, value); }
+ void Diff (double value) { Put_Field (diff, value); }
+
+ virtual bool Create_Fields (void);
+
+protected:
+ virtual bool Set_Field_Numbers (void);
+
+private:
+ void Setup (void);
+
+ int node, link, to_link, start, end, turn, base, diff;
+};
+
+#endif
Modified: version7/branches/aecom/Transims70/Include/TypeDefs.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/TypeDefs.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/TypeDefs.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -124,6 +124,13 @@
typedef Floats::reverse_iterator Flt_RItr;
typedef Floats::pointer Flt_Ptr;
+//---- an integer sorted array of floats ----
+
+typedef map <int, Floats> Flts_Map;
+typedef pair <int, Floats> Flts_Map_Data;
+typedef Flts_Map::iterator Flts_Map_Itr;
+typedef pair <Flts_Map_Itr, bool > Flts_Map_Stat;
+
//---- array of float arrays ----
typedef Vector <Floats> Flts_Array;
Modified: version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/Include/Volume_Speed_Data.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -81,6 +81,8 @@
Time_Periods * periods;
int Num_Records (void) { return (num_records); }
+ Str_Map notes_map;
+
private:
int num_records;
};
@@ -113,6 +115,7 @@
double Spd_BA (void) { return (spd_ba); }
double Volume (void) { return (volume); }
double Speed (void) { return (speed); }
+ string Notes (void) { return (notes); }
void Link (int value) { link = value; }
void Start (Dtime value) { start = value; }
@@ -131,6 +134,7 @@
void Spd_BA (double value) { spd_ba = (float) value; }
void Volume (double value) { volume = (float) value; }
void Speed (double value) { speed = (float) value; }
+ void Notes (string value) { notes = value; }
void Add_Vol_Spd_AB (Volume_Speed_Data &data);
void Add_Vol_Spd_BA (Volume_Speed_Data &data);
@@ -163,6 +167,7 @@
float spd_ba;
float volume;
float speed;
+ string notes;
};
Modified: version7/branches/aecom/Transims70/LinkSum/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
void LinkSum::Program_Control (void)
{
int i, field, ngroup, num;
- bool binary;
+ bool binary, perf_flag;
String key, token;
Location_File *location_file;
@@ -32,6 +32,7 @@
Select_Service::Program_Control ();
+ perf_flag = System_File_Flag (PERFORMANCE);
turn_flag = System_File_Flag (TURN_DELAY);
Print (2, String ("%s Control Keys:") % Program ());
@@ -41,6 +42,9 @@
key = Get_Control_String (COMPARE_PERFORMANCE_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is Required for Compare Processing");
+ }
compare_file.File_Type ("Compare Performance File");
Print (1);
@@ -105,6 +109,26 @@
turn_compare_flag = true;
}
+ //---- open the new turn difference file ----
+
+ key = Get_Control_String (NEW_TURN_DIFFERENCE_FILE);
+
+ if (!key.empty ()) {
+ if (!turn_compare_flag) {
+ Error ("Compare Turn Delay File is Required for Turn Differences");
+ }
+ turn_diff_file.File_Type ("New Turn Difference File");
+ Print (1);
+
+ if (Check_Control_Key (NEW_TURN_DIFFERENCE_FORMAT)) {
+ turn_diff_file.Dbase_Format (Get_Control_String (NEW_TURN_DIFFERENCE_FORMAT));
+ }
+ turn_diff_file.Create (Project_Filename (key));
+ turn_diff_flag = true;
+ } else {
+ Warning ("New Turn Difference File is needed to Comparison Turns");
+ }
+
//---- select turn nodes----
key = exe->Get_Control_Text (TURN_NODE_RANGE);
@@ -114,6 +138,16 @@
exe->Error ("Adding Turn Node Ranges");
}
}
+ key = exe->Get_Control_String (TURN_NODE_FILE);
+
+ if (!key.empty ()) {
+ turn_node_file.File_Type ("Turn Node File");
+ turn_node_file.Open (Project_Filename (key));
+
+ while (turn_node_file.Read ()) {
+ turn_range.Add_Ranges (turn_node_file.Record_String ());
+ }
+ }
}
//---- create link activity file ----
@@ -121,6 +155,9 @@
key = Get_Control_String (NEW_LINK_ACTIVITY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Link Activity File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Link Activity File");
}
@@ -139,7 +176,7 @@
key = Get_Control_Text (COPY_LOCATION_FIELDS);
if (key.empty ()) {
- Error ("Location Field Names are Required for Link Activity File");
+ Error ("Location Field Names are Required for the Link Activity File");
}
link_db.File_Type ("Link Location Database");
@@ -171,6 +208,9 @@
key = Get_Control_String (NEW_ZONE_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Zone Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Zone Travel File");
}
@@ -189,6 +229,9 @@
key = Get_Control_String (NEW_GROUP_TRAVEL_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Travel File");
+ }
if (!System_File_Flag (LOCATION)) {
Error ("A Location File is needed for the Group Travel File");
}
@@ -213,6 +256,9 @@
if (ngroup > 0) {
Dir_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Direction Files");
+ }
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -260,6 +306,10 @@
if (ngroup > 0) {
Data_Group group, *group_ptr;
+ if (!perf_flag) {
+ Error ("A Performance File is needed for Link Data Files");
+ }
+
//---- process each group ----
for (i=1; i <= ngroup; i++) {
@@ -297,6 +347,9 @@
key = Get_Control_String (NEW_DATA_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Data Summary File");
+ }
Print (1);
summary_file.File_Type ("New Data Summary File");
@@ -342,6 +395,9 @@
key = Get_Control_String (NEW_GROUP_SUMMARY_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Group Summary File");
+ }
Print (1);
group_sum_file.File_Type ("New Group Summary File");
@@ -361,6 +417,9 @@
key = Get_Control_String (NEW_SPEED_CONTOUR_FILE);
if (!key.empty ()) {
+ if (!perf_flag) {
+ Error ("A Performance File is needed for the Speed Contour File");
+ }
Print (1);
speed_contour_file.File_Type ("New Speed Contour File");
Modified: version7/branches/aecom/Transims70/LinkSum/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Execute.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -109,6 +109,12 @@
Write_Turn_Data ();
}
+ //---- write the turn difference file ----
+
+ if (turn_diff_flag) {
+ Write_Turn_Difference ();
+ }
+
//---- print reports ----
for (int i=First_Report (); i != 0; i=Next_Report ()) {
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,14 +13,14 @@
LinkSum::LinkSum (void) : Select_Service ()
{
Program ("LinkSum");
- Version (7);
+ Version (8);
Title ("Summarize Link Performance Data");
System_File_Type required_files [] = {
- NODE, LINK, PERFORMANCE, END_FILE
+ NODE, LINK, END_FILE
};
System_File_Type optional_files [] = {
- CONNECTION, LANE_USE, LOCATION, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
+ CONNECTION, LANE_USE, LOCATION, PERFORMANCE, TURN_DELAY, NEW_PERFORMANCE, NEW_TURN_DELAY, END_FILE
};
int file_service_keys [] = {
SAVE_LANE_USE_FLOWS, LINK_EQUIVALENCE_FILE, ZONE_EQUIVALENCE_FILE, 0
@@ -44,7 +44,10 @@
{ SELECT_BY_LINK_GROUP, "SELECT_BY_LINK_GROUP", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FILE, "COMPARE_TURN_DELAY_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ COMPARE_TURN_DELAY_FORMAT, "COMPARE_TURN_DELAY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { NEW_TURN_DIFFERENCE_FILE, "NEW_TURN_DIFFERENCE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
+ { NEW_TURN_DIFFERENCE_FORMAT, "NEW_TURN_DIFFERENCE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP},
{ TURN_NODE_RANGE, "TURN_NODE_RANGE", LEVEL0, OPT_KEY, LIST_KEY, "ALL", RANGE_RANGE, NO_HELP },
+ { TURN_NODE_FILE, "TURN_NODE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
{ NEW_LINK_ACTIVITY_FILE, "NEW_LINK_ACTIVITY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_LINK_ACTIVITY_FORMAT, "NEW_LINK_ACTIVITY_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ COPY_LOCATION_FIELDS, "COPY_LOCATION_FIELDS", LEVEL0, OPT_KEY, TEXT_KEY, "", "", NO_HELP },
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,6 +13,7 @@
#include "Db_Array.hpp"
#include "TypeDefs.hpp"
#include "Data_Range.hpp"
+#include "Turn_Diff_File.hpp"
#define NUM_SUM_BINS 1000
#define NUM_PERCENTILES 9
@@ -39,7 +40,8 @@
COMPARE_PERFORMANCE_FILE = 1, COMPARE_PERFORMANCE_FORMAT,
COMPARE_LINK_MAP_FILE, COMPARE_LINK_MAP_FORMAT, SKIP_MAPPED_LINKS,
MINIMUM_LINK_VOLUME, PERSON_BASED_STATISTICS, SELECT_BY_LINK_GROUP,
- COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, TURN_NODE_RANGE,
+ COMPARE_TURN_DELAY_FILE, COMPARE_TURN_DELAY_FORMAT, NEW_TURN_DIFFERENCE_FILE, NEW_TURN_DIFFERENCE_FORMAT,
+ TURN_NODE_RANGE, TURN_NODE_FILE,
NEW_LINK_ACTIVITY_FILE, NEW_LINK_ACTIVITY_FORMAT, COPY_LOCATION_FIELDS,
NEW_ZONE_TRAVEL_FILE, NEW_ZONE_TRAVEL_FORMAT,
NEW_GROUP_TRAVEL_FILE, NEW_GROUP_TRAVEL_FORMAT,
@@ -62,7 +64,7 @@
bool select_link_flag, activity_flag, zone_flag, group_flag, person_flag, periods_flag, ratios_flag, compare_perf_flag;
bool compare_flag, group_select, summary_flag, group_sum_flag, turn_flag, turn_compare_flag, link_map_flag, skip_link_flag;
- bool speed_contour_flag, flip_flag;
+ bool speed_contour_flag, flip_flag, turn_diff_flag;
int increment, num_inc, nerror;
double header_value, cap_factor, minimum_volume, congested_ratio;
String header_label;
@@ -76,8 +78,10 @@
Performance_File compare_file;
Turn_Delay_File turn_compare_file;
+ Turn_Diff_File turn_diff_file;
Data_Range turn_range;
+ Db_File turn_node_file;
Perf_Period_Array compare_perf_array;
Turn_Period_Array compare_turn_array;
@@ -144,6 +148,7 @@
void Write_Link_Data (Data_Group_Itr &group);
void Write_Link_Dir (Dir_Group_Itr &group);
void Write_Turn_Data (void);
+ void Write_Turn_Difference (void);
void Top_100_Report (int number);
void Top_100_Link_Header (void);
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj 2018-07-08 18:22:37 UTC (rev 1708)
@@ -192,6 +192,7 @@
<ClCompile Include="Write_Link_Data.cpp" />
<ClCompile Include="Write_Link_Dir.cpp" />
<ClCompile Include="Write_Turn_Data.cpp" />
+ <ClCompile Include="Write_Turn_Diff.cpp" />
<ClCompile Include="Write_Zone.cpp" />
<ClCompile Include="Zone_Summary.cpp" />
</ItemGroup>
Modified: version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/LinkSum.vcxproj.filters 2018-07-08 18:22:37 UTC (rev 1708)
@@ -118,5 +118,8 @@
<ClCompile Include="Speed_Contour.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Turn_Diff.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/LinkSum/Write_Turn_Data.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -79,11 +79,14 @@
turn_data.To_Index (connect_ptr->To_Index ());
for (period=0; period < nperiod; period++) {
- period_ptr = &turn_period_array [period];
- if (index >= (int) period_ptr->size ()) continue;
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+ turn_period_array.periods->Period_Range (period, low, high);
+
turn_data.Start (low);
turn_data.End (high);
turn_data.Time (turn_ptr->Time ());
Added: version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp (rev 0)
+++ version7/branches/aecom/Transims70/LinkSum/Write_Turn_Diff.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -0,0 +1,120 @@
+//*********************************************************
+// Write_Turn_Diff.cpp - Write the Turn Difference File
+//*********************************************************
+
+#include "LinkSum.hpp"
+
+//---------------------------------------------------------
+// Write_Turn_Difference
+//---------------------------------------------------------
+
+void LinkSum::Write_Turn_Difference (void)
+{
+ int nrec, node, index, period, nperiod;
+ Dtime low, high;
+ bool select_turn_flag;
+
+ Ints_Map node_sort;
+ Ints_Map_Itr sort_itr;
+ Integers ints_rec;
+ Int_Itr int_itr;
+ Int_Map_Itr itr;
+ Dir_Itr dir_itr;
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+ Node_Data *node_ptr;
+ Connect_Data *connect_ptr;
+ Turn_Period *period_ptr, *compare_ptr;
+ Turn_Data *turn_ptr, *base_ptr;
+
+ Show_Message (String ("Writing %s -- Record") % turn_diff_file.File_Type ());
+ Set_Progress ();
+
+ //---- construct the node link liste ----
+
+ select_turn_flag = (turn_range.size () > 0);
+ nperiod = time_periods.Num_Periods ();
+
+ for (itr = node_map.begin (); itr != node_map.end (); itr++) {
+ if (select_turn_flag && !turn_range.In_Range (itr->first)) continue;
+
+ node_sort.insert (Ints_Map_Data (itr->first, ints_rec));
+ }
+
+ //---- assign links to nodes ----
+
+ for (index=0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
+ link_ptr = &link_array [dir_itr->Link ()];
+
+ node = (dir_itr->Dir () == 0) ? link_ptr->Bnode () : link_ptr->Anode ();
+
+ node_ptr = &node_array [node];
+
+ sort_itr = node_sort.find (node_ptr->Node ());
+ if (sort_itr == node_sort.end ()) continue;
+
+ sort_itr->second.push_back (index);
+ }
+
+ //---- process each node ----
+
+ nrec = 0;
+
+ for (sort_itr = node_sort.begin (); sort_itr != node_sort.end (); sort_itr++) {
+ Show_Progress ();
+
+ for (int_itr = sort_itr->second.begin (); int_itr != sort_itr->second.end (); int_itr++) {
+
+ dir_ptr = &dir_array [*int_itr];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.Link (link_ptr->Link ());
+
+ if (dir_ptr->Dir ()) {
+ node_ptr = &node_array [link_ptr->Anode ()];
+ } else {
+ node_ptr = &node_array [link_ptr->Bnode ()];
+ }
+ turn_diff_file.Node (node_ptr->Node ());
+
+ for (index = dir_ptr->First_Connect (); index >= 0; index = connect_ptr->Next_Index ()) {
+ connect_ptr = &connect_array [index];
+
+ dir_ptr = &dir_array [connect_ptr->To_Index ()];
+ link_ptr = &link_array [dir_ptr->Link ()];
+
+ turn_diff_file.To_Link (link_ptr->Link ());
+
+ for (period=0; period < nperiod; period++) {
+ period_ptr = turn_period_array.Period_Ptr (period);
+ if (period_ptr == 0) continue;
+
+ compare_ptr = compare_turn_array.Period_Ptr (period);
+ if (compare_ptr == 0) continue;
+
+ turn_ptr = period_ptr->Data_Ptr (index);
+ if (turn_ptr == 0) continue;
+
+ base_ptr = compare_ptr->Data_Ptr (index);
+ if (base_ptr == 0) continue;
+
+ turn_period_array.periods->Period_Range (period, low, high);
+ turn_diff_file.Start (low);
+ turn_diff_file.End (high);
+
+ turn_diff_file.Turn (turn_ptr->Turn ());
+ turn_diff_file.Base (base_ptr->Turn ());
+ turn_diff_file.Diff (turn_ptr->Turn () - base_ptr->Turn ());
+
+ if (!turn_diff_file.Write (false)) {
+ Error (String ("Writing %s") % turn_diff_file.File_Type ());
+ }
+ nrec++;
+ }
+ }
+ }
+ }
+ End_Progress ();
+
+ Print (2, "Number of New Turn Difference Records = ") << nrec;
+}
Modified: version7/branches/aecom/Transims70/NetPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -78,6 +78,10 @@
script_file.Open (Project_Filename (key));
convert_flag = true;
}
+
+ //---- keep duplicate links ----
+
+ keep_dup_links = Get_Control_Flag (KEEP_DUPLICATE_LINKS);
}
//---- open the input node file ----
Modified: version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -17,7 +17,7 @@
int i, anode, bnode, node, xa, ya, xb, yb, index, lanes, num, ft, at, spd, min_spd, num_approach, num_use, field;
int bearing_in, bearing_out, bear_in, bear_out;
double length, x1, y1, x2, y2, z1, z2, dx, dy, dz, ratio, speed, len;
- bool add_node_flag;
+ bool add_node_flag, duplicate_flag;
Db_Header *file;
Link_File *new_file;
@@ -326,9 +326,10 @@
//---- check for duplicate links ----
+ duplicate_flag = false;
ab_ptr = &ab_map;
ab_itr = ab_ptr->find (Int2_Key (anode, bnode));
-
+
if (ab_itr != ab_ptr->end ()) {
dir_ptr = &dir_array [ab_itr->second];
@@ -339,9 +340,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction A-B = ") << anode << "-" << bnode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -357,9 +360,11 @@
if (split_ab_flag) {
ab_ptr = &ab_map2;
- } else {
+ } else if (!keep_dup_links) {
Warning ("Duplicate Link Direction B-A = ") << bnode << "-" << anode;
continue;
+ } else {
+ duplicate_flag = true;
}
}
}
@@ -384,7 +389,7 @@
}
}
- if (ab_itr == ab_ptr->end ()) {
+ if (ab_itr == ab_ptr->end () || duplicate_flag) {
//---- create a new record ----
@@ -626,7 +631,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
@@ -711,7 +716,7 @@
ab_stat = ab_ptr->insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
- if (!ab_stat.second) {
+ if (!ab_stat.second && !keep_dup_links) {
Warning ("Duplicate Link Direction Number = ") << link_rec.Link ();
continue;
}
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
NetPrep::NetPrep (void) : Data_Service ()
{
Program ("NetPrep");
- Version (11);
+ Version (12);
Title ("Network Preparation Utility");
System_File_Type optional_files [] = {
@@ -27,6 +27,7 @@
{ INPUT_LINK_FILE, "INPUT_LINK_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_LINK_FORMAT, "INPUT_LINK_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_LINK_SCRIPT, "INPUT_LINK_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { KEEP_DUPLICATE_LINKS, "KEEP_DUPLICATE_LINKS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ INPUT_NODE_FILE, "INPUT_NODE_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ INPUT_NODE_FORMAT, "INPUT_NODE_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ INPUT_NODE_SCRIPT, "INPUT_NODE_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
@@ -102,7 +103,7 @@
fac_fld = at_fld = -1;
drop_length = split_length = num_loops = max_angle = min_length = next_loop = num_ratio = 0;
convert_flag = spdcap_flag = link_flag = node_flag = zone_flag = route_flag = new_zone_flag = connector_flag = false;
- link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= false;
+ link_shape_flag = node_shape_flag = zone_shape_flag = int_zone_flag = centroid_flag = expand_flag= keep_dup_links = false;
units_flag = keep_node_flag = keep_link_flag = drop_node_flag = drop_link_flag = shape_flag = correct_flag = false;
length_flag = split_flag = split_ab_flag = collapse_flag = drop_flag = loop_flag = spacing_flag = false;
divided_flag = segment_flag = speed_flag = link_use_flag = approach_flag = link_node_flag = offset_flag = time_flag = false;
Modified: version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/NetPrep/NetPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -36,7 +36,8 @@
protected:
enum NetPrep_Keys {
- INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
+ INPUT_LINK_FILE = 1, INPUT_LINK_FORMAT, INPUT_LINK_SCRIPT, KEEP_DUPLICATE_LINKS,
+ INPUT_NODE_FILE, INPUT_NODE_FORMAT, INPUT_NODE_SCRIPT,
INPUT_ZONE_FILE, INPUT_ZONE_FORMAT, INPUT_ZONE_SCRIPT, INPUT_SPDCAP_FILE, INPUT_SPDCAP_FORMAT,
INPUT_UNITS_OF_MEASURE, FACILITY_INDEX_FIELD, AREA_TYPE_INDEX_FIELD, CONVERSION_SCRIPT,
INTERNAL_ZONE_RANGE, KEEP_ZONE_CONNECTORS_AS_LOCALS,
@@ -72,7 +73,7 @@
int straight_diff, thru_diff, forward_diff, short_links, cross_min, cross_max, next_loop, num_ratio;
int num_periods, new_route, num_match;
bool convert_flag, spdcap_flag, link_flag, node_flag, zone_flag, route_flag, new_zone_flag, connector_flag;
- bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag;
+ bool link_shape_flag, node_shape_flag, zone_shape_flag, int_zone_flag, centroid_flag, expand_flag, keep_dup_links;
bool units_flag, keep_node_flag, keep_link_flag, drop_node_flag, drop_link_flag, shape_flag, correct_flag;
bool length_flag, split_flag, split_ab_flag, collapse_flag, drop_flag, short_flag, loop_flag, spacing_flag;
bool divided_flag, segment_flag, speed_flag, link_use_flag, approach_flag, link_node_flag, offset_flag, time_flag;
Modified: version7/branches/aecom/Transims70/PlanPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -160,7 +160,7 @@
shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
shift_start_flag = (shift_rate > 0.0);
} else if (Check_Control_Key (SHIFT_END_PERCENTAGE)) {
- shift_rate = Get_Control_Double (SHIFT_START_PERCENTAGE);
+ shift_rate = Get_Control_Double (SHIFT_END_PERCENTAGE);
shift_end_flag = (shift_rate > 0.0);
}
if (shift_rate > 0.0) {
@@ -186,6 +186,8 @@
Error ("Shift Time Range is Out of Range");
}
shift_factor = (double) (high_to - low_to) / (high_from - low_from);
+
+ shift_select_flag = Get_Control_Flag (SHIFT_SELECTED_PLANS);
}
//---- reroute plan file ----
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
PlanPrep::PlanPrep (void) : Select_Service ()
{
Program ("PlanPrep");
- Version (13);
+ Version (14);
Title ("Travel Plan Processing Utility");
System_File_Type optional_files [] = {
@@ -42,6 +42,7 @@
{ SHIFT_END_PERCENTAGE, "SHIFT_END_PERCENTAGE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0..100.0", NO_HELP },
{ SHIFT_FROM_TIME_RANGE, "SHIFT_FROM_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
{ SHIFT_TO_TIME_RANGE, "SHIFT_TO_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "", TIME_RANGE, NO_HELP },
+ { SHIFT_SELECTED_PLANS, "SHIFT_SELECTED_PLANS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP},
{ REROUTE_PLAN_FILE, "REROUTE_PLAN_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ REROUTE_PLAN_FORMAT, "REROUTE_PLAN_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ REROUTE_TIME_RANGE, "REROUTE_TIME_RANGE", LEVEL0, OPT_KEY, TEXT_KEY, "0:00..24:00", TIME_RANGE, NO_HELP },
@@ -63,7 +64,7 @@
num_repair = repair_plans = num_subarea_merge = num_new_skims = num_constraints = num_merge_files = check_sum = check_sum_type = 0;
select_flag = merge_flag = subarea_flag = combine_flag = output_flag = new_plan_flag = new_trip_flag = new_select_flag = false;
repair_flag = skim_flag = plan_skim_flag = plan_flag = check_sum_flag = export_flag = false;
- shift_start_flag = shift_end_flag = reroute_flag = false;
+ shift_start_flag = shift_end_flag = shift_select_flag = reroute_flag = false;
shift_rate = 0.0;
shift_factor = 1.0;
num_shifted = 0;
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -28,7 +28,7 @@
enum PlanPrep_Keys {
MERGE_PLAN_FILE = 1, MERGE_PLAN_FORMAT, MERGE_SUBAREA_LEGS, REPAIR_PLAN_LEGS, CHECK_PLAN_SUMS,
CONSTRAIN_PARKRIDE_LOTS, MAX_PARKING_DEMAND_RATIO, CONSTRAIN_TRANSIT_LOADS, MAX_ROUTE_LOAD_FACTOR,
- SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE,
+ SHIFT_START_PERCENTAGE, SHIFT_END_PERCENTAGE, SHIFT_FROM_TIME_RANGE, SHIFT_TO_TIME_RANGE, SHIFT_SELECTED_PLANS,
REROUTE_PLAN_FILE, REROUTE_PLAN_FORMAT, REROUTE_TIME_RANGE, REROUTE_PERCENTAGE,
};
virtual void Program_Control (void);
@@ -47,7 +47,7 @@
int check_sum, check_sum_type, num_reroute, num_shifted;
bool select_flag, merge_flag, subarea_flag, combine_flag, output_flag, new_plan_flag, new_trip_flag, new_select_flag;
bool repair_flag, plan_skim_flag, skim_flag, plan_flag, check_sum_flag, export_flag;
- bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, reroute_flag;
+ bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, shift_select_flag, reroute_flag;
double max_ratio, max_factor, shift_rate, shift_factor, reroute_percent;
Dtime low_from, high_from, low_to, high_to, reroute_start, reroute_end;
Time_Periods shift_from, shift_to;
Modified: version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -13,7 +13,7 @@
string process_type;
Dtime shift, duration;
double prob;
- bool keep_flag, out_flag;
+ bool keep_flag, out_flag, shift_flag;
Trip_Index trip_index;
Time_Index time_index;
@@ -24,7 +24,7 @@
//---- selection checks ----
- if (!exe->Select_Plan_Data (*plan_ptr)) {
+ if (!exe->shift_select_flag && !exe->Select_Plan_Data (*plan_ptr)) {
keep_flag = false;
} else {
@@ -73,46 +73,55 @@
keep_flag = false;
} else {
+
+ if (exe->shift_select_flag) {
+ shift_flag = exe->Select_Plan_Data (*plan_ptr);
+ } else {
+ shift_flag = true;
+ }
- //---- shift start times ----
+ if (shift_flag) {
- if (exe->shift_start_flag) {
- out_flag = false;
+ //---- shift start times ----
- if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_start_flag) {
+ out_flag = false;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ if (plan_ptr->Depart () >= exe->low_from && plan_ptr->Depart () <= exe->high_from) {
+ prob = random_thread.Probability ();
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- plan_ptr->Depart (exe->low_to + shift);
- plan_ptr->Arrive (plan_ptr->Depart () + duration);
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Depart () - exe->low_from));
- plan_ptr->Start (plan_ptr->Depart ());
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Depart (exe->low_to + shift);
+ plan_ptr->Arrive (plan_ptr->Depart () + duration);
+
+ plan_ptr->Start (plan_ptr->Depart ());
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
+
}
- }
+ } else if (exe->shift_end_flag) { //---- shift the end time ----
+ out_flag = false;
- } else if (exe->shift_end_flag) { //---- shift the end time ----
- out_flag = false;
+ if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
+ prob = random_thread.Probability ();
- if (plan_ptr->Arrive () >= exe->low_from && plan_ptr->Arrive () <= exe->high_from) {
- prob = random_thread.Probability ();
+ if (exe->shift_rate > prob) {
+ out_flag = true;
- if (exe->shift_rate > prob) {
- out_flag = true;
+ duration = plan_ptr->Arrive () - plan_ptr->Depart ();
+ shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
- duration = plan_ptr->Arrive () - plan_ptr->Depart ();
- shift = (int) (exe->shift_factor * (plan_ptr->Arrive () - exe->low_from));
-
- plan_ptr->Arrive (exe->low_to + shift);
- plan_ptr->End (plan_ptr->Arrive ());
- num_shifted++;
+ plan_ptr->Arrive (exe->low_to + shift);
+ plan_ptr->End (plan_ptr->Arrive ());
+ num_shifted++;
+ }
}
}
}
Modified: version7/branches/aecom/Transims70/PlanSelect/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -49,6 +49,12 @@
}
vol_cnt_file.Open (Project_Filename (key));
+ Mode_Range_Key (MODE_DELETE_LIMITS, delete_flag);
+ Mode_Range_Key (MODE_ADD_LIMITS, add_flag);
+
new_hhold = Get_Control_Integer (NEW_HOUSEHOLD_ID);
+
+ num_iter = Get_Control_Integer (NUMBER_OF_ITERATIONS);
}
+ if (num_iter == 0) num_iter = 1;
}
Modified: version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2018-06-01 17:11:33 UTC (rev 1707)
+++ version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2018-07-08 18:22:37 UTC (rev 1708)
@@ -11,7 +11,7 @@
PlanSelect::PlanSelect (void) : Select_Service ()
{
Program ("PlanSelect");
- Version (3);
+ Version (7);
Title (...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-06-01 17:11:35
|
Revision: 1707
http://sourceforge.net/p/transims/code/1707
Author: davidroden
Date: 2018-06-01 17:11:33 +0000 (Fri, 01 Jun 2018)
Log Message:
-----------
TRANSIMS Version 7.1 -- AECOM Branch 1704
SysLib
Check_Def method was added to the Db_Header class to enable the user to force the software to always check and repair the definition file associated with selected CSV files. The copyright date was changed to 2018.
NetPrep
The program now checks and copies data from a Subarea field in the Input Node file.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp
version7/branches/aecom/Transims70/Include/Db_Header.hpp
version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/branches/aecom/Transims70/SysLib/Service/Message_Service.cpp
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp 2018-05-03 01:02:58 UTC (rev 1706)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp 2018-06-01 17:11:33 UTC (rev 1707)
@@ -11,7 +11,7 @@
void ArcPerf::Write_Performance (void)
{
int dir, period, index, use_index, num;
- double length, speed;
+ double length; // , speed;
Dtime low, high, time, delay;
String buffer;
Modified: version7/branches/aecom/Transims70/Include/Db_Header.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Db_Header.hpp 2018-05-03 01:02:58 UTC (rev 1706)
+++ version7/branches/aecom/Transims70/Include/Db_Header.hpp 2018-06-01 17:11:33 UTC (rev 1707)
@@ -40,6 +40,9 @@
bool Custom_Header (void) { return (_custom_header); }
void Custom_Header (bool flag) { _custom_header = flag; }
+
+ bool Check_Def (void) { return (_check_def); }
+ void Check_Def (bool flag) { _check_def = flag; }
int LinkDir_Type (void) { return (_linkdir_type); }
void LinkDir_Type (Direction_Type type) { _linkdir_type = type; }
@@ -130,7 +133,7 @@
//#endif
bool Read_Def_Header (void);
- bool _custom_header;
+ bool _custom_header, _check_def;
int _header_lines, _scan_lines, _notes, _num_nest, _linkdir_type;
Trip_Sort_Type _sort_type;
String _header_record;
Modified: version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp 2018-05-03 01:02:58 UTC (rev 1706)
+++ version7/branches/aecom/Transims70/NetPrep/Input_Nodes.cpp 2018-06-01 17:11:33 UTC (rev 1707)
@@ -10,7 +10,7 @@
void NetPrep::Input_Nodes (void)
{
- int node, node_field, x_field, y_field, z_field, notes_field;
+ int node, node_field, x_field, y_field, z_field, notes_field, subarea_field;
double x, y, z;
Node_File *new_file;
@@ -40,6 +40,7 @@
}
node_field = file->Required_Field (NODE_FIELD_NAMES);
notes_field = file->Optional_Field (NOTES_FIELD_NAMES);
+ subarea_field = file->Optional_Field ("SUBAREA", "AREA");
//---- read each node record----
@@ -125,6 +126,7 @@
node_rec.Y (Round (y));
node_rec.Z (Round (z));
node_rec.Notes (file->Get_String (notes_field));
+ node_rec.Subarea (file->Get_Integer (subarea_field));
node_rec.Count (0);
map_stat = node_map.insert (Int_Map_Data (node, (int) node_array.size ()));
Modified: version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp 2018-05-03 01:02:58 UTC (rev 1706)
+++ version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp 2018-06-01 17:11:33 UTC (rev 1707)
@@ -52,6 +52,7 @@
Header_Lines (1);
Scan_Lines ();
Custom_Header (false);
+ Check_Def (false);
LinkDir_Type (LINK_DIR);
Sort_Type (UNKNOWN_SORT);
_notes = _num_nest = -1;
@@ -64,6 +65,7 @@
Header_Lines (1);
Scan_Lines ();
Custom_Header (false);
+ Check_Def (false);
LinkDir_Type (LINK_DIR);
Sort_Type (UNKNOWN_SORT);
_notes = _num_nest = -1;
@@ -331,7 +333,11 @@
//---- validate the definition file ----
- if (stat) {
+ if (Check_Def ()) {
+ Clear_Fields ();
+ stat = false;
+ _scan_lines = SCAN_ALL_RECORDS;
+ } else if (stat) {
nfield = 0;
for (i=0; i < 2; i++) {
Modified: version7/branches/aecom/Transims70/SysLib/Service/Message_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Service/Message_Service.cpp 2018-05-03 01:02:58 UTC (rev 1706)
+++ version7/branches/aecom/Transims70/SysLib/Service/Message_Service.cpp 2018-06-01 17:11:33 UTC (rev 1707)
@@ -13,7 +13,7 @@
_status = DONE;
Program ("Program");
Version (0);
- CopyRight (2017);
+ CopyRight (2018);
time (&_starttime);
_progress = 0;
_warnings = 0;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-05-03 01:03:02
|
Revision: 1706
http://sourceforge.net/p/transims/code/1706
Author: davidroden
Date: 2018-05-03 01:02:58 +0000 (Thu, 03 May 2018)
Log Message:
-----------
TRANSIMS Version 7 updated from AECOM branch 1705
Modified Paths:
--------------
version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
version7/trunk/Transims70/ArcPerf/ArcPerf.hpp
version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj
version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj.filters
version7/trunk/Transims70/ArcPerf/Control.cpp
version7/trunk/Transims70/ArcPerf/Execute.cpp
version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
version7/trunk/Transims70/ArcPlan/Get_Trip_Data.cpp
version7/trunk/Transims70/Converge_Service/Demand_Updates.cpp
version7/trunk/Transims70/Data_Service/Read_Connections.cpp
version7/trunk/Transims70/Data_Service/Set_Link_Direction.cpp
version7/trunk/Transims70/FileFormat/Control.cpp
version7/trunk/Transims70/FileFormat/FileFormat.cpp
version7/trunk/Transims70/FileFormat/FileFormat.hpp
version7/trunk/Transims70/File_Service/File_Service.vcxproj
version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
version7/trunk/Transims70/File_Service/Trip_File.cpp
version7/trunk/Transims70/GTFSData/Build_Routes.cpp
version7/trunk/Transims70/GTFSData/GTFSData.cpp
version7/trunk/Transims70/GTFSData/Offset_Points.cpp
version7/trunk/Transims70/GridData/Control.cpp
version7/trunk/Transims70/GridData/Execute.cpp
version7/trunk/Transims70/GridData/GridData.cpp
version7/trunk/Transims70/GridData/GridData.hpp
version7/trunk/Transims70/GridData/GridData.vcxproj
version7/trunk/Transims70/GridData/GridData.vcxproj.filters
version7/trunk/Transims70/GridData/Write_Grid.cpp
version7/trunk/Transims70/Include/Best_List.hpp
version7/trunk/Transims70/Include/Control_Service.hpp
version7/trunk/Transims70/Include/Data_Pack.hpp
version7/trunk/Transims70/Include/Message_Service.hpp
version7/trunk/Transims70/Include/Static_Service.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/NetPrep/Input_Links.cpp
version7/trunk/Transims70/PathSkim/Execute.cpp
version7/trunk/Transims70/PathSkim/PathSkim.cpp
version7/trunk/Transims70/PerfPrep/Control.cpp
version7/trunk/Transims70/PerfPrep/Execute.cpp
version7/trunk/Transims70/PerfPrep/Get_Performance_Data.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.hpp
version7/trunk/Transims70/PlanSelect/Control.cpp
version7/trunk/Transims70/PlanSelect/Execute.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/PlanSelect/PlanSelect.hpp
version7/trunk/Transims70/PlanSelect/PlanSelect.vcxproj
version7/trunk/Transims70/PlanSelect/PlanSelect.vcxproj.filters
version7/trunk/Transims70/PlanSelect/Read_Plans.cpp
version7/trunk/Transims70/Simulator/Execute.cpp
version7/trunk/Transims70/Simulator/Simulator.cpp
version7/trunk/Transims70/Simulator_Service/Check_Behind.cpp
version7/trunk/Transims70/Simulator_Service/Control.cpp
version7/trunk/Transims70/Simulator_Service/Global_Data.cpp
version7/trunk/Transims70/Simulator_Service/Load_Vehicle.cpp
version7/trunk/Transims70/Simulator_Service/Look_Ahead.cpp
version7/trunk/Transims70/Simulator_Service/Move_Vehicle.cpp
version7/trunk/Transims70/Simulator_Service/Occupancy_Output.cpp
version7/trunk/Transims70/Simulator_Service/Plan_Processing.cpp
version7/trunk/Transims70/Simulator_Service/Sim_Control_Update.cpp
version7/trunk/Transims70/Simulator_Service/Sim_Dir_Data.hpp
version7/trunk/Transims70/Simulator_Service/Sum_Path.cpp
version7/trunk/Transims70/Simulator_Service/Traffic_Control.cpp
version7/trunk/Transims70/Simulator_Service/Travel_Processing.cpp
version7/trunk/Transims70/Simulator_Service/Travel_Step.cpp
version7/trunk/Transims70/SubareaNet/Control.cpp
version7/trunk/Transims70/SubareaNet/Get_Link_Data.cpp
version7/trunk/Transims70/SubareaNet/SubareaNet.cpp
version7/trunk/Transims70/SubareaNet/SubareaNet.hpp
version7/trunk/Transims70/SubareaNet/SubareaNet.vcxproj
version7/trunk/Transims70/SubareaPlans/Plan_Processing.cpp
version7/trunk/Transims70/SubareaPlans/SubareaPlans.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_File.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/trunk/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/trunk/Transims70/SysLib/Service/Control_Service.cpp
version7/trunk/Transims70/SysLib/Service/Execution_Service.cpp
version7/trunk/Transims70/SysLib/Service/Message_Service.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/Tools/Best_List.cpp
version7/trunk/Transims70/SysLib/Tools/Projection.cpp
version7/trunk/Transims70/SysLib/Tools/String.cpp
version7/trunk/Transims70/TransimsNet/Control.cpp
version7/trunk/Transims70/TransimsNet/Execute.cpp
version7/trunk/Transims70/TransimsNet/TransimsNet.cpp
version7/trunk/Transims70/TransimsNet/TransimsNet.hpp
version7/trunk/Transims70/TripSum/Control.cpp
version7/trunk/Transims70/TripSum/TripSum.cpp
version7/trunk/Transims70/VolSpdData/Control.cpp
version7/trunk/Transims70/VolSpdData/Read_Selection.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.hpp
version7/trunk/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp
version7/trunk/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp
version7/trunk/Transims70/GridData/Read_Grid_Select.cpp
version7/trunk/Transims70/Include/Vol_Spd_Diff_Data_File.hpp
version7/trunk/Transims70/PlanSelect/Read_Vol_Cnt.cpp
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (10);
+ Version (11);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
@@ -44,6 +44,8 @@
{ LINK_DIRECTION_FORMAT, "LINK_DIRECTION_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ VOL_SPD_DIFF_FILE, "VOL_SPD_DIFF_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ VOL_SPD_DIFF_FORMAT, "VOL_SPD_DIFF_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { VOL_SPD_DIFF_DATA_FILE, "VOL_SPD_DIFF_DATA_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
+ { VOL_SPD_DIFF_DATA_FORMAT, "VOL_SPD_DIFF_DATA_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP},
{ SYSTEM_EVENT_FILE, "SYSTEM_EVENT_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ SYSTEM_EVENT_FORMAT, "SYSTEM_EVENT_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ NEW_ARC_LINK_DATA_FILE, "NEW_ARC_LINK_DATA_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -53,6 +55,7 @@
{ NEW_ARC_PERFORMANCE_FILE, "NEW_ARC_PERFORMANCE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_VOLUME_SPEED_FILE, "NEW_ARC_VOLUME_SPEED_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_VOL_SPD_DIFF_FILE, "NEW_ARC_VOL_SPD_DIFF_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_ARC_VOL_SPD_DIFF_DATA_FILE, "NEW_ARC_VOL_SPD_DIFF_DATA_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
{ NEW_ARC_INTERSECTION_FILE, "NEW_ARC_INTERSECTION_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_TURN_DELAY_FILE, "NEW_ARC_TURN_DELAY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_TRAFFIC_IMAGE, "NEW_ARC_TRAFFIC_IMAGE", LEVEL1, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -81,10 +84,10 @@
Sum_Flow_Flag (true);
vc_field = cong_time_field = cong_vmt_field = cong_vht_field = max_period_field = -1;
- center_flag = lanes_flag = turn_flag = subarea_flag = index_flag = image_flag = shape_flag = max_period_flag = person_flag = false;
+ center_flag = lanes_flag = turn_flag = subarea_flag = index_flag = image_flag = shape_flag = max_period_flag = person_flag = vol_spd_diff_data_flag = false;
perf_flag = vol_spd_flag = vol_spd_diff_flag = link_dir_flag = link_data_flag = intersection_flag = event_flag = link_period_flag = dir_period_flag = false;
green_field = yellow_field = red_field = split_field = 0;
- link_data_width_fld = link_dir_width_fld = perf_width_fld = vol_spd_width_fld = vol_spd_diff_width_fld = -1;
+ link_data_width_fld = link_dir_width_fld = perf_width_fld = vol_spd_width_fld = vol_spd_diff_width_fld = vol_spd_diff_data_width_fld = -1;
}
//---------------------------------------------------------
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.hpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -14,6 +14,7 @@
#include "Dtime.hpp"
#include "Shape_Tools.hpp"
#include "Vol_Spd_Diff_File.hpp"
+#include "Vol_Spd_Diff_Data_File.hpp"
//---------------------------------------------------------
// ArcPerf - execution class definition
@@ -29,9 +30,9 @@
protected:
enum ArcPerf_Keys {
LINK_DATA_FILE = 1, LINK_DATA_FORMAT, LINK_DIRECTION_FILE, LINK_DIRECTION_FORMAT,
- VOL_SPD_DIFF_FILE, VOL_SPD_DIFF_FORMAT, SYSTEM_EVENT_FILE, SYSTEM_EVENT_FORMAT,
+ VOL_SPD_DIFF_FILE, VOL_SPD_DIFF_FORMAT, VOL_SPD_DIFF_DATA_FILE, VOL_SPD_DIFF_DATA_FORMAT, SYSTEM_EVENT_FILE, SYSTEM_EVENT_FORMAT,
NEW_ARC_LINK_DATA_FILE, LINK_DATA_BY_PERIOD, NEW_ARC_LINK_DIR_FILE, LINK_DIR_BY_PERIOD,
- NEW_ARC_PERFORMANCE_FILE, NEW_ARC_VOLUME_SPEED_FILE, NEW_ARC_VOL_SPD_DIFF_FILE,
+ NEW_ARC_PERFORMANCE_FILE, NEW_ARC_VOLUME_SPEED_FILE, NEW_ARC_VOL_SPD_DIFF_FILE, NEW_ARC_VOL_SPD_DIFF_DATA_FILE,
NEW_ARC_INTERSECTION_FILE, NEW_ARC_TURN_DELAY_FILE, NEW_ARC_TRAFFIC_IMAGE, TRAFFIC_IMAGE_ATTRIBUTE,
VEHICLE_TYPE_DISTRIBUTION, ADD_LINK_DIRECTION_INDEX, IGNORE_TIME_RANGE_FIELDS, PERIOD_MAXIMUM_FIELD,
PERSON_BASED_STATISTICS,
@@ -47,10 +48,11 @@
Performance_File *perf_file;
Volume_Speed_File *vol_spd_file;
Vol_Spd_Diff_File vol_spd_diff_file;
+ Vol_Spd_Diff_Data_File vol_spd_diff_data_file;
Turn_Delay_File *turn_file;
Arcview_File arcview_perf, arcview_turn, arcview_link_dir, arcview_node;
- Arcview_File arcview_link_data, arcview_vol_spd, arcview_vol_spd_diff;
+ Arcview_File arcview_link_data, arcview_vol_spd, arcview_vol_spd_diff, arcview_vol_spd_diff_data;
Points points;
@@ -57,10 +59,10 @@
int length_field, lane_len_field, vc_field, vhd_field;
int cong_time_field, cong_vmt_field, cong_vht_field, max_period_field;
int max_angle, min_length, green_field, yellow_field, red_field, split_field;
- int perf_width_fld, vol_spd_width_fld, vol_spd_diff_width_fld, link_dir_width_fld, link_data_width_fld;
+ int perf_width_fld, vol_spd_width_fld, vol_spd_diff_width_fld, vol_spd_diff_data_width_fld, link_dir_width_fld, link_data_width_fld;
bool turn_flag, subarea_flag, index_flag, image_flag, link_period_flag, dir_period_flag, person_flag;
bool perf_flag, vol_spd_flag, link_dir_flag, link_data_flag, intersection_flag, event_flag, max_period_flag;
- bool vol_spd_diff_flag;
+ bool vol_spd_diff_flag, vol_spd_diff_data_flag;
String shapename, volspdname, diffname, turnname, nodename, linkname, dirname;
Doubles type_share;
@@ -104,6 +106,7 @@
void Write_Performance (void);
void Write_Volume_Speed (void);
void Write_Vol_Spd_Diff (void);
+ void Write_Vol_Spd_Diff_Data (void);
void Maximum_Performance (void);
void Write_Turn (void);
void Write_Image (void);
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj 2018-05-03 01:02:58 UTC (rev 1706)
@@ -173,6 +173,7 @@
<ClCompile Include="Write_Turn.cpp" />
<ClCompile Include="Write_Volume_Speed.cpp" />
<ClCompile Include="Write_Vol_Spd_Diff.cpp" />
+ <ClCompile Include="Write_Vol_Spd_Diff_Data.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data_Service\Data_Service.vcxproj">
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.vcxproj.filters 2018-05-03 01:02:58 UTC (rev 1706)
@@ -58,5 +58,8 @@
<ClCompile Include="Write_Vol_Spd_Diff.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Vol_Spd_Diff_Data.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/ArcPerf/Control.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/Control.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -72,7 +72,18 @@
vol_spd_diff_file.Open (Project_Filename (key));
}
- if (!perf_in && !vol_spd_in && !link_data_flag && !link_dir_flag && !vol_spd_diff_flag) {
+ //---- get the vol-spd diff data file ----
+
+ key = Get_Control_String (VOL_SPD_DIFF_DATA_FILE);
+
+ if (!key.empty ()) {
+ vol_spd_diff_data_flag = true;
+
+ Print (1);
+ vol_spd_diff_data_file.Open (Project_Filename (key));
+ }
+
+ if (!perf_in && !vol_spd_in && !link_data_flag && !link_dir_flag && !vol_spd_diff_flag && !vol_spd_diff_data_flag) {
Error ("A Performance, Volume-Speed, Vol-Spd Diff, Link Data, or Link Direction file are Required");
}
@@ -356,6 +367,47 @@
Print_Filename (2, arcview_vol_spd_diff.File_Type (), key);
}
+ //---- get the arcview vol spd diff data file ----
+
+ key = Get_Control_String (NEW_ARC_VOL_SPD_DIFF_DATA_FILE);
+
+ if (!key.empty ()) {
+ if (!vol_spd_diff_data_flag) {
+ Error ("The Input Vol Spd Diff Data File is Missing");
+ }
+ key.Split_Last (ext, ".");
+
+ diffname = Project_Filename (key);
+
+ arcview_vol_spd_diff_data.File_Type ("New Arc Vol Spd Diff Data File");
+ arcview_vol_spd_diff_data.File_Access (CREATE);
+ if (bandwidth_flag) {
+ arcview_vol_spd_diff_data.Shape_Type (POLYGON);
+ vol_spd_diff_data_width_fld = vol_spd_diff_data_file.Required_Field (bandwidth_field);
+ } else {
+ arcview_vol_spd_diff_data.Shape_Type (VECTOR);
+ }
+ arcview_vol_spd_diff_data.Set_Projection ();
+
+ //---- copy the link fields ----
+
+ binary = (vol_spd_diff_data_file.Record_Format () == BINARY);
+ nfield = vol_spd_diff_data_file.Num_Fields ();
+
+ for (i = 0; i < nfield; i++) {
+ fld = vol_spd_diff_data_file.Field (i);
+ if (fld != 0) {
+ arcview_vol_spd_diff_data.Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary, NO_NEST);
+ }
+ }
+
+ //---- set the file name ----
+
+ key = diffname + "_time_of_day.shp";
+
+ Print_Filename (2, arcview_vol_spd_diff.File_Type (), key);
+ }
+
//---- get the arcview intersection file ----
key = Get_Control_String (NEW_ARC_INTERSECTION_FILE);
Modified: version7/trunk/Transims70/ArcPerf/Execute.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Execute.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/Execute.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -42,6 +42,12 @@
Write_Vol_Spd_Diff ();
}
+ //---- write the arcview vol spd diff data file ----
+
+ if (vol_spd_diff_data_flag) {
+ Write_Vol_Spd_Diff_Data ();
+ }
+
//---- write the arcview intersection file ----
if (intersection_flag) {
Modified: version7/trunk/Transims70/ArcPerf/Write_Performance.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/Write_Performance.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,7 +11,7 @@
void ArcPerf::Write_Performance (void)
{
int dir, period, index, use_index, num;
- double length;
+ double length, speed;
Dtime low, high, time, delay;
String buffer;
@@ -97,6 +97,13 @@
perf_file->Enter (data.Enter ());
perf_file->Exit (data.Exit ());
perf_file->Flow (data.Flow ());
+
+ //if (data.Speed () > 0) {
+ // speed = data.Speed () * data.Time_Ratio () / 100.0;
+ // if (speed < 36.67) {
+ // data.Time_Ratio (36.67 * 100.0 / data.Speed ());
+ // }
+ //}
perf_file->Speed (data.Speed ());
perf_file->Time_Ratio (data.Time_Ratio ());
perf_file->Delay (data.Delay ());
Modified: version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -76,7 +76,7 @@
link_ptr = &link_array [map_itr->second];
- Draw_Link (arcview_vol_spd_diff, link_ptr, dir, vol_spd_width_fld);
+ Draw_Link (arcview_vol_spd_diff, link_ptr, dir, vol_spd_diff_width_fld);
}
}
link = dir = -1;
Copied: version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp (from rev 1705, version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp)
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp (rev 0)
+++ version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -0,0 +1,147 @@
+//*********************************************************
+// Write_Vol_Spd_Diff_Data.cpp - write the arcview vol-spd diff data file
+//*********************************************************
+
+#include "ArcPerf.hpp"
+
+//---------------------------------------------------------
+// Write_Vol_Spd_Diff_Data
+//---------------------------------------------------------
+
+void ArcPerf::Write_Vol_Spd_Diff_Data (void)
+{
+ int link, dir, period, num;
+ double vht;
+ Dtime low, high, start, end;
+ String buffer;
+ bool found;
+
+ Int_Map_Itr map_itr;
+ Link_Data *link_ptr;
+ Vol_Spd_Diff_Data_File vol_spd_diff_out;
+
+ vol_spd_diff_out.Lane_Use_Flag (vol_spd_diff_data_file.Lane_Use_Flag ());
+ vol_spd_diff_out.Data_Type (vol_spd_diff_data_file.Data_Type ());
+
+ vol_spd_diff_out.Copy_Fields (vol_spd_diff_data_file);
+
+ vol_spd_diff_out.Create_Fields ();
+
+ //---- process each time period ----
+
+ Print (1);
+ num = sum_periods.Num_Periods ();
+
+ for (period = 0; period < num; period++) {
+
+ sum_periods.Period_Range (period, low, high);
+
+ //---- create a new shape file ----
+
+ buffer = String ("%s_%s_%s.shp") % diffname % low.Time_Label (true) % high.Time_Label (true);
+
+ arcview_vol_spd_diff.First_Open (true);
+
+ if (!arcview_vol_spd_diff_data.Open (buffer)) {
+ File_Error ("Opening ArcView Vol Spd Diff Data File", arcview_vol_spd_diff_data.Shape_Filename ());
+ }
+ arcview_vol_spd_diff_data.Write_Header ();
+
+ Show_Message (String ("Writing %s %s -- Link") % arcview_vol_spd_diff_data.File_Type () % high.Time_String ());
+ Set_Progress ();
+
+ vol_spd_diff_out.Start (low);
+ vol_spd_diff_out.End (high);
+
+ vol_spd_diff_data_file.Rewind ();
+
+ link = dir = -1;
+ found = false;
+
+ while (vol_spd_diff_data_file.Read ()) {
+ Show_Progress ();
+
+ start = vol_spd_diff_data_file.Start ();
+ end = vol_spd_diff_data_file.End ();
+
+ if (start < low || end > high || (link > 0 && link != vol_spd_diff_data_file.Link ()) || (dir >= 0 && dir != vol_spd_diff_data_file.Dir ())) {
+ if (found) {
+ map_itr = link_map.find (link);
+
+ if (map_itr != link_map.end ()) {
+ vol_spd_diff_out.Link (link);
+ vol_spd_diff_out.Dir (dir);
+
+ arcview_vol_spd_diff_data.Copy_Fields (vol_spd_diff_out);
+
+ link_ptr = &link_array [map_itr->second];
+
+ Draw_Link (arcview_vol_spd_diff_data, link_ptr, dir, vol_spd_diff_data_width_fld);
+ }
+ }
+ link = dir = -1;
+ found = false;
+ if (start < low || end > high) continue;
+ }
+ if (link < 0) {
+ link = vol_spd_diff_data_file.Link ();
+ dir = vol_spd_diff_data_file.Dir ();
+ found = true;
+
+ vol_spd_diff_out.Vol0 (vol_spd_diff_data_file.Vol0 ());
+ vol_spd_diff_out.Vol1 (vol_spd_diff_data_file.Vol1 ());
+ vol_spd_diff_out.Vdiff (vol_spd_diff_data_file.Vdiff ());
+ vol_spd_diff_out.Spd0 (vol_spd_diff_data_file.Spd0 ());
+ vol_spd_diff_out.Spd1 (vol_spd_diff_data_file.Spd1 ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_data_file.Sdiff ());
+ vol_spd_diff_out.Use_Vol0 (vol_spd_diff_data_file.Use_Vol0 ());
+ vol_spd_diff_out.Use_Vol1 (vol_spd_diff_data_file.Use_Vol1 ());
+ vol_spd_diff_out.Use_Vdiff (vol_spd_diff_data_file.Use_Vdiff ());
+ vol_spd_diff_out.Use_Spd0 (vol_spd_diff_data_file.Use_Spd0 ());
+ vol_spd_diff_out.Use_Spd1 (vol_spd_diff_data_file.Use_Spd1 ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_data_file.Use_Sdiff ());
+ vol_spd_diff_out.Notes (vol_spd_diff_data_file.Notes ());
+ } else {
+ vht = (vol_spd_diff_out.Vol0 () * vol_spd_diff_out.Spd0 () + vol_spd_diff_data_file.Vol0 () * vol_spd_diff_data_file.Spd0 ());
+ vol_spd_diff_out.Vol0 (vol_spd_diff_out.Vol0 () + vol_spd_diff_data_file.Vol0 ());
+ if (vol_spd_diff_out.Vol0 () != 0) {
+ vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ } else {
+ vol_spd_diff_out.Spd0 (0);
+ }
+
+ vht = (vol_spd_diff_out.Vol1 () * vol_spd_diff_out.Spd1 () + vol_spd_diff_data_file.Vol1 () * vol_spd_diff_data_file.Spd1 ());
+ vol_spd_diff_out.Vol1 (vol_spd_diff_out.Vol1 () + vol_spd_diff_data_file.Vol1 ());
+ if (vol_spd_diff_out.Vol1 () != 0) {
+ vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ } else {
+ vol_spd_diff_out.Spd1 (0);
+ }
+
+ vol_spd_diff_out.Vdiff (vol_spd_diff_out.Vdiff () + vol_spd_diff_data_file.Vdiff ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_out.Spd1 () - vol_spd_diff_out.Spd0 ());
+
+ vht = (vol_spd_diff_out.Use_Vol0 () * vol_spd_diff_out.Use_Spd0 () + vol_spd_diff_data_file.Use_Vol0 () * vol_spd_diff_data_file.Use_Spd0 ());
+ vol_spd_diff_out.Use_Vol0 (vol_spd_diff_out.Use_Vol0 () + vol_spd_diff_data_file.Use_Vol0 ());
+ if (vol_spd_diff_out.Use_Vol0 () != 0) {
+ vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ } else {
+ vol_spd_diff_out.Use_Spd0 (0);
+ }
+
+ vht = (vol_spd_diff_out.Use_Vol1 () * vol_spd_diff_out.Use_Spd1 () + vol_spd_diff_data_file.Use_Vol1 () * vol_spd_diff_data_file.Use_Spd1 ());
+ vol_spd_diff_out.Use_Vol1 (vol_spd_diff_out.Use_Vol1 () + vol_spd_diff_data_file.Use_Vol1 ());
+ if (vol_spd_diff_out.Use_Vol1 () != 0) {
+ vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
+ } else {
+ vol_spd_diff_out.Use_Spd1 (0);
+ }
+ vol_spd_diff_out.Use_Vdiff (vol_spd_diff_out.Use_Vdiff () + vol_spd_diff_data_file.Use_Vdiff ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_out.Use_Spd1 () - vol_spd_diff_out.Use_Spd0 ());
+ }
+ }
+ End_Progress ();
+
+ arcview_vol_spd_diff_data.Close ();
+ }
+}
Modified: version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (5);
+ Version (6);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/ArcPlan/Get_Trip_Data.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/Get_Trip_Data.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/ArcPlan/Get_Trip_Data.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -17,7 +17,6 @@
Point_Map_Itr pt_itr;
if (Data_Service::Get_Trip_Data (file, data)) {
-
if (select_households && !hhold_range.In_Range (data.Household ())) return (false);
if (data.Mode () < MAX_MODE && !select_mode [data.Mode ()]) return (false);
if (select_purposes && !purpose_range.In_Range (data.Purpose ())) return (false);
@@ -77,6 +76,10 @@
attractions [index]++;
}
}
+
+ if (problem_out) {
+ return (true);
+ }
}
return (false);
}
Modified: version7/trunk/Transims70/Converge_Service/Demand_Updates.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Demand_Updates.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Converge_Service/Demand_Updates.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,6 +11,7 @@
void Converge_Service::Demand_Updates (void)
{
if (Time_Updates () || Toll_Updates () || Transit_Updates () || Parking_Updates ()) {
+
Show_Message ("Updating Demand Impacts -- Record");
Set_Progress ();
Modified: version7/trunk/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -77,12 +77,20 @@
connect_ptr = &connect_array [num];
dir_ptr = &dir_array [connect_ptr->Dir_Index ()];
- in_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ if (dir_ptr->Lanes () > 0) {
+ in_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ } else {
+ in_cap = 0;
+ }
connect_ptr->Next_To (dir_ptr->First_Connect_To ());
dir_ptr->First_Connect_To (num);
dir_ptr = &dir_array [connect_ptr->To_Index ()];
- out_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ if (dir_ptr->Lanes () > 0) {
+ out_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ } else {
+ out_cap = 0;
+ }
connect_ptr->Next_From (dir_ptr->First_Connect_From ());
dir_ptr->First_Connect_From (num);
Modified: version7/trunk/Transims70/Data_Service/Set_Link_Direction.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Set_Link_Direction.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Data_Service/Set_Link_Direction.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -62,14 +62,15 @@
dir = node;
}
}
- if (offset < 0 || offset > link_ptr->Length ()) {
- Warning (String ("%s %d Link %d Offset %.1lf is Out of Range (0..%.1lf)") %
- file.File_ID () % Progress_Count () % link_ptr->Link () % UnRound (offset) % UnRound (link_ptr->Length ()));
-
- if (offset < 0) {
- offset = 0;
+ if (offset <= 0 || offset >= link_ptr->Length ()) {
+ if (offset < 0 || offset > link_ptr->Length ()) {
+ Warning (String ("%s %d Link %d Offset %.1lf is Out of Range (0..%.1lf)") %
+ file.File_ID () % Progress_Count () % link_ptr->Link () % UnRound (offset) % UnRound (link_ptr->Length ()));
+ }
+ if (offset <= 0) {
+ offset = Round (10);
} else {
- offset = link_ptr->Length ();
+ offset = link_ptr->Length () - Round (10);
}
}
if (file.Version () <= 40) {
Modified: version7/trunk/Transims70/FileFormat/Control.cpp
===================================================================
--- version7/trunk/Transims70/FileFormat/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/FileFormat/Control.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -32,6 +32,18 @@
Print (2, String ("%s Control Keys:") % Program ());
+ key = Get_Control_String (SCAN_FILE);
+
+ if (!key.empty ()) {
+ scan_file.Open (Project_Filename (key));
+
+ for (i = 0; i < 100; i++) {
+ scan_file.Read ();
+ Write (1, "Record=") << scan_file.Record_String ();
+ }
+ Exit_Stat (DONE);
+ }
+
//---- initialize the file list ----
num = Highest_Control_Group (DATA_FILE, 0);
Modified: version7/trunk/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/trunk/Transims70/FileFormat/FileFormat.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/FileFormat/FileFormat.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,11 +11,11 @@
FileFormat::FileFormat (void) : Execution_Service ()
{
Program ("FileFormat");
- Version (6);
+ Version (7);
Title ("File Format Conversion");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
- { DATA_FILE, "DATA_FILE", LEVEL1, REQ_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { DATA_FILE, "DATA_FILE", LEVEL1, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ DATA_FORMAT, "DATA_FORMAT", LEVEL1, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ DATA_SELECT_FIELD, "DATA_SELECT_FIELD", LEVEL1, OPT_KEY, TEXT_KEY, "", "NAME = VALUE", NO_HELP },
{ NEW_DATA_FILE, "NEW_DATA_FILE", LEVEL1, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -37,6 +37,7 @@
{ NEW_COMBINE_FIELDS_FORMAT, "NEW_COMBINE_FIELDS_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ CONVERSION_SCRIPT, "CONVERSION_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { SCAN_FILE, "SCAN_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
END_CONTROL
};
const char *reports [] = {
Modified: version7/trunk/Transims70/FileFormat/FileFormat.hpp
===================================================================
--- version7/trunk/Transims70/FileFormat/FileFormat.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/FileFormat/FileFormat.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -30,7 +30,7 @@
DATA_FIELD_MAP, DATA_INDEX_FIELD,
NEW_MERGE_DATA_FILE, NEW_MERGE_DATA_FORMAT, NEW_CONCATENATE_DATA_FILE, NEW_CONCATENATE_DATA_FORMAT,
NEW_COMBINE_FIELDS_FILE, NEW_COMBINE_FIELDS_FORMAT,
- CONVERSION_SCRIPT,
+ CONVERSION_SCRIPT, SCAN_FILE,
};
virtual void Program_Control (void);
virtual void Page_Header (void);
@@ -43,6 +43,7 @@
bool script_flag, stats_flag, combine_flag, index_flag, merge_flag, concat_flag;
Db_Header combine_file, merge_file, concat_file;
+ Db_File scan_file;
//---- field statistics ----
Modified: version7/trunk/Transims70/File_Service/File_Service.vcxproj
===================================================================
--- version7/trunk/Transims70/File_Service/File_Service.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/File_Service/File_Service.vcxproj 2018-05-03 01:02:58 UTC (rev 1706)
@@ -77,6 +77,7 @@
<ClInclude Include="..\Include\Vehicle_File.hpp" />
<ClInclude Include="..\Include\Veh_Type_File.hpp" />
<ClInclude Include="..\Include\Volume_Speed_File.hpp" />
+ <ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp" />
<ClInclude Include="..\Include\Vol_Spd_Diff_File.hpp" />
<ClInclude Include="..\Include\Zone_File.hpp" />
</ItemGroup>
@@ -141,6 +142,7 @@
<ClCompile Include="Vehicle_File.cpp" />
<ClCompile Include="Veh_Type_File.cpp" />
<ClCompile Include="Volume_Speed_File.cpp" />
+ <ClCompile Include="Vol_Spd_Diff_Data_File.cpp" />
<ClCompile Include="Vol_Spd_Diff_File.cpp" />
<ClCompile Include="Zone_File.cpp" />
</ItemGroup>
Modified: version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/File_Service/File_Service.vcxproj.filters 2018-05-03 01:02:58 UTC (rev 1706)
@@ -197,6 +197,9 @@
<ClInclude Include="..\Include\Travel_Time_File.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="File_Service.cpp">
@@ -385,5 +388,8 @@
<ClCompile Include="Travel_Time_File.cpp">
<Filter>Source Files\Files</Filter>
</ClCompile>
+ <ClCompile Include="Vol_Spd_Diff_Data_File.cpp">
+ <Filter>Source Files\Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/trunk/Transims70/File_Service/Trip_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Trip_File.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/File_Service/Trip_File.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -90,7 +90,7 @@
Trip_Data & Trip_File::Get_Data (Trip_Data &trip_rec)
{
if (Version () < 60) {
- exe->Error (String ("Version %.1lf %s files should be converted to Version %.1lf using NewFormat") % (Version () / 10.0) % File_ID () % (VERSION_CODE / 10.0));
+ exe->Error (String ("Version %.1lf %s files should be converted to Version %.1lf using NewFormat") % (Version () / 10.0) % File_ID () % (Release () / 10.0));
}
trip_rec.Household (Household ());
trip_rec.Person (Person ());
Copied: version7/trunk/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp (from rev 1705, version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp)
===================================================================
--- version7/trunk/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp (rev 0)
+++ version7/trunk/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -0,0 +1,234 @@
+//*********************************************************
+// Vol_Spd_Diff_Data_File.cpp - Volume-Speed Difference Data File
+//*********************************************************
+
+#include "Vol_Spd_Diff_Data_File.hpp"
+
+//-----------------------------------------------------------
+// Vol_Spd_Diff_Data_File constructors
+//-----------------------------------------------------------
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (Access_Type access, string format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (string filename, Access_Type access, string format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+
+ Open (filename);
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (Access_Type access, Format_Type format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (string filename, Access_Type access, Format_Type format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+
+ Open (filename);
+}
+
+//-----------------------------------------------------------
+// Setup
+//-----------------------------------------------------------
+
+void Vol_Spd_Diff_Data_File::Setup (void)
+{
+ File_Type ("Vol Spd Diff Data File");
+ File_ID ("VolSpdDiffData");
+
+ link = dir = start = end = length = max_spd = -1;
+ vol0 = vol1 = vdiff = spd0 = spd1 = sdiff = -1;
+ use_vol0 = use_vol1 = vdiff = use_spd0 = use_spd1 = use_sdiff = -1;
+ vmt0 = vmt1 = vmtx = vht0 = vht1 = vhtx = vhd0 = vhd1 = vhdx = -1;
+ use_vmt0 = use_vmt1 = use_vmtx = use_vht0 = use_vht1 = use_vhtx = use_vhd0 = use_vhd1 = use_vhdx = -1;
+}
+
+//---------------------------------------------------------
+// Create_Fields
+//---------------------------------------------------------
+
+bool Vol_Spd_Diff_Data_File::Create_Fields (void)
+{
+ Clear_Fields ();
+
+ Add_Field ("LINK", DB_INTEGER, 10);
+ Add_LinkDir_Field ();
+
+ Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+
+ double value = 10.1;
+ if (data_type == VMT_DATA || data_type == PMT_DATA || data_type == VHT_DATA || data_type == PHT_DATA) {
+ value = 12.6;
+ }
+ Add_Field ("VOL0", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("VOL1", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("VOL_DIFF", DB_DOUBLE, value, Performance_Units_Map (data_type));
+
+ Add_Field ("SPD0", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("SPD1", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("SPD_DIFF", DB_DOUBLE, 5.1, MPH);
+
+ if (lane_use_flag) {
+ Add_Field ("USE_VOL0", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("USE_VOL1", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("USE_VDIFF", DB_DOUBLE, value, Performance_Units_Map (data_type));
+
+ Add_Field ("USE_SPD0", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("USE_SPD1", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("USE_SDIFF", DB_DOUBLE, 5.1, MPH);
+ }
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
+ Add_Field ("LENGTH", DB_DOUBLE, 8.1, FEET);
+ Add_Field ("MAX_SPD", DB_DOUBLE, 6.1, MPH);
+
+ Add_Field ("VMT0", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("VMT1", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("VMTX", DB_DOUBLE, 12.6, EMT);
+
+ Add_Field ("VHT0", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("VHT1", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("VHTX", DB_DOUBLE, 12.6, EHT);
+
+ Add_Field ("VHD0", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("VHD1", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("VHDX", DB_DOUBLE, 12.6, EHD);
+
+ if (lane_use_flag) {
+ Add_Field ("USE_VMT0", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("USE_VMT1", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("USE_VMTX", DB_DOUBLE, 12.6, EMT);
+
+ Add_Field ("USE_VHT0", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("USE_VHT1", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("USE_VHTX", DB_DOUBLE, 12.6, EHT);
+
+ Add_Field ("USE_VHD0", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("USE_VHD1", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("USE_VHDX", DB_DOUBLE, 12.6, EHD);
+ }
+ return (Set_Field_Numbers ());
+}
+
+//-----------------------------------------------------------
+// Set_Field_Numbers
+//-----------------------------------------------------------
+
+bool Vol_Spd_Diff_Data_File::Set_Field_Numbers (void)
+{
+ //---- required fields ----
+
+ link = Required_Field ("LINK");
+
+ if (link < 0) return (false);
+
+ //---- optional fields ----
+
+ dir = LinkDir_Type_Field ();
+ start = Optional_Field (START_FIELD_NAMES);
+ end = Optional_Field (END_FIELD_NAMES);
+
+ vol0 = Optional_Field ("VOL0", "VOL_BASE");
+ vol1 = Optional_Field ("VOL1", "VOL_ALT");
+ vdiff = Optional_Field ("VOL_DIFF", "VDIFF");
+
+ spd0 = Optional_Field ("SPD0", "SPD_BASE");
+ spd1 = Optional_Field ("SPD1", "SPD_ALT");
+ sdiff = Optional_Field ("SPD_DIFF", "SDIFF");
+
+ use_vol0 = Optional_Field ("USE_VOL0", "USE_V_BASE");
+ use_vol1 = Optional_Field ("USE_VOL1", "USE_V_ALT");
+ use_vdiff = Optional_Field ("USE_VDIFF");
+
+ use_spd0 = Optional_Field ("USE_SPD0", "USE_S_BASE");
+ use_spd1 = Optional_Field ("USE_SPD1", "USE_S_ALT");
+ use_sdiff = Optional_Field ("USE_SDIFF");
+
+ Lane_Use_Flag (use_vol0 >= 0 || use_spd0 >= 0);
+
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
+
+ length = Optional_Field ("LENGTH");
+ max_spd = Optional_Field ("MAX_SPD");
+
+ vmt0 = Optional_Field ("VMT0", "VMT_BASE");
+ vmt1 = Optional_Field ("VMT1", "VMT_ALT");
+ vmtx = Optional_Field ("VMTX", "VMT_DIFF");
+ vht0 = Optional_Field ("VHT0", "VHT_BASE");
+ vht1 = Optional_Field ("VHT1", "VHT_ALT");
+ vhtx = Optional_Field ("VHTX", "VHT_DIFF");
+ vhd0 = Optional_Field ("VHD0", "VHD_BASE");
+ vhd1 = Optional_Field ("VHD1", "VHD_ALT");
+ vhdx = Optional_Field ("VHDX", "VHD_DIFF");
+
+ use_vmt0 = Optional_Field ("USE_VMT0", "USE_VMT_BASE");
+ use_vmt1 = Optional_Field ("USE_VMT1", "USE_VMT_ALT");
+ use_vmtx = Optional_Field ("USE_VMTX", "USE_VMT_DIFF");
+ use_vht0 = Optional_Field ("USE_VHT0", "USE_VHT_BASE");
+ use_vht1 = Optional_Field ("USE_VHT1", "USE_VHT_ALT");
+ use_vhtx = Optional_Field ("USE_VHTX", "USE_VHT_DIFF");
+ use_vhd0 = Optional_Field ("USE_VHD0", "USE_VHD_BASE");
+ use_vhd1 = Optional_Field ("USE_VHD1", "USE_VHD_ALT");
+ use_vhdx = Optional_Field ("USE_VHDX", "USE_VHD_DIFF");
+
+ //---- set default units ----
+
+ Set_Units (start, HOUR_CLOCK);
+ Set_Units (end, HOUR_CLOCK);
+ Set_Units (vol0, Performance_Units_Map (data_type));
+ Set_Units (vol1, Performance_Units_Map (data_type));
+ Set_Units (vdiff, Performance_Units_Map (data_type));
+ Set_Units (spd0, MPH);
+ Set_Units (spd1, MPH);
+ Set_Units (sdiff, MPH);
+ Set_Units (use_vol0, Performance_Units_Map (data_type));
+ Set_Units (use_vol1, Performance_Units_Map (data_type));
+ Set_Units (use_vdiff, Performance_Units_Map (data_type));
+ Set_Units (use_spd0, MPH);
+ Set_Units (use_spd1, MPH);
+ Set_Units (use_sdiff, MPH);
+
+ Set_Units (length, FEET);
+ Set_Units (max_spd, MPH);
+
+ Set_Units (vmt0, EMT);
+ Set_Units (vmt1, EMT);
+ Set_Units (vmtx, EMT);
+ Set_Units (vht0, EHT);
+ Set_Units (vht1, EHT);
+ Set_Units (vhtx, EHT);
+ Set_Units (vhd0, EHD);
+ Set_Units (vhd1, EHD);
+ Set_Units (vhdx, EHD);
+
+ Set_Units (use_vmt0, EMT);
+ Set_Units (use_vmt1, EMT);
+ Set_Units (use_vmtx, EMT);
+ Set_Units (use_vht0, EHT);
+ Set_Units (use_vht1, EHT);
+ Set_Units (use_vhtx, EHT);
+ Set_Units (use_vhd0, EHD);
+ Set_Units (use_vhd1, EHD);
+ Set_Units (use_vhdx, EHD);
+
+ return (true);
+}
Modified: version7/trunk/Transims70/GTFSData/Build_Routes.cpp
===================================================================
--- version7/trunk/Transims70/GTFSData/Build_Routes.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GTFSData/Build_Routes.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -107,7 +107,7 @@
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 ();
//---- build the stop list ----
@@ -116,7 +116,6 @@
if (xy_ptr != 0) {
stop_ptr = &stop_array [stop_time_ptr->Stop ()];
-
//---- create a TRANSIMS stop ----
if (stop_ptr->Space () == 0) {
@@ -144,9 +143,9 @@
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) {
+
+ if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
+ if (diff < best_diff) {
best_diff = diff;
best_offset = offset;
link = shape_itr->link;
Modified: version7/trunk/Transims70/GTFSData/GTFSData.cpp
===================================================================
--- version7/trunk/Transims70/GTFSData/GTFSData.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GTFSData/GTFSData.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,7 +11,7 @@
GTFSData::GTFSData (void) : Select_Service (), Projection ()
{
Program ("GTFSData");
- Version (1);
+ Version (2);
Title ("Convert GTFS Data to TRANSIMS");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/GTFSData/Offset_Points.cpp
===================================================================
--- version7/trunk/Transims70/GTFSData/Offset_Points.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GTFSData/Offset_Points.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -38,6 +38,8 @@
if (offset == 0.0) {
start_flag = true;
+ pt1.x = x2;
+ pt1.y = y2;
}
} else {
dx = x2 - x1;
@@ -44,7 +46,7 @@
dy = y2 - y1;
length += max_len = sqrt (dx * dx + dy * dy);
-
+
if (!start_flag) {
if (length >= offset) {
if (length > offset) {
@@ -55,6 +57,9 @@
}
pt1.x = x1 + dx * factor;
pt1.y = y1 + dy * factor;
+ } else {
+ pt1.x = x2;
+ pt1.y = y2;
}
start_flag = true;
if (point_flag) break;
@@ -62,8 +67,11 @@
}
if (start_flag) {
if (length <= end_offset) {
- if (length == offset) continue;
- if (length == end_offset) break;
+ if (length != offset && length == end_offset) {
+ pt2.x = x2;
+ pt2.y = y2;
+ break;
+ }
} else {
if (max_len > 0.0) {
factor = (end_offset + max_len - length) / max_len;
@@ -79,5 +87,9 @@
x1 = x2;
y1 = y2;
}
+ if (length < end_offset) {
+ pt2.x = x2;
+ pt2.y = y2;
+ }
}
Modified: version7/trunk/Transims70/GridData/Control.cpp
===================================================================
--- version7/trunk/Transims70/GridData/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/Control.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -1081,6 +1081,21 @@
}
new_zone_file->Write_Header ();
}
+
+ //---- grid selection file ----
+
+ key = Get_Control_String (GRID_SELECTION_FILE);
+
+ if (!key.empty ()) {
+ grid_select_flag = true;
+
+ Print (1);
+ grid_select_file.File_Type ("Grid Selection File");
+
+ if (!grid_select_file.Open (Project_Filename (key))) {
+ File_Error ("Opening Grid Selection File", grid_select_file.Filename ());
+ }
+ }
return;
data_error:
Modified: version7/trunk/Transims70/GridData/Execute.cpp
===================================================================
--- version7/trunk/Transims70/GridData/Execute.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/Execute.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -32,6 +32,12 @@
}
}
+ //---- grid_select_file ----
+
+ if (grid_select_flag) {
+ Read_Grid_Select ();
+ }
+
//---- read zone data files ----
if (zone_flag) {
Modified: version7/trunk/Transims70/GridData/GridData.cpp
===================================================================
--- version7/trunk/Transims70/GridData/GridData.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/GridData.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -11,7 +11,7 @@
GridData::GridData (void) : Data_Service () , Shape_Tools ()
{
Program ("GridData");
- Version (22);
+ Version (23);
Title ("Grid Data Processor");
System_File_Type optional_files [] = {
@@ -85,7 +85,7 @@
{ NEW_ZONE_ID_FIELD, "NEW_ZONE_ID_FIELD", LEVEL0, OPT_KEY, TEXT_KEY, "ZONE", "", NO_HELP },
{ NEW_ZONE_SUM_FIELD, "NEW_ZONE_SUM_FIELD", LEVEL1, OPT_KEY, TEXT_KEY, "DATA", "", NO_HELP },
-
+ { GRID_SELECTION_FILE, "GRID_SELECTION_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
END_CONTROL
};
const char *reports [] = {
@@ -104,7 +104,7 @@
link_cell_size = 10.0;
data_offset = 4;
script_flag = grid_flag = temp_flag = point_flag = arc_point_flag = zone_flag = polygon_flag = summary_flag = sum_data_flag = false;
- link_flag = boundary_flag = arc_link_flag = line_flag = new_zone_flag = point_data_flag = false;
+ link_flag = boundary_flag = arc_link_flag = line_flag = new_zone_flag = point_data_flag = grid_select_flag = false;
int ignore_keys [] = {
TIME_OF_DAY_FORMAT, MODEL_START_TIME, MODEL_END_TIME, MODEL_TIME_INCREMENT,
Modified: version7/trunk/Transims70/GridData/GridData.hpp
===================================================================
--- version7/trunk/Transims70/GridData/GridData.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/GridData.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -56,7 +56,7 @@
SUMMARY_SELECT_FIELD, SUMMARY_SELECT_VALUES,
SUMMARY_DATA_FIELD, SUMMARY_DATA_VALUE, SUMMARY_DATA_FILTER, NORMALIZE_DATA_VALUE,
- NEW_ZONE_ID_FIELD, NEW_ZONE_SUM_FIELD,
+ NEW_ZONE_ID_FIELD, NEW_ZONE_SUM_FIELD, GRID_SELECTION_FILE,
};
virtual void Program_Control (void);
virtual void Page_Header (void);
@@ -70,7 +70,7 @@
int data_offset, in_zone_field, out_zone_field, skip_grid_field, new_zone_id, new_zone_count;
bool script_flag, grid_flag, temp_flag, point_flag, arc_point_flag, zone_flag, polygon_flag, summary_flag, sum_data_flag;
- bool link_flag, boundary_flag, arc_link_flag, line_flag, new_zone_flag, point_data_flag;
+ bool link_flag, boundary_flag, arc_link_flag, line_flag, new_zone_flag, point_data_flag, grid_select_flag;
double grid_size, min_point_dist, max_point_dist, min_link_dist, max_link_dist, link_cell_size, max_line_dist, skip_grid_value;
string temp_name;
@@ -78,6 +78,7 @@
Integers new_zone_in_flds, new_zone_out_flds;
Dbls_Map new_zone_map;
Zone_File *new_zone_file;
+ Int_Set grid_select_list;
Db_Header point_file, summary_file;
Db_Data_Array point_data, link_data, line_data;
@@ -87,7 +88,7 @@
Polygon_Map boundary;
Polygon_Array line_shape;
- Db_File program_file;
+ Db_File program_file, grid_select_file;
User_Program program;
//---- zone data groups ----
@@ -173,6 +174,7 @@
Flts_Array link_cell_shares;
void Set_Files (void);
+ void Read_Grid_Select ();
void Read_Data (void);
void Read_Polygons (void);
void Read_Boundary (void);
Modified: version7/trunk/Transims70/GridData/GridData.vcxproj
===================================================================
--- version7/trunk/Transims70/GridData/GridData.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/GridData.vcxproj 2018-05-03 01:02:58 UTC (rev 1706)
@@ -137,6 +137,7 @@
<ClCompile Include="Point_Grid.cpp" />
<ClCompile Include="Read_Boundary.cpp" />
<ClCompile Include="Read_Data.cpp" />
+ <ClCompile Include="Read_Grid_Select.cpp" />
<ClCompile Include="Read_Lines.cpp" />
<ClCompile Include="Read_Links.cpp" />
<ClCompile Include="Read_Points.cpp" />
Modified: version7/trunk/Transims70/GridData/GridData.vcxproj.filters
===================================================================
--- version7/trunk/Transims70/GridData/GridData.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/GridData.vcxproj.filters 2018-05-03 01:02:58 UTC (rev 1706)
@@ -79,5 +79,8 @@
<ClCompile Include="Write_Zones.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Read_Grid_Select.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Copied: version7/trunk/Transims70/GridData/Read_Grid_Select.cpp (from rev 1705, version7/branches/aecom/Transims70/GridData/Read_Grid_Select.cpp)
===================================================================
--- version7/trunk/Transims70/GridData/Read_Grid_Select.cpp (rev 0)
+++ version7/trunk/Transims70/GridData/Read_Grid_Select.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -0,0 +1,39 @@
+//*********************************************************
+// Read_Grid_Select.cpp - Read the Grid Selection File
+//*********************************************************
+
+#include "GridData.hpp"
+
+//---------------------------------------------------------
+// Read_Grid_Select
+//---------------------------------------------------------
+
+void GridData::Read_Grid_Select (void)
+{
+ int grid;
+ String data;
+ Strings grids;
+ Str_Itr grid_itr;
+
+ Show_Message (String ("Reading %s -- Record") % grid_select_file.File_Type ());
+ Set_Progress ();
+
+ while (grid_select_file.Read_Record ()) {
+ Show_Progress ();
+
+ data = grid_select_file.Record_String ();
+
+ data.Parse (grids);
+
+ for (grid_itr = grids.begin (); grid_itr != grids.end (); grid_itr++) {
+ grid = grid_itr->Integer ();
+
+ grid_select_list.insert (grid);
+ }
+ }
+ End_Progress ();
+
+ Print (2, "Number of Grid Selection Records = ") << grid_select_list.size ();
+
+ grid_select_file.Close ();
+}
Modified: version7/trunk/Transims70/GridData/Write_Grid.cpp
===================================================================
--- version7/trunk/Transims70/GridData/Write_Grid.cpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/GridData/Write_Grid.cpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -12,7 +12,7 @@
void GridData::Write_Grid ()
{
- int i, zone, count;
+ int i, zone, count, id;
double value, x0, y0, grid_wt;
Data_Itr data_itr;
@@ -29,6 +29,7 @@
Dbls_Map_Itr zone_map_itr;
Dbls_Map_Stat zone_map_stat;
Doubles zone_sum, *zone_sum_ptr;
+ Int_Set_Itr id_itr;
count = 0;
@@ -38,6 +39,14 @@
while (in_file.Read_Record ()) {
Show_Progress ();
+ if (grid_select_flag) {
+ id = in_file.Get_Integer ("ID");
+
+ id_itr = grid_select_list.find (id);
+
+ if (id_itr == grid_select_list.end ()) continue;
+ }
+
out_file.Reset_Record ();
out_file.Copy_Fields (in_file);
Modified: version7/trunk/Transims70/Include/Best_List.hpp
===================================================================
--- version7/trunk/Transims70/Include/Best_List.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/Best_List.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -35,6 +35,19 @@
};
//---------------------------------------------------------
+// Float_List Class definition
+//---------------------------------------------------------
+
+class SYSLIB_API Float_List : public Floats
+{
+public:
+ Float_List (void) {}
+
+ float Best (int num);
+ bool Combine (Float_List &list, int index = 1, bool round_flag = false);
+};
+
+//---------------------------------------------------------
// Dtime_List Class definition
//---------------------------------------------------------
Modified: version7/trunk/Transims70/Include/Control_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Control_Service.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/Control_Service.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -71,6 +71,7 @@
bool Get_Control_List (int code, Integer_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Double_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
+ bool Get_Control_List (int code, Float_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Dtime_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Bool_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, String_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
@@ -77,6 +78,7 @@
bool Get_Control_List_Groups (int code, Integer_List &list, bool round_flag = false);
bool Get_Control_List_Groups (int code, Double_List &list, bool scale_flag = false);
+ bool Get_Control_List_Groups (int code, Float_List &list, bool scale_flag = false);
bool Get_Control_List_Groups (int code, Dtime_List &list, bool round_flag = false);
bool Get_Control_List_Groups (int code, Bool_List &list);
bool Get_Control_List_Groups (int code, String_List &list);
@@ -98,6 +100,7 @@
Dtime Time_Range_Check (Dtime value, String range);
bool List_Range_Check (Integer_List &list, String range);
bool List_Range_Check (Double_List &list, String range);
+ bool List_Range_Check (Float_List &list, String range);
bool List_Range_Check (Dtime_List &list, String range);
bool Control_Key_Empty (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
Modified: version7/trunk/Transims70/Include/Data_Pack.hpp
===================================================================
--- version7/trunk/Transims70/Include/Data_Pack.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/Data_Pack.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -58,6 +58,7 @@
{
public:
Vector (void) {}
+ Vector (int num, Type value) { vector <Type>::assign (num, value); }
bool Pack (Data_Buffer &data, bool type_flag = false)
{
Modified: version7/trunk/Transims70/Include/Message_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Message_Service.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/Message_Service.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -8,6 +8,7 @@
#include "APIDefs.hpp"
#include "Static_Service.hpp"
#include "Streams.hpp"
+#include "String.hpp"
//---------------------------------------------------------
// Message_Service - general message class
@@ -26,15 +27,15 @@
bool Quiet (void) { return (_message.Quiet ()); }
void Quiet (bool flag) { _message.Quiet (flag); }
+
+ const char * Program (void) { return (_program.c_str ()); }
+ void Program (String p) { _program = p; }
- const char * Program (void) { return (_program); }
- void Program (const char *p) { _program = p; }
-
int Version (void) { return (_version); }
void Version (int number) { _version = number; }
- const char * CopyRight (void) { return (_copyright); }
- void CopyRight (const char *c) { _copyright = c; }
+ String CopyRight (void) { return (_copyright); }
+ void CopyRight (int year);
time_t StartTime (void) { return (_starttime); }
void StartTime (time_t dt) { _starttime = dt; }
@@ -121,7 +122,7 @@
private:
int _version, _progress, _warnings, _max_warnings;
bool _pause, _no_pause, _detail, _send_messages, _warning_flag, _no_warnings;
- const char *_program, *_copyright;
+ String _program, _copyright;
time_t _starttime;
clock_t _first, _last;
Modified: version7/trunk/Transims70/Include/Static_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Static_Service.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/Static_Service.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -270,6 +270,12 @@
static void Left_Side_Flag (bool flag) { _left_side_flag = flag; }
static bool Left_Side_Flag (void) { return (_left_side_flag); }
+ static const char * Software (void) { return (_software); }
+ static void Software (const char *s) { _software = s; }
+
+ static int Release (void) { return (_release); }
+ static void Release (int num) { _release = num; }
+
private:
static int use_mask [NONE+1];
static Mode_Type trip_mode_map [];
@@ -281,6 +287,9 @@
static Units_Type _time_format;
static Format_Type _default_format;
+ static const char *_software;
+ static int _release;
+
struct Code_Text {
int code;
const char * text;
Modified: version7/trunk/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/trunk/Transims70/Include/System_Defines.hpp 2018-05-03 00:56:08 UTC (rev 1705)
+++ version7/trunk/Transims70/Include/System_Defines.hpp 2018-05-03 01:02:58 UTC (rev 1706)
@@ -7,8 +7,6 @@
#include "APIDefs.hpp"
-#define VERSION_CODE 71
-
#define EXECUTION_OFFSET 200
#define SYSTEM_FILE_OFFSET 300
#define SYSTEM_FORMAT_OFFSET 400
@@ -70,6 +68,7 @@
#define _NAN (-1.79769e+308)
#define END_OF_RECORD -1
#define SCAN_ALL_RECORDS -1
+#define MAX_REC_SIZE 8192
#define STRING_FIELD_SIZE 128
#define TIME_FIELD_SIZE 16
@@ -150,6 +149,10 @@
#define FSPD_BA_FIELD_NAMES "FSPD_BA", "FREESPDA", "FREESPD_BA", "FSPDBA"
#define CAP_BA_FIELD_NAMES "CAP_BA", "CAPACITYA", ...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-05-03 00:56:12
|
Revision: 1705
http://sourceforge.net/p/transims/code/1705
Author: davidroden
Date: 2018-05-03 00:56:08 +0000 (Thu, 03 May 2018)
Log Message:
-----------
TRANSIMS Version 7.1
SysLib
Software and Release methods were added to enable the SysLib to be used by external programs with specialized software names. Float control lists were added. UTM coordinate projections for East Africa were added. The maximum string and record buffer lengths were increased to 8192. Logic was added to improve matrix origin and destination ID conversion.
File_Service
Vol_Spd_Diff_Data_File method was added.
Data_Service
The offset corrections for standard link-direction reads were modified to place the offset 10 feet or meters from the end of the link rather than at the end of the link. A bug was fixed in the turning movement capacity calculations for lane connections with zero lanes.
ArcPerf 7.1.11
VOL_SPD_DIFF_DATA_FILE/FORMAT and NEW_ARC_VOL_SPD_DIFF_DATA_FILE keys were added.
ArcPlan 7.1.6
Trip data is no longer stored in memory if only problem output is requested.
FileFormat 7.1.7
SCAN_FILE key was added to enable the program to dump the first 100 records of a file to output the screen and print file to help with interpreting the data format of large files.
GridData 7.1.23
GRID_SELECTION_FILE key was added to select specified shapes records for the grid analysis.
GTFSData 7.1.2
Buffer ranges were adjusted and a bug was fixed in drawing the last link in a route.
PathSkim 7.1.4
HIGHEST_ZONE_NUMBER key was added to control matrix memory allocation.
PlanSelect 7.1.3
VOLUME_COUNT_FILE, VOLUME_COUNT_FORMAT, and NEW_HOUSEHOLD_ID keys were added to implement trip adjustments that delete or replicate records that travel through selected links at specified times of day to correct for differences between the volume and count fields.
Simulator 7.1.32
Flow and travel time updates were disabled if routing iterations are not selected. A bug was fixed in the pocket lane offset distance. Bugs were fixed in the signal update rates and methods.
SubareaNet 7.1.9
SELECT_FACILITY_TYPES, SELECT_LINKS, DELETE_LINKS, and DELETE_FACILITY_TYPES keys were added.
SubareaPlans 7.1.11
Plan memory was deleted for plans that are not selected.
TransitNet 7.1.4
UPDATE_CONNECT_FILE/FORMAT keys were added.
TripSum 7.1.1
A memory allocation bug was fixed when trip table output is not requested.
VolSpdData 7.1.15
Length, Max Speed, VMT, VHT, and VHD fields were added to the new selection data file.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.hpp
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj.filters
version7/branches/aecom/Transims70/ArcPerf/Control.cpp
version7/branches/aecom/Transims70/ArcPerf/Execute.cpp
version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp
version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
version7/branches/aecom/Transims70/ArcPlan/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/Converge_Service/Demand_Updates.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
version7/branches/aecom/Transims70/Data_Service/Set_Link_Direction.cpp
version7/branches/aecom/Transims70/FileFormat/Control.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
version7/branches/aecom/Transims70/FileFormat/FileFormat.hpp
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
version7/branches/aecom/Transims70/File_Service/Trip_File.cpp
version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
version7/branches/aecom/Transims70/GTFSData/Offset_Points.cpp
version7/branches/aecom/Transims70/GridData/Control.cpp
version7/branches/aecom/Transims70/GridData/Execute.cpp
version7/branches/aecom/Transims70/GridData/GridData.cpp
version7/branches/aecom/Transims70/GridData/GridData.hpp
version7/branches/aecom/Transims70/GridData/GridData.vcxproj
version7/branches/aecom/Transims70/GridData/GridData.vcxproj.filters
version7/branches/aecom/Transims70/GridData/Write_Grid.cpp
version7/branches/aecom/Transims70/Include/Best_List.hpp
version7/branches/aecom/Transims70/Include/Control_Service.hpp
version7/branches/aecom/Transims70/Include/Data_Pack.hpp
version7/branches/aecom/Transims70/Include/Message_Service.hpp
version7/branches/aecom/Transims70/Include/Static_Service.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/PathSkim/Execute.cpp
version7/branches/aecom/Transims70/PathSkim/PathSkim.cpp
version7/branches/aecom/Transims70/PerfPrep/Control.cpp
version7/branches/aecom/Transims70/PerfPrep/Execute.cpp
version7/branches/aecom/Transims70/PerfPrep/Get_Performance_Data.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp
version7/branches/aecom/Transims70/PlanSelect/Control.cpp
version7/branches/aecom/Transims70/PlanSelect/Execute.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.vcxproj
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.vcxproj.filters
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/Simulator/Execute.cpp
version7/branches/aecom/Transims70/Simulator/Simulator.cpp
version7/branches/aecom/Transims70/Simulator_Service/Check_Behind.cpp
version7/branches/aecom/Transims70/Simulator_Service/Control.cpp
version7/branches/aecom/Transims70/Simulator_Service/Global_Data.cpp
version7/branches/aecom/Transims70/Simulator_Service/Load_Vehicle.cpp
version7/branches/aecom/Transims70/Simulator_Service/Look_Ahead.cpp
version7/branches/aecom/Transims70/Simulator_Service/Move_Vehicle.cpp
version7/branches/aecom/Transims70/Simulator_Service/Occupancy_Output.cpp
version7/branches/aecom/Transims70/Simulator_Service/Plan_Processing.cpp
version7/branches/aecom/Transims70/Simulator_Service/Sim_Control_Update.cpp
version7/branches/aecom/Transims70/Simulator_Service/Sim_Dir_Data.hpp
version7/branches/aecom/Transims70/Simulator_Service/Sum_Path.cpp
version7/branches/aecom/Transims70/Simulator_Service/Traffic_Control.cpp
version7/branches/aecom/Transims70/Simulator_Service/Travel_Processing.cpp
version7/branches/aecom/Transims70/Simulator_Service/Travel_Step.cpp
version7/branches/aecom/Transims70/SubareaNet/Control.cpp
version7/branches/aecom/Transims70/SubareaNet/Get_Link_Data.cpp
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.cpp
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.hpp
version7/branches/aecom/Transims70/SubareaNet/SubareaNet.vcxproj
version7/branches/aecom/Transims70/SubareaPlans/Plan_Processing.cpp
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_File.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Header.cpp
version7/branches/aecom/Transims70/SysLib/Dbfile/Db_Matrix.cpp
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Execution_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Message_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Best_List.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Projection.cpp
version7/branches/aecom/Transims70/SysLib/Tools/String.cpp
version7/branches/aecom/Transims70/TransimsNet/Control.cpp
version7/branches/aecom/Transims70/TransimsNet/Execute.cpp
version7/branches/aecom/Transims70/TransimsNet/TransimsNet.cpp
version7/branches/aecom/Transims70/TransimsNet/TransimsNet.hpp
version7/branches/aecom/Transims70/TripSum/Control.cpp
version7/branches/aecom/Transims70/TripSum/TripSum.cpp
version7/branches/aecom/Transims70/VolSpdData/Control.cpp
version7/branches/aecom/Transims70/VolSpdData/Read_Selection.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.hpp
version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp
version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp
version7/branches/aecom/Transims70/GridData/Read_Grid_Select.cpp
version7/branches/aecom/Transims70/Include/Vol_Spd_Diff_Data_File.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Vol_Cnt.cpp
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (10);
+ Version (11);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
@@ -44,6 +44,8 @@
{ LINK_DIRECTION_FORMAT, "LINK_DIRECTION_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ VOL_SPD_DIFF_FILE, "VOL_SPD_DIFF_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ VOL_SPD_DIFF_FORMAT, "VOL_SPD_DIFF_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { VOL_SPD_DIFF_DATA_FILE, "VOL_SPD_DIFF_DATA_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
+ { VOL_SPD_DIFF_DATA_FORMAT, "VOL_SPD_DIFF_DATA_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP},
{ SYSTEM_EVENT_FILE, "SYSTEM_EVENT_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ SYSTEM_EVENT_FORMAT, "SYSTEM_EVENT_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ NEW_ARC_LINK_DATA_FILE, "NEW_ARC_LINK_DATA_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -53,6 +55,7 @@
{ NEW_ARC_PERFORMANCE_FILE, "NEW_ARC_PERFORMANCE_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_VOLUME_SPEED_FILE, "NEW_ARC_VOLUME_SPEED_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_VOL_SPD_DIFF_FILE, "NEW_ARC_VOL_SPD_DIFF_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_ARC_VOL_SPD_DIFF_DATA_FILE, "NEW_ARC_VOL_SPD_DIFF_DATA_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP},
{ NEW_ARC_INTERSECTION_FILE, "NEW_ARC_INTERSECTION_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_TURN_DELAY_FILE, "NEW_ARC_TURN_DELAY_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_ARC_TRAFFIC_IMAGE, "NEW_ARC_TRAFFIC_IMAGE", LEVEL1, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -81,10 +84,10 @@
Sum_Flow_Flag (true);
vc_field = cong_time_field = cong_vmt_field = cong_vht_field = max_period_field = -1;
- center_flag = lanes_flag = turn_flag = subarea_flag = index_flag = image_flag = shape_flag = max_period_flag = person_flag = false;
+ center_flag = lanes_flag = turn_flag = subarea_flag = index_flag = image_flag = shape_flag = max_period_flag = person_flag = vol_spd_diff_data_flag = false;
perf_flag = vol_spd_flag = vol_spd_diff_flag = link_dir_flag = link_data_flag = intersection_flag = event_flag = link_period_flag = dir_period_flag = false;
green_field = yellow_field = red_field = split_field = 0;
- link_data_width_fld = link_dir_width_fld = perf_width_fld = vol_spd_width_fld = vol_spd_diff_width_fld = -1;
+ link_data_width_fld = link_dir_width_fld = perf_width_fld = vol_spd_width_fld = vol_spd_diff_width_fld = vol_spd_diff_data_width_fld = -1;
}
//---------------------------------------------------------
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.hpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -14,6 +14,7 @@
#include "Dtime.hpp"
#include "Shape_Tools.hpp"
#include "Vol_Spd_Diff_File.hpp"
+#include "Vol_Spd_Diff_Data_File.hpp"
//---------------------------------------------------------
// ArcPerf - execution class definition
@@ -29,9 +30,9 @@
protected:
enum ArcPerf_Keys {
LINK_DATA_FILE = 1, LINK_DATA_FORMAT, LINK_DIRECTION_FILE, LINK_DIRECTION_FORMAT,
- VOL_SPD_DIFF_FILE, VOL_SPD_DIFF_FORMAT, SYSTEM_EVENT_FILE, SYSTEM_EVENT_FORMAT,
+ VOL_SPD_DIFF_FILE, VOL_SPD_DIFF_FORMAT, VOL_SPD_DIFF_DATA_FILE, VOL_SPD_DIFF_DATA_FORMAT, SYSTEM_EVENT_FILE, SYSTEM_EVENT_FORMAT,
NEW_ARC_LINK_DATA_FILE, LINK_DATA_BY_PERIOD, NEW_ARC_LINK_DIR_FILE, LINK_DIR_BY_PERIOD,
- NEW_ARC_PERFORMANCE_FILE, NEW_ARC_VOLUME_SPEED_FILE, NEW_ARC_VOL_SPD_DIFF_FILE,
+ NEW_ARC_PERFORMANCE_FILE, NEW_ARC_VOLUME_SPEED_FILE, NEW_ARC_VOL_SPD_DIFF_FILE, NEW_ARC_VOL_SPD_DIFF_DATA_FILE,
NEW_ARC_INTERSECTION_FILE, NEW_ARC_TURN_DELAY_FILE, NEW_ARC_TRAFFIC_IMAGE, TRAFFIC_IMAGE_ATTRIBUTE,
VEHICLE_TYPE_DISTRIBUTION, ADD_LINK_DIRECTION_INDEX, IGNORE_TIME_RANGE_FIELDS, PERIOD_MAXIMUM_FIELD,
PERSON_BASED_STATISTICS,
@@ -47,10 +48,11 @@
Performance_File *perf_file;
Volume_Speed_File *vol_spd_file;
Vol_Spd_Diff_File vol_spd_diff_file;
+ Vol_Spd_Diff_Data_File vol_spd_diff_data_file;
Turn_Delay_File *turn_file;
Arcview_File arcview_perf, arcview_turn, arcview_link_dir, arcview_node;
- Arcview_File arcview_link_data, arcview_vol_spd, arcview_vol_spd_diff;
+ Arcview_File arcview_link_data, arcview_vol_spd, arcview_vol_spd_diff, arcview_vol_spd_diff_data;
Points points;
@@ -57,10 +59,10 @@
int length_field, lane_len_field, vc_field, vhd_field;
int cong_time_field, cong_vmt_field, cong_vht_field, max_period_field;
int max_angle, min_length, green_field, yellow_field, red_field, split_field;
- int perf_width_fld, vol_spd_width_fld, vol_spd_diff_width_fld, link_dir_width_fld, link_data_width_fld;
+ int perf_width_fld, vol_spd_width_fld, vol_spd_diff_width_fld, vol_spd_diff_data_width_fld, link_dir_width_fld, link_data_width_fld;
bool turn_flag, subarea_flag, index_flag, image_flag, link_period_flag, dir_period_flag, person_flag;
bool perf_flag, vol_spd_flag, link_dir_flag, link_data_flag, intersection_flag, event_flag, max_period_flag;
- bool vol_spd_diff_flag;
+ bool vol_spd_diff_flag, vol_spd_diff_data_flag;
String shapename, volspdname, diffname, turnname, nodename, linkname, dirname;
Doubles type_share;
@@ -104,6 +106,7 @@
void Write_Performance (void);
void Write_Volume_Speed (void);
void Write_Vol_Spd_Diff (void);
+ void Write_Vol_Spd_Diff_Data (void);
void Maximum_Performance (void);
void Write_Turn (void);
void Write_Image (void);
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
@@ -173,6 +173,7 @@
<ClCompile Include="Write_Turn.cpp" />
<ClCompile Include="Write_Volume_Speed.cpp" />
<ClCompile Include="Write_Vol_Spd_Diff.cpp" />
+ <ClCompile Include="Write_Vol_Spd_Diff_Data.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data_Service\Data_Service.vcxproj">
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj.filters 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
@@ -58,5 +58,8 @@
<ClCompile Include="Write_Vol_Spd_Diff.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Vol_Spd_Diff_Data.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/ArcPerf/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -72,7 +72,18 @@
vol_spd_diff_file.Open (Project_Filename (key));
}
- if (!perf_in && !vol_spd_in && !link_data_flag && !link_dir_flag && !vol_spd_diff_flag) {
+ //---- get the vol-spd diff data file ----
+
+ key = Get_Control_String (VOL_SPD_DIFF_DATA_FILE);
+
+ if (!key.empty ()) {
+ vol_spd_diff_data_flag = true;
+
+ Print (1);
+ vol_spd_diff_data_file.Open (Project_Filename (key));
+ }
+
+ if (!perf_in && !vol_spd_in && !link_data_flag && !link_dir_flag && !vol_spd_diff_flag && !vol_spd_diff_data_flag) {
Error ("A Performance, Volume-Speed, Vol-Spd Diff, Link Data, or Link Direction file are Required");
}
@@ -356,6 +367,47 @@
Print_Filename (2, arcview_vol_spd_diff.File_Type (), key);
}
+ //---- get the arcview vol spd diff data file ----
+
+ key = Get_Control_String (NEW_ARC_VOL_SPD_DIFF_DATA_FILE);
+
+ if (!key.empty ()) {
+ if (!vol_spd_diff_data_flag) {
+ Error ("The Input Vol Spd Diff Data File is Missing");
+ }
+ key.Split_Last (ext, ".");
+
+ diffname = Project_Filename (key);
+
+ arcview_vol_spd_diff_data.File_Type ("New Arc Vol Spd Diff Data File");
+ arcview_vol_spd_diff_data.File_Access (CREATE);
+ if (bandwidth_flag) {
+ arcview_vol_spd_diff_data.Shape_Type (POLYGON);
+ vol_spd_diff_data_width_fld = vol_spd_diff_data_file.Required_Field (bandwidth_field);
+ } else {
+ arcview_vol_spd_diff_data.Shape_Type (VECTOR);
+ }
+ arcview_vol_spd_diff_data.Set_Projection ();
+
+ //---- copy the link fields ----
+
+ binary = (vol_spd_diff_data_file.Record_Format () == BINARY);
+ nfield = vol_spd_diff_data_file.Num_Fields ();
+
+ for (i = 0; i < nfield; i++) {
+ fld = vol_spd_diff_data_file.Field (i);
+ if (fld != 0) {
+ arcview_vol_spd_diff_data.Add_Field (fld->Name (), fld->Type (), fld->Size (), fld->Units (), binary, NO_NEST);
+ }
+ }
+
+ //---- set the file name ----
+
+ key = diffname + "_time_of_day.shp";
+
+ Print_Filename (2, arcview_vol_spd_diff.File_Type (), key);
+ }
+
//---- get the arcview intersection file ----
key = Get_Control_String (NEW_ARC_INTERSECTION_FILE);
Modified: version7/branches/aecom/Transims70/ArcPerf/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Execute.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/Execute.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -42,6 +42,12 @@
Write_Vol_Spd_Diff ();
}
+ //---- write the arcview vol spd diff data file ----
+
+ if (vol_spd_diff_data_flag) {
+ Write_Vol_Spd_Diff_Data ();
+ }
+
//---- write the arcview intersection file ----
if (intersection_flag) {
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Performance.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,7 +11,7 @@
void ArcPerf::Write_Performance (void)
{
int dir, period, index, use_index, num;
- double length;
+ double length, speed;
Dtime low, high, time, delay;
String buffer;
@@ -97,6 +97,13 @@
perf_file->Enter (data.Enter ());
perf_file->Exit (data.Exit ());
perf_file->Flow (data.Flow ());
+
+ //if (data.Speed () > 0) {
+ // speed = data.Speed () * data.Time_Ratio () / 100.0;
+ // if (speed < 36.67) {
+ // data.Time_Ratio (36.67 * 100.0 / data.Speed ());
+ // }
+ //}
perf_file->Speed (data.Speed ());
perf_file->Time_Ratio (data.Time_Ratio ());
perf_file->Delay (data.Delay ());
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -76,7 +76,7 @@
link_ptr = &link_array [map_itr->second];
- Draw_Link (arcview_vol_spd_diff, link_ptr, dir, vol_spd_width_fld);
+ Draw_Link (arcview_vol_spd_diff, link_ptr, dir, vol_spd_diff_width_fld);
}
}
link = dir = -1;
Added: version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff_Data.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -0,0 +1,147 @@
+//*********************************************************
+// Write_Vol_Spd_Diff_Data.cpp - write the arcview vol-spd diff data file
+//*********************************************************
+
+#include "ArcPerf.hpp"
+
+//---------------------------------------------------------
+// Write_Vol_Spd_Diff_Data
+//---------------------------------------------------------
+
+void ArcPerf::Write_Vol_Spd_Diff_Data (void)
+{
+ int link, dir, period, num;
+ double vht;
+ Dtime low, high, start, end;
+ String buffer;
+ bool found;
+
+ Int_Map_Itr map_itr;
+ Link_Data *link_ptr;
+ Vol_Spd_Diff_Data_File vol_spd_diff_out;
+
+ vol_spd_diff_out.Lane_Use_Flag (vol_spd_diff_data_file.Lane_Use_Flag ());
+ vol_spd_diff_out.Data_Type (vol_spd_diff_data_file.Data_Type ());
+
+ vol_spd_diff_out.Copy_Fields (vol_spd_diff_data_file);
+
+ vol_spd_diff_out.Create_Fields ();
+
+ //---- process each time period ----
+
+ Print (1);
+ num = sum_periods.Num_Periods ();
+
+ for (period = 0; period < num; period++) {
+
+ sum_periods.Period_Range (period, low, high);
+
+ //---- create a new shape file ----
+
+ buffer = String ("%s_%s_%s.shp") % diffname % low.Time_Label (true) % high.Time_Label (true);
+
+ arcview_vol_spd_diff.First_Open (true);
+
+ if (!arcview_vol_spd_diff_data.Open (buffer)) {
+ File_Error ("Opening ArcView Vol Spd Diff Data File", arcview_vol_spd_diff_data.Shape_Filename ());
+ }
+ arcview_vol_spd_diff_data.Write_Header ();
+
+ Show_Message (String ("Writing %s %s -- Link") % arcview_vol_spd_diff_data.File_Type () % high.Time_String ());
+ Set_Progress ();
+
+ vol_spd_diff_out.Start (low);
+ vol_spd_diff_out.End (high);
+
+ vol_spd_diff_data_file.Rewind ();
+
+ link = dir = -1;
+ found = false;
+
+ while (vol_spd_diff_data_file.Read ()) {
+ Show_Progress ();
+
+ start = vol_spd_diff_data_file.Start ();
+ end = vol_spd_diff_data_file.End ();
+
+ if (start < low || end > high || (link > 0 && link != vol_spd_diff_data_file.Link ()) || (dir >= 0 && dir != vol_spd_diff_data_file.Dir ())) {
+ if (found) {
+ map_itr = link_map.find (link);
+
+ if (map_itr != link_map.end ()) {
+ vol_spd_diff_out.Link (link);
+ vol_spd_diff_out.Dir (dir);
+
+ arcview_vol_spd_diff_data.Copy_Fields (vol_spd_diff_out);
+
+ link_ptr = &link_array [map_itr->second];
+
+ Draw_Link (arcview_vol_spd_diff_data, link_ptr, dir, vol_spd_diff_data_width_fld);
+ }
+ }
+ link = dir = -1;
+ found = false;
+ if (start < low || end > high) continue;
+ }
+ if (link < 0) {
+ link = vol_spd_diff_data_file.Link ();
+ dir = vol_spd_diff_data_file.Dir ();
+ found = true;
+
+ vol_spd_diff_out.Vol0 (vol_spd_diff_data_file.Vol0 ());
+ vol_spd_diff_out.Vol1 (vol_spd_diff_data_file.Vol1 ());
+ vol_spd_diff_out.Vdiff (vol_spd_diff_data_file.Vdiff ());
+ vol_spd_diff_out.Spd0 (vol_spd_diff_data_file.Spd0 ());
+ vol_spd_diff_out.Spd1 (vol_spd_diff_data_file.Spd1 ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_data_file.Sdiff ());
+ vol_spd_diff_out.Use_Vol0 (vol_spd_diff_data_file.Use_Vol0 ());
+ vol_spd_diff_out.Use_Vol1 (vol_spd_diff_data_file.Use_Vol1 ());
+ vol_spd_diff_out.Use_Vdiff (vol_spd_diff_data_file.Use_Vdiff ());
+ vol_spd_diff_out.Use_Spd0 (vol_spd_diff_data_file.Use_Spd0 ());
+ vol_spd_diff_out.Use_Spd1 (vol_spd_diff_data_file.Use_Spd1 ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_data_file.Use_Sdiff ());
+ vol_spd_diff_out.Notes (vol_spd_diff_data_file.Notes ());
+ } else {
+ vht = (vol_spd_diff_out.Vol0 () * vol_spd_diff_out.Spd0 () + vol_spd_diff_data_file.Vol0 () * vol_spd_diff_data_file.Spd0 ());
+ vol_spd_diff_out.Vol0 (vol_spd_diff_out.Vol0 () + vol_spd_diff_data_file.Vol0 ());
+ if (vol_spd_diff_out.Vol0 () != 0) {
+ vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ } else {
+ vol_spd_diff_out.Spd0 (0);
+ }
+
+ vht = (vol_spd_diff_out.Vol1 () * vol_spd_diff_out.Spd1 () + vol_spd_diff_data_file.Vol1 () * vol_spd_diff_data_file.Spd1 ());
+ vol_spd_diff_out.Vol1 (vol_spd_diff_out.Vol1 () + vol_spd_diff_data_file.Vol1 ());
+ if (vol_spd_diff_out.Vol1 () != 0) {
+ vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ } else {
+ vol_spd_diff_out.Spd1 (0);
+ }
+
+ vol_spd_diff_out.Vdiff (vol_spd_diff_out.Vdiff () + vol_spd_diff_data_file.Vdiff ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_out.Spd1 () - vol_spd_diff_out.Spd0 ());
+
+ vht = (vol_spd_diff_out.Use_Vol0 () * vol_spd_diff_out.Use_Spd0 () + vol_spd_diff_data_file.Use_Vol0 () * vol_spd_diff_data_file.Use_Spd0 ());
+ vol_spd_diff_out.Use_Vol0 (vol_spd_diff_out.Use_Vol0 () + vol_spd_diff_data_file.Use_Vol0 ());
+ if (vol_spd_diff_out.Use_Vol0 () != 0) {
+ vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ } else {
+ vol_spd_diff_out.Use_Spd0 (0);
+ }
+
+ vht = (vol_spd_diff_out.Use_Vol1 () * vol_spd_diff_out.Use_Spd1 () + vol_spd_diff_data_file.Use_Vol1 () * vol_spd_diff_data_file.Use_Spd1 ());
+ vol_spd_diff_out.Use_Vol1 (vol_spd_diff_out.Use_Vol1 () + vol_spd_diff_data_file.Use_Vol1 ());
+ if (vol_spd_diff_out.Use_Vol1 () != 0) {
+ vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
+ } else {
+ vol_spd_diff_out.Use_Spd1 (0);
+ }
+ vol_spd_diff_out.Use_Vdiff (vol_spd_diff_out.Use_Vdiff () + vol_spd_diff_data_file.Use_Vdiff ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_out.Use_Spd1 () - vol_spd_diff_out.Use_Spd0 ());
+ }
+ }
+ End_Progress ();
+
+ arcview_vol_spd_diff_data.Close ();
+ }
+}
Modified: version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (5);
+ Version (6);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPlan/Get_Trip_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/Get_Trip_Data.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/ArcPlan/Get_Trip_Data.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -17,7 +17,6 @@
Point_Map_Itr pt_itr;
if (Data_Service::Get_Trip_Data (file, data)) {
-
if (select_households && !hhold_range.In_Range (data.Household ())) return (false);
if (data.Mode () < MAX_MODE && !select_mode [data.Mode ()]) return (false);
if (select_purposes && !purpose_range.In_Range (data.Purpose ())) return (false);
@@ -77,6 +76,10 @@
attractions [index]++;
}
}
+
+ if (problem_out) {
+ return (true);
+ }
}
return (false);
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Demand_Updates.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Demand_Updates.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Converge_Service/Demand_Updates.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,6 +11,7 @@
void Converge_Service::Demand_Updates (void)
{
if (Time_Updates () || Toll_Updates () || Transit_Updates () || Parking_Updates ()) {
+
Show_Message ("Updating Demand Impacts -- Record");
Set_Progress ();
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -77,12 +77,20 @@
connect_ptr = &connect_array [num];
dir_ptr = &dir_array [connect_ptr->Dir_Index ()];
- in_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ if (dir_ptr->Lanes () > 0) {
+ in_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ } else {
+ in_cap = 0;
+ }
connect_ptr->Next_To (dir_ptr->First_Connect_To ());
dir_ptr->First_Connect_To (num);
dir_ptr = &dir_array [connect_ptr->To_Index ()];
- out_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ if (dir_ptr->Lanes () > 0) {
+ out_cap = dir_ptr->Capacity () / dir_ptr->Lanes ();
+ } else {
+ out_cap = 0;
+ }
connect_ptr->Next_From (dir_ptr->First_Connect_From ());
dir_ptr->First_Connect_From (num);
Modified: version7/branches/aecom/Transims70/Data_Service/Set_Link_Direction.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Set_Link_Direction.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Data_Service/Set_Link_Direction.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -62,14 +62,15 @@
dir = node;
}
}
- if (offset < 0 || offset > link_ptr->Length ()) {
- Warning (String ("%s %d Link %d Offset %.1lf is Out of Range (0..%.1lf)") %
- file.File_ID () % Progress_Count () % link_ptr->Link () % UnRound (offset) % UnRound (link_ptr->Length ()));
-
- if (offset < 0) {
- offset = 0;
+ if (offset <= 0 || offset >= link_ptr->Length ()) {
+ if (offset < 0 || offset > link_ptr->Length ()) {
+ Warning (String ("%s %d Link %d Offset %.1lf is Out of Range (0..%.1lf)") %
+ file.File_ID () % Progress_Count () % link_ptr->Link () % UnRound (offset) % UnRound (link_ptr->Length ()));
+ }
+ if (offset <= 0) {
+ offset = Round (10);
} else {
- offset = link_ptr->Length ();
+ offset = link_ptr->Length () - Round (10);
}
}
if (file.Version () <= 40) {
Modified: version7/branches/aecom/Transims70/FileFormat/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/FileFormat/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -32,6 +32,18 @@
Print (2, String ("%s Control Keys:") % Program ());
+ key = Get_Control_String (SCAN_FILE);
+
+ if (!key.empty ()) {
+ scan_file.Open (Project_Filename (key));
+
+ for (i = 0; i < 100; i++) {
+ scan_file.Read ();
+ Write (1, "Record=") << scan_file.Record_String ();
+ }
+ Exit_Stat (DONE);
+ }
+
//---- initialize the file list ----
num = Highest_Control_Group (DATA_FILE, 0);
Modified: version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/FileFormat/FileFormat.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,11 +11,11 @@
FileFormat::FileFormat (void) : Execution_Service ()
{
Program ("FileFormat");
- Version (6);
+ Version (7);
Title ("File Format Conversion");
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
- { DATA_FILE, "DATA_FILE", LEVEL1, REQ_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { DATA_FILE, "DATA_FILE", LEVEL1, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ DATA_FORMAT, "DATA_FORMAT", LEVEL1, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ DATA_SELECT_FIELD, "DATA_SELECT_FIELD", LEVEL1, OPT_KEY, TEXT_KEY, "", "NAME = VALUE", NO_HELP },
{ NEW_DATA_FILE, "NEW_DATA_FILE", LEVEL1, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
@@ -37,6 +37,7 @@
{ NEW_COMBINE_FIELDS_FORMAT, "NEW_COMBINE_FIELDS_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
{ CONVERSION_SCRIPT, "CONVERSION_SCRIPT", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { SCAN_FILE, "SCAN_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
END_CONTROL
};
const char *reports [] = {
Modified: version7/branches/aecom/Transims70/FileFormat/FileFormat.hpp
===================================================================
--- version7/branches/aecom/Transims70/FileFormat/FileFormat.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/FileFormat/FileFormat.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -30,7 +30,7 @@
DATA_FIELD_MAP, DATA_INDEX_FIELD,
NEW_MERGE_DATA_FILE, NEW_MERGE_DATA_FORMAT, NEW_CONCATENATE_DATA_FILE, NEW_CONCATENATE_DATA_FORMAT,
NEW_COMBINE_FIELDS_FILE, NEW_COMBINE_FIELDS_FORMAT,
- CONVERSION_SCRIPT,
+ CONVERSION_SCRIPT, SCAN_FILE,
};
virtual void Program_Control (void);
virtual void Page_Header (void);
@@ -43,6 +43,7 @@
bool script_flag, stats_flag, combine_flag, index_flag, merge_flag, concat_flag;
Db_Header combine_file, merge_file, concat_file;
+ Db_File scan_file;
//---- field statistics ----
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
@@ -77,6 +77,7 @@
<ClInclude Include="..\Include\Vehicle_File.hpp" />
<ClInclude Include="..\Include\Veh_Type_File.hpp" />
<ClInclude Include="..\Include\Volume_Speed_File.hpp" />
+ <ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp" />
<ClInclude Include="..\Include\Vol_Spd_Diff_File.hpp" />
<ClInclude Include="..\Include\Zone_File.hpp" />
</ItemGroup>
@@ -141,6 +142,7 @@
<ClCompile Include="Vehicle_File.cpp" />
<ClCompile Include="Veh_Type_File.cpp" />
<ClCompile Include="Volume_Speed_File.cpp" />
+ <ClCompile Include="Vol_Spd_Diff_Data_File.cpp" />
<ClCompile Include="Vol_Spd_Diff_File.cpp" />
<ClCompile Include="Zone_File.cpp" />
</ItemGroup>
Modified: version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/File_Service/File_Service.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
@@ -197,6 +197,9 @@
<ClInclude Include="..\Include\Travel_Time_File.hpp">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\Vol_Spd_Diff_Data_File.hpp">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="File_Service.cpp">
@@ -385,5 +388,8 @@
<ClCompile Include="Travel_Time_File.cpp">
<Filter>Source Files\Files</Filter>
</ClCompile>
+ <ClCompile Include="Vol_Spd_Diff_Data_File.cpp">
+ <Filter>Source Files\Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/File_Service/Trip_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Trip_File.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/File_Service/Trip_File.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -90,7 +90,7 @@
Trip_Data & Trip_File::Get_Data (Trip_Data &trip_rec)
{
if (Version () < 60) {
- exe->Error (String ("Version %.1lf %s files should be converted to Version %.1lf using NewFormat") % (Version () / 10.0) % File_ID () % (VERSION_CODE / 10.0));
+ exe->Error (String ("Version %.1lf %s files should be converted to Version %.1lf using NewFormat") % (Version () / 10.0) % File_ID () % (Release () / 10.0));
}
trip_rec.Household (Household ());
trip_rec.Person (Person ());
Added: version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp (rev 0)
+++ version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_Data_File.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -0,0 +1,234 @@
+//*********************************************************
+// Vol_Spd_Diff_Data_File.cpp - Volume-Speed Difference Data File
+//*********************************************************
+
+#include "Vol_Spd_Diff_Data_File.hpp"
+
+//-----------------------------------------------------------
+// Vol_Spd_Diff_Data_File constructors
+//-----------------------------------------------------------
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (Access_Type access, string format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (string filename, Access_Type access, string format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+
+ Open (filename);
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (Access_Type access, Format_Type format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+}
+
+Vol_Spd_Diff_Data_File::Vol_Spd_Diff_Data_File (string filename, Access_Type access, Format_Type format, bool lane_use_flag, int data_type) :
+ Db_Header (access, format)
+{
+ Lane_Use_Flag (lane_use_flag);
+ Data_Type (data_type);
+ Setup ();
+
+ Open (filename);
+}
+
+//-----------------------------------------------------------
+// Setup
+//-----------------------------------------------------------
+
+void Vol_Spd_Diff_Data_File::Setup (void)
+{
+ File_Type ("Vol Spd Diff Data File");
+ File_ID ("VolSpdDiffData");
+
+ link = dir = start = end = length = max_spd = -1;
+ vol0 = vol1 = vdiff = spd0 = spd1 = sdiff = -1;
+ use_vol0 = use_vol1 = vdiff = use_spd0 = use_spd1 = use_sdiff = -1;
+ vmt0 = vmt1 = vmtx = vht0 = vht1 = vhtx = vhd0 = vhd1 = vhdx = -1;
+ use_vmt0 = use_vmt1 = use_vmtx = use_vht0 = use_vht1 = use_vhtx = use_vhd0 = use_vhd1 = use_vhdx = -1;
+}
+
+//---------------------------------------------------------
+// Create_Fields
+//---------------------------------------------------------
+
+bool Vol_Spd_Diff_Data_File::Create_Fields (void)
+{
+ Clear_Fields ();
+
+ Add_Field ("LINK", DB_INTEGER, 10);
+ Add_LinkDir_Field ();
+
+ Add_Field ("START", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+ Add_Field ("END", DB_TIME, TIME_FIELD_SIZE, Time_Format ());
+
+ double value = 10.1;
+ if (data_type == VMT_DATA || data_type == PMT_DATA || data_type == VHT_DATA || data_type == PHT_DATA) {
+ value = 12.6;
+ }
+ Add_Field ("VOL0", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("VOL1", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("VOL_DIFF", DB_DOUBLE, value, Performance_Units_Map (data_type));
+
+ Add_Field ("SPD0", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("SPD1", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("SPD_DIFF", DB_DOUBLE, 5.1, MPH);
+
+ if (lane_use_flag) {
+ Add_Field ("USE_VOL0", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("USE_VOL1", DB_DOUBLE, value, Performance_Units_Map (data_type));
+ Add_Field ("USE_VDIFF", DB_DOUBLE, value, Performance_Units_Map (data_type));
+
+ Add_Field ("USE_SPD0", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("USE_SPD1", DB_DOUBLE, 5.1, MPH);
+ Add_Field ("USE_SDIFF", DB_DOUBLE, 5.1, MPH);
+ }
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
+ Add_Field ("LENGTH", DB_DOUBLE, 8.1, FEET);
+ Add_Field ("MAX_SPD", DB_DOUBLE, 6.1, MPH);
+
+ Add_Field ("VMT0", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("VMT1", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("VMTX", DB_DOUBLE, 12.6, EMT);
+
+ Add_Field ("VHT0", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("VHT1", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("VHTX", DB_DOUBLE, 12.6, EHT);
+
+ Add_Field ("VHD0", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("VHD1", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("VHDX", DB_DOUBLE, 12.6, EHD);
+
+ if (lane_use_flag) {
+ Add_Field ("USE_VMT0", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("USE_VMT1", DB_DOUBLE, 12.6, EMT);
+ Add_Field ("USE_VMTX", DB_DOUBLE, 12.6, EMT);
+
+ Add_Field ("USE_VHT0", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("USE_VHT1", DB_DOUBLE, 12.6, EHT);
+ Add_Field ("USE_VHTX", DB_DOUBLE, 12.6, EHT);
+
+ Add_Field ("USE_VHD0", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("USE_VHD1", DB_DOUBLE, 12.6, EHD);
+ Add_Field ("USE_VHDX", DB_DOUBLE, 12.6, EHD);
+ }
+ return (Set_Field_Numbers ());
+}
+
+//-----------------------------------------------------------
+// Set_Field_Numbers
+//-----------------------------------------------------------
+
+bool Vol_Spd_Diff_Data_File::Set_Field_Numbers (void)
+{
+ //---- required fields ----
+
+ link = Required_Field ("LINK");
+
+ if (link < 0) return (false);
+
+ //---- optional fields ----
+
+ dir = LinkDir_Type_Field ();
+ start = Optional_Field (START_FIELD_NAMES);
+ end = Optional_Field (END_FIELD_NAMES);
+
+ vol0 = Optional_Field ("VOL0", "VOL_BASE");
+ vol1 = Optional_Field ("VOL1", "VOL_ALT");
+ vdiff = Optional_Field ("VOL_DIFF", "VDIFF");
+
+ spd0 = Optional_Field ("SPD0", "SPD_BASE");
+ spd1 = Optional_Field ("SPD1", "SPD_ALT");
+ sdiff = Optional_Field ("SPD_DIFF", "SDIFF");
+
+ use_vol0 = Optional_Field ("USE_VOL0", "USE_V_BASE");
+ use_vol1 = Optional_Field ("USE_VOL1", "USE_V_ALT");
+ use_vdiff = Optional_Field ("USE_VDIFF");
+
+ use_spd0 = Optional_Field ("USE_SPD0", "USE_S_BASE");
+ use_spd1 = Optional_Field ("USE_SPD1", "USE_S_ALT");
+ use_sdiff = Optional_Field ("USE_SDIFF");
+
+ Lane_Use_Flag (use_vol0 >= 0 || use_spd0 >= 0);
+
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
+
+ length = Optional_Field ("LENGTH");
+ max_spd = Optional_Field ("MAX_SPD");
+
+ vmt0 = Optional_Field ("VMT0", "VMT_BASE");
+ vmt1 = Optional_Field ("VMT1", "VMT_ALT");
+ vmtx = Optional_Field ("VMTX", "VMT_DIFF");
+ vht0 = Optional_Field ("VHT0", "VHT_BASE");
+ vht1 = Optional_Field ("VHT1", "VHT_ALT");
+ vhtx = Optional_Field ("VHTX", "VHT_DIFF");
+ vhd0 = Optional_Field ("VHD0", "VHD_BASE");
+ vhd1 = Optional_Field ("VHD1", "VHD_ALT");
+ vhdx = Optional_Field ("VHDX", "VHD_DIFF");
+
+ use_vmt0 = Optional_Field ("USE_VMT0", "USE_VMT_BASE");
+ use_vmt1 = Optional_Field ("USE_VMT1", "USE_VMT_ALT");
+ use_vmtx = Optional_Field ("USE_VMTX", "USE_VMT_DIFF");
+ use_vht0 = Optional_Field ("USE_VHT0", "USE_VHT_BASE");
+ use_vht1 = Optional_Field ("USE_VHT1", "USE_VHT_ALT");
+ use_vhtx = Optional_Field ("USE_VHTX", "USE_VHT_DIFF");
+ use_vhd0 = Optional_Field ("USE_VHD0", "USE_VHD_BASE");
+ use_vhd1 = Optional_Field ("USE_VHD1", "USE_VHD_ALT");
+ use_vhdx = Optional_Field ("USE_VHDX", "USE_VHD_DIFF");
+
+ //---- set default units ----
+
+ Set_Units (start, HOUR_CLOCK);
+ Set_Units (end, HOUR_CLOCK);
+ Set_Units (vol0, Performance_Units_Map (data_type));
+ Set_Units (vol1, Performance_Units_Map (data_type));
+ Set_Units (vdiff, Performance_Units_Map (data_type));
+ Set_Units (spd0, MPH);
+ Set_Units (spd1, MPH);
+ Set_Units (sdiff, MPH);
+ Set_Units (use_vol0, Performance_Units_Map (data_type));
+ Set_Units (use_vol1, Performance_Units_Map (data_type));
+ Set_Units (use_vdiff, Performance_Units_Map (data_type));
+ Set_Units (use_spd0, MPH);
+ Set_Units (use_spd1, MPH);
+ Set_Units (use_sdiff, MPH);
+
+ Set_Units (length, FEET);
+ Set_Units (max_spd, MPH);
+
+ Set_Units (vmt0, EMT);
+ Set_Units (vmt1, EMT);
+ Set_Units (vmtx, EMT);
+ Set_Units (vht0, EHT);
+ Set_Units (vht1, EHT);
+ Set_Units (vhtx, EHT);
+ Set_Units (vhd0, EHD);
+ Set_Units (vhd1, EHD);
+ Set_Units (vhdx, EHD);
+
+ Set_Units (use_vmt0, EMT);
+ Set_Units (use_vmt1, EMT);
+ Set_Units (use_vmtx, EMT);
+ Set_Units (use_vht0, EHT);
+ Set_Units (use_vht1, EHT);
+ Set_Units (use_vhtx, EHT);
+ Set_Units (use_vhd0, EHD);
+ Set_Units (use_vhd1, EHD);
+ Set_Units (use_vhdx, EHD);
+
+ return (true);
+}
Modified: version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GTFSData/Build_Routes.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -107,7 +107,7 @@
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 ();
//---- build the stop list ----
@@ -116,7 +116,6 @@
if (xy_ptr != 0) {
stop_ptr = &stop_array [stop_time_ptr->Stop ()];
-
//---- create a TRANSIMS stop ----
if (stop_ptr->Space () == 0) {
@@ -144,9 +143,9 @@
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) {
+
+ if ((diff1 < buffer && off1 <= offset) && (diff2 < buffer && off2 >= offset)) {
+ if (diff < best_diff) {
best_diff = diff;
best_offset = offset;
link = shape_itr->link;
Modified: version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GTFSData/GTFSData.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,7 +11,7 @@
GTFSData::GTFSData (void) : Select_Service (), Projection ()
{
Program ("GTFSData");
- Version (1);
+ Version (2);
Title ("Convert GTFS Data to TRANSIMS");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/GTFSData/Offset_Points.cpp
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/Offset_Points.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GTFSData/Offset_Points.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -38,6 +38,8 @@
if (offset == 0.0) {
start_flag = true;
+ pt1.x = x2;
+ pt1.y = y2;
}
} else {
dx = x2 - x1;
@@ -44,7 +46,7 @@
dy = y2 - y1;
length += max_len = sqrt (dx * dx + dy * dy);
-
+
if (!start_flag) {
if (length >= offset) {
if (length > offset) {
@@ -55,6 +57,9 @@
}
pt1.x = x1 + dx * factor;
pt1.y = y1 + dy * factor;
+ } else {
+ pt1.x = x2;
+ pt1.y = y2;
}
start_flag = true;
if (point_flag) break;
@@ -62,8 +67,11 @@
}
if (start_flag) {
if (length <= end_offset) {
- if (length == offset) continue;
- if (length == end_offset) break;
+ if (length != offset && length == end_offset) {
+ pt2.x = x2;
+ pt2.y = y2;
+ break;
+ }
} else {
if (max_len > 0.0) {
factor = (end_offset + max_len - length) / max_len;
@@ -79,5 +87,9 @@
x1 = x2;
y1 = y2;
}
+ if (length < end_offset) {
+ pt2.x = x2;
+ pt2.y = y2;
+ }
}
Modified: version7/branches/aecom/Transims70/GridData/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/Control.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -1081,6 +1081,21 @@
}
new_zone_file->Write_Header ();
}
+
+ //---- grid selection file ----
+
+ key = Get_Control_String (GRID_SELECTION_FILE);
+
+ if (!key.empty ()) {
+ grid_select_flag = true;
+
+ Print (1);
+ grid_select_file.File_Type ("Grid Selection File");
+
+ if (!grid_select_file.Open (Project_Filename (key))) {
+ File_Error ("Opening Grid Selection File", grid_select_file.Filename ());
+ }
+ }
return;
data_error:
Modified: version7/branches/aecom/Transims70/GridData/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/Execute.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/Execute.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -32,6 +32,12 @@
}
}
+ //---- grid_select_file ----
+
+ if (grid_select_flag) {
+ Read_Grid_Select ();
+ }
+
//---- read zone data files ----
if (zone_flag) {
Modified: version7/branches/aecom/Transims70/GridData/GridData.cpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/GridData.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/GridData.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -11,7 +11,7 @@
GridData::GridData (void) : Data_Service () , Shape_Tools ()
{
Program ("GridData");
- Version (22);
+ Version (23);
Title ("Grid Data Processor");
System_File_Type optional_files [] = {
@@ -85,7 +85,7 @@
{ NEW_ZONE_ID_FIELD, "NEW_ZONE_ID_FIELD", LEVEL0, OPT_KEY, TEXT_KEY, "ZONE", "", NO_HELP },
{ NEW_ZONE_SUM_FIELD, "NEW_ZONE_SUM_FIELD", LEVEL1, OPT_KEY, TEXT_KEY, "DATA", "", NO_HELP },
-
+ { GRID_SELECTION_FILE, "GRID_SELECTION_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP},
END_CONTROL
};
const char *reports [] = {
@@ -104,7 +104,7 @@
link_cell_size = 10.0;
data_offset = 4;
script_flag = grid_flag = temp_flag = point_flag = arc_point_flag = zone_flag = polygon_flag = summary_flag = sum_data_flag = false;
- link_flag = boundary_flag = arc_link_flag = line_flag = new_zone_flag = point_data_flag = false;
+ link_flag = boundary_flag = arc_link_flag = line_flag = new_zone_flag = point_data_flag = grid_select_flag = false;
int ignore_keys [] = {
TIME_OF_DAY_FORMAT, MODEL_START_TIME, MODEL_END_TIME, MODEL_TIME_INCREMENT,
Modified: version7/branches/aecom/Transims70/GridData/GridData.hpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/GridData.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/GridData.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -56,7 +56,7 @@
SUMMARY_SELECT_FIELD, SUMMARY_SELECT_VALUES,
SUMMARY_DATA_FIELD, SUMMARY_DATA_VALUE, SUMMARY_DATA_FILTER, NORMALIZE_DATA_VALUE,
- NEW_ZONE_ID_FIELD, NEW_ZONE_SUM_FIELD,
+ NEW_ZONE_ID_FIELD, NEW_ZONE_SUM_FIELD, GRID_SELECTION_FILE,
};
virtual void Program_Control (void);
virtual void Page_Header (void);
@@ -70,7 +70,7 @@
int data_offset, in_zone_field, out_zone_field, skip_grid_field, new_zone_id, new_zone_count;
bool script_flag, grid_flag, temp_flag, point_flag, arc_point_flag, zone_flag, polygon_flag, summary_flag, sum_data_flag;
- bool link_flag, boundary_flag, arc_link_flag, line_flag, new_zone_flag, point_data_flag;
+ bool link_flag, boundary_flag, arc_link_flag, line_flag, new_zone_flag, point_data_flag, grid_select_flag;
double grid_size, min_point_dist, max_point_dist, min_link_dist, max_link_dist, link_cell_size, max_line_dist, skip_grid_value;
string temp_name;
@@ -78,6 +78,7 @@
Integers new_zone_in_flds, new_zone_out_flds;
Dbls_Map new_zone_map;
Zone_File *new_zone_file;
+ Int_Set grid_select_list;
Db_Header point_file, summary_file;
Db_Data_Array point_data, link_data, line_data;
@@ -87,7 +88,7 @@
Polygon_Map boundary;
Polygon_Array line_shape;
- Db_File program_file;
+ Db_File program_file, grid_select_file;
User_Program program;
//---- zone data groups ----
@@ -173,6 +174,7 @@
Flts_Array link_cell_shares;
void Set_Files (void);
+ void Read_Grid_Select ();
void Read_Data (void);
void Read_Polygons (void);
void Read_Boundary (void);
Modified: version7/branches/aecom/Transims70/GridData/GridData.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/GridData/GridData.vcxproj 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/GridData.vcxproj 2018-05-03 00:56:08 UTC (rev 1705)
@@ -137,6 +137,7 @@
<ClCompile Include="Point_Grid.cpp" />
<ClCompile Include="Read_Boundary.cpp" />
<ClCompile Include="Read_Data.cpp" />
+ <ClCompile Include="Read_Grid_Select.cpp" />
<ClCompile Include="Read_Lines.cpp" />
<ClCompile Include="Read_Links.cpp" />
<ClCompile Include="Read_Points.cpp" />
Modified: version7/branches/aecom/Transims70/GridData/GridData.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/GridData/GridData.vcxproj.filters 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/GridData.vcxproj.filters 2018-05-03 00:56:08 UTC (rev 1705)
@@ -79,5 +79,8 @@
<ClCompile Include="Write_Zones.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Read_Grid_Select.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Added: version7/branches/aecom/Transims70/GridData/Read_Grid_Select.cpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/Read_Grid_Select.cpp (rev 0)
+++ version7/branches/aecom/Transims70/GridData/Read_Grid_Select.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -0,0 +1,39 @@
+//*********************************************************
+// Read_Grid_Select.cpp - Read the Grid Selection File
+//*********************************************************
+
+#include "GridData.hpp"
+
+//---------------------------------------------------------
+// Read_Grid_Select
+//---------------------------------------------------------
+
+void GridData::Read_Grid_Select (void)
+{
+ int grid;
+ String data;
+ Strings grids;
+ Str_Itr grid_itr;
+
+ Show_Message (String ("Reading %s -- Record") % grid_select_file.File_Type ());
+ Set_Progress ();
+
+ while (grid_select_file.Read_Record ()) {
+ Show_Progress ();
+
+ data = grid_select_file.Record_String ();
+
+ data.Parse (grids);
+
+ for (grid_itr = grids.begin (); grid_itr != grids.end (); grid_itr++) {
+ grid = grid_itr->Integer ();
+
+ grid_select_list.insert (grid);
+ }
+ }
+ End_Progress ();
+
+ Print (2, "Number of Grid Selection Records = ") << grid_select_list.size ();
+
+ grid_select_file.Close ();
+}
Modified: version7/branches/aecom/Transims70/GridData/Write_Grid.cpp
===================================================================
--- version7/branches/aecom/Transims70/GridData/Write_Grid.cpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/GridData/Write_Grid.cpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -12,7 +12,7 @@
void GridData::Write_Grid ()
{
- int i, zone, count;
+ int i, zone, count, id;
double value, x0, y0, grid_wt;
Data_Itr data_itr;
@@ -29,6 +29,7 @@
Dbls_Map_Itr zone_map_itr;
Dbls_Map_Stat zone_map_stat;
Doubles zone_sum, *zone_sum_ptr;
+ Int_Set_Itr id_itr;
count = 0;
@@ -38,6 +39,14 @@
while (in_file.Read_Record ()) {
Show_Progress ();
+ if (grid_select_flag) {
+ id = in_file.Get_Integer ("ID");
+
+ id_itr = grid_select_list.find (id);
+
+ if (id_itr == grid_select_list.end ()) continue;
+ }
+
out_file.Reset_Record ();
out_file.Copy_Fields (in_file);
Modified: version7/branches/aecom/Transims70/Include/Best_List.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Best_List.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Include/Best_List.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -35,6 +35,19 @@
};
//---------------------------------------------------------
+// Float_List Class definition
+//---------------------------------------------------------
+
+class SYSLIB_API Float_List : public Floats
+{
+public:
+ Float_List (void) {}
+
+ float Best (int num);
+ bool Combine (Float_List &list, int index = 1, bool round_flag = false);
+};
+
+//---------------------------------------------------------
// Dtime_List Class definition
//---------------------------------------------------------
Modified: version7/branches/aecom/Transims70/Include/Control_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Control_Service.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Include/Control_Service.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -71,6 +71,7 @@
bool Get_Control_List (int code, Integer_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Double_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
+ bool Get_Control_List (int code, Float_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Dtime_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, Bool_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
bool Get_Control_List (int code, String_List &list, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
@@ -77,6 +78,7 @@
bool Get_Control_List_Groups (int code, Integer_List &list, bool round_flag = false);
bool Get_Control_List_Groups (int code, Double_List &list, bool scale_flag = false);
+ bool Get_Control_List_Groups (int code, Float_List &list, bool scale_flag = false);
bool Get_Control_List_Groups (int code, Dtime_List &list, bool round_flag = false);
bool Get_Control_List_Groups (int code, Bool_List &list);
bool Get_Control_List_Groups (int code, String_List &list);
@@ -98,6 +100,7 @@
Dtime Time_Range_Check (Dtime value, String range);
bool List_Range_Check (Integer_List &list, String range);
bool List_Range_Check (Double_List &list, String range);
+ bool List_Range_Check (Float_List &list, String range);
bool List_Range_Check (Dtime_List &list, String range);
bool Control_Key_Empty (int code, int nest1 = 0, int nest2 = 0, int nest3 = 0, int nest4 = 0);
Modified: version7/branches/aecom/Transims70/Include/Data_Pack.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Data_Pack.hpp 2018-03-05 18:47:35 UTC (rev 1704)
+++ version7/branches/aecom/Transims70/Include/Data_Pack.hpp 2018-05-03 00:56:08 UTC (rev 1705)
@@ -58,6 +58,7 @@
{
public:
Vector (void) {}
+ Vector (int num, Type value) { vector <Type>::assign (num, value); }
bool Pack (Data_Buffer &data, bool type_flag = false)
...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-03-05 18:47:39
|
Revision: 1704
http://sourceforge.net/p/transims/code/1704
Author: davidroden
Date: 2018-03-05 18:47:35 +0000 (Mon, 05 Mar 2018)
Log Message:
-----------
TRANSIMS Version 7 updated from AECOM branch 1703
Modified Paths:
--------------
version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/trunk/Transims70/Converge_Service/Control.cpp
version7/trunk/Transims70/Converge_Service/Converge_Check.cpp
version7/trunk/Transims70/Converge_Service/Converge_Service.cpp
version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
version7/trunk/Transims70/Converge_Service/Update_Times.cpp
version7/trunk/Transims70/Data_Service/Data_Service.cpp
version7/trunk/Transims70/Data_Service/Performance_Data.cpp
version7/trunk/Transims70/Data_Service/Read_Access_Links.cpp
version7/trunk/Transims70/Data_Service/Read_Connections.cpp
version7/trunk/Transims70/Data_Service/Read_Detectors.cpp
version7/trunk/Transims70/Data_Service/Read_Events.cpp
version7/trunk/Transims70/Data_Service/Read_Households.cpp
version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/trunk/Transims70/Data_Service/Read_Lines.cpp
version7/trunk/Transims70/Data_Service/Read_Links.cpp
version7/trunk/Transims70/Data_Service/Read_Locations.cpp
version7/trunk/Transims70/Data_Service/Read_Nodes.cpp
version7/trunk/Transims70/Data_Service/Read_Parking_Lots.cpp
version7/trunk/Transims70/Data_Service/Read_Performance.cpp
version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp
version7/trunk/Transims70/Data_Service/Read_Plan_Skims.cpp
version7/trunk/Transims70/Data_Service/Read_Plans.cpp
version7/trunk/Transims70/Data_Service/Read_Route_Nodes.cpp
version7/trunk/Transims70/Data_Service/Read_Selections.cpp
version7/trunk/Transims70/Data_Service/Read_Shapes.cpp
version7/trunk/Transims70/Data_Service/Read_Signals.cpp
version7/trunk/Transims70/Data_Service/Read_Signs.cpp
version7/trunk/Transims70/Data_Service/Read_Stops.cpp
version7/trunk/Transims70/Data_Service/Read_Travelers.cpp
version7/trunk/Transims70/Data_Service/Read_Trips.cpp
version7/trunk/Transims70/Data_Service/Read_Veh_Types.cpp
version7/trunk/Transims70/Data_Service/Read_Volume_Speeds.cpp
version7/trunk/Transims70/Data_Service/Read_Zones.cpp
version7/trunk/Transims70/File_Service/Control.cpp
version7/trunk/Transims70/File_Service/Vol_Spd_Diff_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/Flow_Time_Service.vcxproj
version7/trunk/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters
version7/trunk/Transims70/Flow_Time_Service/Update_Times.cpp
version7/trunk/Transims70/Include/Converge_Service.hpp
version7/trunk/Transims70/Include/Data_Service.hpp
version7/trunk/Transims70/Include/Difference_Data.hpp
version7/trunk/Transims70/Include/Flow_Time_Service.hpp
version7/trunk/Transims70/Include/Lane_Use_Data.hpp
version7/trunk/Transims70/Include/Performance_Data.hpp
version7/trunk/Transims70/Include/Smooth_Data.hpp
version7/trunk/Transims70/Include/System_Defines.hpp
version7/trunk/Transims70/Include/Trip_Gap_Data.hpp
version7/trunk/Transims70/NetMerge/Execute.cpp
version7/trunk/Transims70/NetMerge/NetMerge.cpp
version7/trunk/Transims70/NetMerge/NetMerge.hpp
version7/trunk/Transims70/NetMerge/NetMerge.vcxproj
version7/trunk/Transims70/NetMerge/NetMerge.vcxproj.filters
version7/trunk/Transims70/NetPrep/Input_Links.cpp
version7/trunk/Transims70/NetPrep/NetPrep.cpp
version7/trunk/Transims70/PerfPrep/Control.cpp
version7/trunk/Transims70/PerfPrep/Execute.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.cpp
version7/trunk/Transims70/PerfPrep/PerfPrep.hpp
version7/trunk/Transims70/PerfPrep/PerfPrep.vcxproj
version7/trunk/Transims70/PerfPrep/PerfPrep.vcxproj.filters
version7/trunk/Transims70/PlanSelect/PlanSelect.cpp
version7/trunk/Transims70/Router/Iteration_Loop.cpp
version7/trunk/Transims70/Router/Minimize_VHT.cpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router_Service/Control.cpp
version7/trunk/Transims70/Router_Service/Get_Trip_Data.cpp
version7/trunk/Transims70/Router_Service/Path_Builder.hpp
version7/trunk/Transims70/Router_Service/Plan_Processing.cpp
version7/trunk/Transims70/Router_Service/Reskim_Plans.cpp
version7/trunk/Transims70/Router_Service/Save_Results.cpp
version7/trunk/Transims70/Router_Service/Trip_Loop.cpp
version7/trunk/Transims70/Router_Service/Update_Data.cpp
version7/trunk/Transims70/SubareaPlans/Convert_Plan.cpp
version7/trunk/Transims70/SubareaPlans/SubareaPlans.cpp
version7/trunk/Transims70/SubareaPlans/Transit_Plans.cpp
version7/trunk/Transims70/SysLib/Service/Control_Service.cpp
version7/trunk/Transims70/SysLib/Service/Static_Service.cpp
version7/trunk/Transims70/SysLib/Tools/Difference_Data.cpp
version7/trunk/Transims70/SysLib/Tools/Shape_Tools.cpp
version7/trunk/Transims70/SysLib/Tools/Smooth_Data.cpp
version7/trunk/Transims70/SysLib/Tools/Trip_Gap_Data.cpp
version7/trunk/Transims70/Transims71.sln
version7/trunk/Transims70/TripPrep/Control.cpp
version7/trunk/Transims70/TripPrep/Execute.cpp
version7/trunk/Transims70/TripPrep/TripPrep.cpp
version7/trunk/Transims70/TripPrep/TripPrep.hpp
version7/trunk/Transims70/TripPrep/TripPrep.vcxproj
version7/trunk/Transims70/TripPrep/TripPrep.vcxproj.filters
version7/trunk/Transims70/Validate/Validate.cpp
version7/trunk/Transims70/Validate/Write_Vol_Spd_Diff.cpp
version7/trunk/Transims70/VolSpdData/Control.cpp
version7/trunk/Transims70/VolSpdData/Execute.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.cpp
version7/trunk/Transims70/VolSpdData/VolSpdData.hpp
version7/trunk/Transims70/VolSpdData/VolSpdData.vcxproj
version7/trunk/Transims70/VolSpdData/VolSpdData.vcxproj.filters
Added Paths:
-----------
version7/trunk/Transims70/Flow_Time_Service/Smooth_Performance.cpp
version7/trunk/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/trunk/Transims70/PerfPrep/Fix_Performance.cpp
version7/trunk/Transims70/PerfPrep/Sum_Performance.cpp
version7/trunk/Transims70/PlanCompare/
version7/trunk/Transims70/TripPrep/Compare_Trips.cpp
version7/trunk/Transims70/VolSpdData/Read_Selection.cpp
version7/trunk/Transims70/VolSpdData/Selection_Check.cpp
version7/trunk/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Removed Paths:
-------------
version7/trunk/Transims70/PerfPrep/Smooth_Performance.cpp
Modified: version7/trunk/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/ArcPerf/ArcPerf.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (7);
+ Version (10);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -19,7 +19,12 @@
Int_Map_Itr map_itr;
Link_Data *link_ptr;
Vol_Spd_Diff_File vol_spd_diff_out;
+
+ vol_spd_diff_out.Lane_Use_Flag (vol_spd_diff_file.Lane_Use_Flag ());
+ vol_spd_diff_out.Data_Type (vol_spd_diff_file.Data_Type ());
+ vol_spd_diff_out.Copy_Fields (vol_spd_diff_file);
+
vol_spd_diff_out.Create_Fields ();
//---- process each time period ----
@@ -59,7 +64,7 @@
start = vol_spd_diff_file.Start ();
end = vol_spd_diff_file.End ();
- if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ())) {
+ if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ()) || (dir >= 0 && dir != vol_spd_diff_file.Dir ())) {
if (found) {
map_itr = link_map.find (link);
@@ -76,7 +81,7 @@
}
link = dir = -1;
found = false;
- continue;
+ if (start < low || end > high) continue;
}
if (link < 0) {
link = vol_spd_diff_file.Link ();
@@ -95,30 +100,44 @@
vol_spd_diff_out.Use_Spd0 (vol_spd_diff_file.Use_Spd0 ());
vol_spd_diff_out.Use_Spd1 (vol_spd_diff_file.Use_Spd1 ());
vol_spd_diff_out.Use_Sdiff (vol_spd_diff_file.Use_Sdiff ());
+ vol_spd_diff_out.Notes (vol_spd_diff_file.Notes ());
} else {
vht = (vol_spd_diff_out.Vol0 () * vol_spd_diff_out.Spd0 () + vol_spd_diff_file.Vol0 () * vol_spd_diff_file.Spd0 ());
vol_spd_diff_out.Vol0 (vol_spd_diff_out.Vol0 () + vol_spd_diff_file.Vol0 ());
- if (vol_spd_diff_out.Vol0 () != 0) vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ if (vol_spd_diff_out.Vol0 () != 0) {
+ vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ } else {
+ vol_spd_diff_out.Spd0 (0);
+ }
vht = (vol_spd_diff_out.Vol1 () * vol_spd_diff_out.Spd1 () + vol_spd_diff_file.Vol1 () * vol_spd_diff_file.Spd1 ());
vol_spd_diff_out.Vol1 (vol_spd_diff_out.Vol1 () + vol_spd_diff_file.Vol1 ());
- if (vol_spd_diff_out.Vol1 () != 0) vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ if (vol_spd_diff_out.Vol1 () != 0) {
+ vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ } else {
+ vol_spd_diff_out.Spd1 (0);
+ }
- vht = (vol_spd_diff_out.Vdiff () * vol_spd_diff_out.Sdiff () + vol_spd_diff_file.Vdiff () * vol_spd_diff_file.Sdiff ());
vol_spd_diff_out.Vdiff (vol_spd_diff_out.Vdiff () + vol_spd_diff_file.Vdiff ());
- if (vol_spd_diff_out.Vdiff () != 0) vol_spd_diff_out.Sdiff (vht / vol_spd_diff_out.Vdiff ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_out.Spd1 () - vol_spd_diff_out.Spd0 ());
vht = (vol_spd_diff_out.Use_Vol0 () * vol_spd_diff_out.Use_Spd0 () + vol_spd_diff_file.Use_Vol0 () * vol_spd_diff_file.Use_Spd0 ());
vol_spd_diff_out.Use_Vol0 (vol_spd_diff_out.Use_Vol0 () + vol_spd_diff_file.Use_Vol0 ());
- if (vol_spd_diff_out.Use_Vol0 () != 0) vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ if (vol_spd_diff_out.Use_Vol0 () != 0) {
+ vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ } else {
+ vol_spd_diff_out.Use_Spd0 (0);
+ }
vht = (vol_spd_diff_out.Use_Vol1 () * vol_spd_diff_out.Use_Spd1 () + vol_spd_diff_file.Use_Vol1 () * vol_spd_diff_file.Use_Spd1 ());
vol_spd_diff_out.Use_Vol1 (vol_spd_diff_out.Use_Vol1 () + vol_spd_diff_file.Use_Vol1 ());
- if (vol_spd_diff_out.Use_Vol1 () != 0) vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
-
- vht = (vol_spd_diff_out.Use_Vdiff () * vol_spd_diff_out.Use_Sdiff () + vol_spd_diff_file.Use_Vdiff () * vol_spd_diff_file.Use_Sdiff ());
+ if (vol_spd_diff_out.Use_Vol1 () != 0) {
+ vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
+ } else {
+ vol_spd_diff_out.Use_Spd1 (0);
+ }
vol_spd_diff_out.Use_Vdiff (vol_spd_diff_out.Use_Vdiff () + vol_spd_diff_file.Use_Vdiff ());
- if (vol_spd_diff_out.Use_Vdiff () != 0) vol_spd_diff_out.Use_Sdiff (vht / vol_spd_diff_out.Use_Vdiff ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_out.Use_Spd1 () - vol_spd_diff_out.Use_Spd0 ());
}
}
End_Progress ();
Modified: version7/trunk/Transims70/Converge_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Converge_Service/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -136,7 +136,13 @@
converge_step_array.push_back (step_data);
}
}
+ if (converge_step_array.size () == 0) {
+ step_data.step = max_converge_step = 1;
+ step_data.max_iteration = 1;
+ converge_step_array.push_back (step_data);
+ }
+
//---- process the step attributes ----
if (Num_Converge_Steps () > 1 || step_flag) {
@@ -255,7 +261,7 @@
}
//---- transit gap criteria ----
-
+
if (Control_Key_Status (TRANSIT_CAPACITY_CRITERIA)) {
if (!Control_Key_Empty (TRANSIT_CAPACITY_CRITERIA) && first) {
Print (1);
@@ -265,7 +271,7 @@
}
//---- parking gap criteria ----
-
+
if (Control_Key_Status (PARKING_CAPACITY_CRITERIA)) {
if (System_File_Flag (PARK_DEMAND) || System_File_Flag (NEW_PARK_DEMAND)) {
if (!Control_Key_Empty (PARKING_CAPACITY_CRITERIA) && first) {
@@ -284,220 +290,228 @@
}
Get_Control_List_Groups (RATIO_CONVERGENCE_CRITERIA, ratio_gap_list);
}
+ }
- //---- trip time difference ----
+ //---- trip time difference ----
- if (Control_Key_Status (PERCENT_TIME_DIFFERENCE)) {
- if (!Control_Key_Empty (PERCENT_TIME_DIFFERENCE)) Print (1);
+ if (Control_Key_Status (PERCENT_TIME_DIFFERENCE)) {
+ if (!Control_Key_Empty (PERCENT_TIME_DIFFERENCE)) Print (1);
- Get_Control_List_Groups (PERCENT_TIME_DIFFERENCE, per_time_list);
+ Get_Control_List_Groups (PERCENT_TIME_DIFFERENCE, per_time_list);
- if (per_time_list.size () > 2 || per_time_list [0] != 0.0) {
+ if (per_time_list.size () > 2 || per_time_list [0] != 0.0) {
- //---- minimum time difference ----
+ //---- minimum time difference ----
- if (Control_Key_Status (MINIMUM_TIME_DIFFERENCE)) {
- Get_Control_List_Groups (MINIMUM_TIME_DIFFERENCE, min_time_list);
- }
+ if (Control_Key_Status (MINIMUM_TIME_DIFFERENCE)) {
+ Get_Control_List_Groups (MINIMUM_TIME_DIFFERENCE, min_time_list);
+ }
- //---- maximum time difference ----
+ //---- maximum time difference ----
- if (Control_Key_Status (MAXIMUM_TIME_DIFFERENCE)) {
- Get_Control_List_Groups (MAXIMUM_TIME_DIFFERENCE, max_time_list);
- }
+ if (Control_Key_Status (MAXIMUM_TIME_DIFFERENCE)) {
+ Get_Control_List_Groups (MAXIMUM_TIME_DIFFERENCE, max_time_list);
}
}
+ }
- //---- trip cost difference ----
+ //---- trip cost difference ----
- if (Control_Key_Status (PERCENT_COST_DIFFERENCE)) {
- if (!Control_Key_Empty (PERCENT_COST_DIFFERENCE)) Print (1);
+ if (Control_Key_Status (PERCENT_COST_DIFFERENCE)) {
+ if (!Control_Key_Empty (PERCENT_COST_DIFFERENCE)) Print (1);
- Get_Control_List_Groups (PERCENT_COST_DIFFERENCE, per_cost_list);
+ Get_Control_List_Groups (PERCENT_COST_DIFFERENCE, per_cost_list);
- if (per_cost_list.size () > 2 || per_cost_list [0] != 0.0) {
+ if (per_cost_list.size () > 2 || per_cost_list [0] != 0.0) {
- //---- minimum cost difference ----
+ //---- minimum cost difference ----
- if (Control_Key_Status (MINIMUM_COST_DIFFERENCE)) {
- Get_Control_List_Groups (MINIMUM_COST_DIFFERENCE, min_cost_list);
- }
+ if (Control_Key_Status (MINIMUM_COST_DIFFERENCE)) {
+ Get_Control_List_Groups (MINIMUM_COST_DIFFERENCE, min_cost_list);
+ }
- //---- maximum cost difference ----
+ //---- maximum cost difference ----
- if (Control_Key_Status (MAXIMUM_COST_DIFFERENCE)) {
- Get_Control_List_Groups (MAXIMUM_COST_DIFFERENCE, max_cost_list);
- }
+ if (Control_Key_Status (MAXIMUM_COST_DIFFERENCE)) {
+ Get_Control_List_Groups (MAXIMUM_COST_DIFFERENCE, max_cost_list);
}
}
+ }
- //---- path time ratio ----
+ //---- path time ratio ----
- if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
+ if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
- //---- minimum path time ratio ----
+ //---- minimum path time ratio ----
- if (Control_Key_Status (MINIMUM_PATH_TIME_RATIO)) {
- Get_Control_List_Groups (MINIMUM_PATH_TIME_RATIO, min_time_ratio_list);
- }
+ Print (1);
+ if (Control_Key_Status (MINIMUM_PATH_TIME_RATIO)) {
+ Get_Control_List_Groups (MINIMUM_PATH_TIME_RATIO, min_time_ratio_list);
+ }
- //---- maximum path time ratio ----
+ //---- maximum path time ratio ----
- if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
- Get_Control_List_Groups (MAXIMUM_PATH_TIME_RATIO, max_time_ratio_list);
- }
+ if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
+ Get_Control_List_Groups (MAXIMUM_PATH_TIME_RATIO, max_time_ratio_list);
}
+ }
- //---- penalty ratio ----
+ //---- penalty ratio ----
- if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
+ if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
- //---- minimum penalty ratio ----
+ //---- minimum penalty ratio ----
- if (Control_Key_Status (MINIMUM_PENALTY_RATIO)) {
- Get_Control_List_Groups (MINIMUM_PENALTY_RATIO, min_penalty_list);
- }
+ Print (1);
+ if (Control_Key_Status (MINIMUM_PENALTY_RATIO)) {
+ Get_Control_List_Groups (MINIMUM_PENALTY_RATIO, min_penalty_list);
+ }
- //---- maximum penalty ratio ----
+ //---- maximum penalty ratio ----
- if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
- Get_Control_List_Groups (MAXIMUM_PENALTY_RATIO, max_penalty_list);
- }
+ if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
+ Get_Control_List_Groups (MAXIMUM_PENALTY_RATIO, max_penalty_list);
}
+ }
- //---- construct the step groups ----
+ //---- construct the step groups ----
- for (step_itr = converge_step_array.begin (); step_itr != converge_step_array.end (); step_itr++) {
- i = step_itr->step;
+ for (step_itr = converge_step_array.begin (); step_itr != converge_step_array.end (); step_itr++) {
+ i = step_itr->step;
- //---- mininum selection score ----
+ //---- mininum selection score ----
- step_itr->min_select_score = min_score_list.Best (i);
+ step_itr->min_select_score = min_score_list.Best (i);
- //---- maximum percent selected ----
+ //---- maximum percent selected ----
- step_itr->max_percent_select = max_per_list.Best (i);
- step_itr->max_percent_flag = (step_itr->max_percent_select > 0.0 && step_itr->max_percent_select < 100.0);
- step_itr->max_percent_select /= 100.0;
+ step_itr->max_percent_select = max_per_list.Best (i);
+ step_itr->max_percent_flag = (step_itr->max_percent_select > 0.0 && step_itr->max_percent_select < 100.0);
+ step_itr->max_percent_select /= 100.0;
- //---- update all plans ----
+ //---- update all plans ----
- step_itr->update_flag = update_list.Best (i);
+ step_itr->update_flag = update_list.Best (i);
- //---- initial weighting factor ----
+ //---- initial weighting factor ----
- if (min_vht_flag) {
- step_itr->initial_factor = 1.0;
+ if (min_vht_flag) {
+ step_itr->initial_factor = 1.0;
- } else {
- step_itr->initial_factor = init_fac_list.Best (i);
- }
+ } else {
+ step_itr->initial_factor = init_fac_list.Best (i);
+ }
- //---- iteration weighting increment ----
+ //---- iteration weighting increment ----
- step_itr->factor_increment = fac_inc_list.Best (i);
+ step_itr->factor_increment = fac_inc_list.Best (i);
- //---- maximum weighting factor ----
+ //---- maximum weighting factor ----
- step_itr->maximum_factor = max_fac_list.Best (i);
+ step_itr->maximum_factor = max_fac_list.Best (i);
- //---- travel time averaging ----
+ //---- travel time averaging ----
- step_itr->time_averaging = Averaging_Code (time_avg_list.Best (i));
+ step_itr->time_averaging = Averaging_Code (time_avg_list.Best (i));
- //---- dynamic toll averaging ----
+ //---- dynamic toll averaging ----
- step_itr->toll_averaging = Averaging_Code (toll_avg_list.Best (i));
+ step_itr->toll_averaging = Averaging_Code (toll_avg_list.Best (i));
- //---- parking penalty averaging ----
+ //---- parking penalty averaging ----
- step_itr->parking_averaging = Averaging_Code (parking_avg_list.Best (i));
+ step_itr->parking_averaging = Averaging_Code (parking_avg_list.Best (i));
- //---- transit penalty averaging ----
+ //---- transit penalty averaging ----
- step_itr->transit_averaging = Averaging_Code (transit_avg_list.Best (i));
+ step_itr->transit_averaging = Averaging_Code (transit_avg_list.Best (i));
- //---- link gap criteria ----
+ //---- link gap criteria ----
- step_itr->link_gap = link_gap_list.Best (i);
- save_link_gap = (save_link_gap || step_itr->link_gap > 0.0);
+ step_itr->link_gap = link_gap_list.Best (i);
+ save_link_gap = (save_link_gap || step_itr->link_gap > 0.0);
- //---- trip gap criteria ----
+ //---- trip gap criteria ----
- step_itr->trip_gap = trip_gap_list.Best (i);
- save_trip_gap = (save_trip_gap || step_itr->trip_gap > 0.0);
+ step_itr->trip_gap = trip_gap_list.Best (i);
+ save_trip_gap = (save_trip_gap || step_itr->trip_gap > 0.0);
- //---- toll gap criteria ----
+ //---- toll gap criteria ----
- step_itr->toll_gap = toll_gap_list.Best (i);
- save_toll_gap = (save_toll_gap || step_itr->toll_gap > 0.0);
+ step_itr->toll_gap = toll_gap_list.Best (i);
+ save_toll_gap = (save_toll_gap || step_itr->toll_gap > 0.0);
- //---- transit gap criteria ----
+ //---- transit gap criteria ----
- step_itr->transit_gap = transit_gap_list.Best (i);
- save_transit_gap = (save_transit_gap || step_itr->transit_gap > 0.0);
+ step_itr->transit_gap = transit_gap_list.Best (i);
+ save_transit_gap = (save_transit_gap || step_itr->transit_gap > 0.0);
- //---- parking gap criteria ----
+ //---- parking gap criteria ----
- step_itr->parking_gap = parking_gap_list.Best (i);
- save_parking_gap = (save_parking_gap || step_itr->parking_gap > 0.0);
+ step_itr->parking_gap = parking_gap_list.Best (i);
+ save_parking_gap = (save_parking_gap || step_itr->parking_gap > 0.0);
- //---- ratio gap criteria ----
+ //---- ratio gap criteria ----
- step_itr->ratio_gap = ratio_gap_list.Best (i);
- save_ratio_gap = (save_ratio_gap || step_itr->ratio_gap > 0.0);
+ step_itr->ratio_gap = ratio_gap_list.Best (i);
+ save_ratio_gap = (save_ratio_gap || step_itr->ratio_gap > 0.0);
- //---- trip time difference ----
+ //---- trip time difference ----
- step_itr->percent_time_diff = per_time_list.Best (i);
- step_itr->time_diff_flag = (step_itr->percent_time_diff > 0.0);
- step_itr->percent_time_diff /= 100.0;
+ step_itr->percent_time_diff = per_time_list.Best (i);
+ step_itr->time_diff_flag = (step_itr->percent_time_diff > 0.0);
+ step_itr->percent_time_diff /= 100.0;
- //---- minimum time difference ----
+ //---- minimum time difference ----
- step_itr->min_time_diff = min_time_list.Best (i);
+ step_itr->min_time_diff = min_time_list.Best (i);
- //---- maximum time difference ----
+ //---- maximum time difference ----
- step_itr->max_time_diff = max_time_list.Best (i);
+ step_itr->max_time_diff = max_time_list.Best (i);
- step_itr->max_min_time_diff = step_itr->max_time_diff - step_itr->min_time_diff;
- if (step_itr->max_min_time_diff < 1) step_itr->max_min_time_diff = 1;
+ step_itr->max_min_time_diff = step_itr->max_time_diff - step_itr->min_time_diff;
+ if (step_itr->max_min_time_diff < 1) step_itr->max_min_time_diff = 1;
- //---- trip cost difference ----
+ //---- trip cost difference ----
- step_itr->percent_cost_diff = per_cost_list.Best (i);
- step_itr->cost_diff_flag = (step_itr->percent_cost_diff > 0.0);
- step_itr->percent_cost_diff /= 100.0;
+ step_itr->percent_cost_diff = per_cost_list.Best (i);
+ step_itr->cost_diff_flag = (step_itr->percent_cost_diff > 0.0);
+ step_itr->percent_cost_diff /= 100.0;
- //---- minimum cost difference ----
+ //---- minimum cost difference ----
- step_itr->min_cost_diff = min_cost_list.Best (i);
+ step_itr->min_cost_diff = Round (min_cost_list.Best (i));
- //---- maximum cost difference ----
+ //---- maximum cost difference ----
- step_itr->max_cost_diff = max_cost_list.Best (i);
+ step_itr->max_cost_diff = Round (max_cost_list.Best (i));
- step_itr->max_min_cost_diff = step_itr->max_cost_diff - step_itr->min_cost_diff;
- if (step_itr->max_min_cost_diff < 1) step_itr->max_min_cost_diff = 1;
+ step_itr->max_min_cost_diff = step_itr->max_cost_diff - step_itr->min_cost_diff;
+ if (step_itr->max_min_cost_diff < 1) step_itr->max_min_cost_diff = 1;
- //---- path time ratio ----
+ //---- path time ratio ----
- step_itr->max_time_ratio = DTOI (max_time_ratio_list.Best (i) * 100);
- step_itr->min_time_ratio = DTOI (min_time_ratio_list.Best (i) * 100);
- step_itr->time_ratio_flag = (step_itr->max_time_ratio > 100);
- step_itr->max_min_time_ratio = step_itr->max_time_ratio - step_itr->min_time_ratio;
- if (step_itr->max_min_time_ratio < 1) step_itr->max_min_time_ratio = 1;
+ step_itr->max_time_ratio = DTOI (max_time_ratio_list.Best (i) * 100);
+ step_itr->min_time_ratio = DTOI (min_time_ratio_list.Best (i) * 100);
+ step_itr->time_ratio_flag = (step_itr->max_time_ratio > 100);
+ step_itr->max_min_time_ratio = step_itr->max_time_ratio - step_itr->min_time_ratio;
+ if (step_itr->max_min_time_ratio < 1) step_itr->max_min_time_ratio = 1;
- //---- penalty ratio ----
+ //---- penalty ratio ----
- step_itr->max_penalty_ratio = DTOI (max_penalty_list.Best (i) * 100);
- step_itr->min_penalty_ratio = DTOI (min_penalty_list.Best (i) * 100);
- step_itr->penalty_ratio_flag = (step_itr->max_penalty_ratio > 0);
- step_itr->max_min_penalty_ratio = step_itr->max_penalty_ratio - step_itr->min_penalty_ratio;
- if (step_itr->max_min_penalty_ratio < 1) step_itr->max_min_penalty_ratio = 1;
- }
+ step_itr->max_penalty_ratio = DTOI (max_penalty_list.Best (i) * 100);
+ step_itr->min_penalty_ratio = DTOI (min_penalty_list.Best (i) * 100);
+ step_itr->penalty_ratio_flag = (step_itr->max_penalty_ratio > 0);
+ step_itr->max_min_penalty_ratio = step_itr->max_penalty_ratio - step_itr->min_penalty_ratio;
+ if (step_itr->max_min_penalty_ratio < 1) step_itr->max_min_penalty_ratio = 1;
+ }
+ step_itr = converge_step_array.begin ();
+ //---- output options ----
+
+ if (Num_Converge_Steps () > 1 || step_flag) {
+
//---- new link convergence file ----
key = Get_Control_String (NEW_LINK_CONVERGENCE_FILE);
@@ -731,14 +745,7 @@
save_step_flag = Get_Control_Flag (SAVE_STEP_RESULTS);
}
}
-
- } else if (Num_Converge_Steps () == 0) {
- step_data.step = max_converge_step = 1;
- step_data.max_iteration = 1;
-
- converge_step_array.push_back (step_data);
}
- step_itr = converge_step_array.begin ();
//---- destination capacity field ----
Modified: version7/trunk/Transims70/Converge_Service/Converge_Check.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Converge_Check.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Converge_Service/Converge_Check.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -10,7 +10,7 @@
bool Converge_Service::Converge_Check (void)
{
- int num;
+ int i, num, total_types;
double gap, std_dev;
bool converge_flag;
@@ -29,6 +29,26 @@
if (!min_vht_flag) {
Write (1, "Build Selection Total = ") << potential;
if (num > 0) Write (0, String (" (%.1lf%%)") % (potential * 100.0 / num) % FINISH);
+
+ total_types = 0;
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ total_types += potential_score_types [i];
+ }
+ if (total_types > 0) {
+ Print (1, "Selection Profile:");
+
+ string labels [MAX_SELECTION_TYPE] = {"", "Path Building Problems", "Parking Capacity Problems",
+ "Transit Capacity Problems", "Travel Time Ratios", "Path Penalty Ratios", "Travel Time Differences",
+ "Impedance Differences", "Selection Score Differences", "Re-Build Selection Score" };
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ if (potential_score_types [i] > 0) {
+ Print (1, String ("\t%-28.28s= %8d (%.1lf%%)") % labels [i] % potential_score_types [i] %
+ (potential_score_types [i] * 100.0 / total_types) % FINISH);
+ }
+ }
+ }
}
Write (1, "Number of Paths Built = ") << num_build;
if (num > 0) Write (0, String (" (%.1lf%%)") % (num_build * 100.0 / num) % FINISH);
Modified: version7/trunk/Transims70/Converge_Service/Converge_Service.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Converge_Service.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Converge_Service/Converge_Service.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -37,6 +37,8 @@
num_travelers = 2;
num_veh_cells = 1;
+ memset (select_score_types, '\0', sizeof (select_score_types));
+
total_records = num_selected = select_records = 0;
select_weight = 0;
num_time_ratio = 0;
@@ -180,7 +182,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,
- CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, 0
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
+ PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG, 0
};
Flow_Time_Service_Keys (flow_time_service_keys);
Modified: version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -8,7 +8,7 @@
// Select_Plan
//---------------------------------------------------------
-int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan)
+int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type)
{
Dtime time1, time2, time_diff, tod, duration;
int cost1, cost2, cost_diff, score, ratio;
@@ -15,11 +15,17 @@
double prob;
score = 100;
+ type = NO_SELECT_TYPE;
if (!new_plan.Path_Problem ()) {
if (new_plan.Problem () == PARK_CAP_PROBLEM || new_plan.Problem () == BOARDING_PROBLEM) {
score = step_itr->min_select_score;
+ if (new_plan.Problem () == PARK_CAP_PROBLEM) {
+ type = PARKING_PROBLEM_TYPE;
+ } else {
+ type = BOARDING_PROBLEM_TYPE;
+ }
} else {
score = 0;
}
@@ -31,9 +37,13 @@
if (ratio > step_itr->max_time_ratio) {
score = 100;
+ type = TIME_RATIO_TYPE;
} else if (ratio >= step_itr->min_time_ratio) {
ratio = (ratio - step_itr->min_time_ratio) * 100 / step_itr->max_min_time_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TIME_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -44,9 +54,13 @@
if (ratio > step_itr->max_penalty_ratio) {
score = 100;
+ type = PENALTY_RATIO_TYPE;
} else if (ratio >= step_itr->min_penalty_ratio) {
ratio = (ratio - step_itr->min_penalty_ratio) * 100 / step_itr->max_min_penalty_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = PENALTY_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -64,6 +78,7 @@
if (time_diff > step_itr->max_time_diff) {
score = 100;
+ type = TRAVEL_TIME_TYPE;
} else if (time_diff >= step_itr->min_time_diff && time2 > 0) {
prob = (double) time_diff / time2;
if (prob >= step_itr->percent_time_diff) {
@@ -70,9 +85,13 @@
if (step_itr->max_min_time_diff > 1) {
time_diff = time_diff - step_itr->min_time_diff;
ratio = 100 * time_diff / step_itr->max_min_time_diff;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TRAVEL_TIME_TYPE;
+ score = ratio;
+ }
} else {
score = 100;
+ type = TRAVEL_TIME_TYPE;
}
}
}
@@ -88,6 +107,7 @@
if (cost_diff > step_itr->max_cost_diff) {
score = 100;
+ type = IMPEDANCE_TYPE;
} else if (cost_diff >= step_itr->min_cost_diff && cost2 > 0) {
prob = (double) cost_diff / cost2;
if (prob >= step_itr->percent_cost_diff) {
@@ -94,9 +114,13 @@
if (step_itr->max_min_cost_diff > 1) {
cost_diff = cost_diff - step_itr->min_cost_diff;
ratio = 100 * cost_diff / step_itr->max_min_cost_diff;
- if (ratio > score) ratio = score;
+ if (ratio > score) {
+ type = IMPEDANCE_TYPE;
+ ratio = score;
+ }
} else {
score = 100;
+ type = IMPEDANCE_TYPE;
}
}
}
@@ -106,10 +130,17 @@
if (score == 0) {
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
- score = MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), score);
- if (score > 100) score = 100;
+ score = MIN (MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), 0), 100);
+
+ if (score >= step_itr->min_select_score) {
+ type = SELECT_DIFFERENCE_TYPE;
+ } else {
+ //score = 0;
+ }
}
}
+ } else {
+ type = PROBLEM_SELECT_TYPE;
}
return (score);
}
Modified: version7/trunk/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Update_Times.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Converge_Service/Update_Times.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -15,6 +15,10 @@
update_link_gap = gap_flag;
link_gap_data.Clear ();
+ if (step_itr->time_averaging == SMOOTH_AVERAGING) {
+ Smooth_Performance ();
+ }
+
Flow_Time_Service::Update_Travel_Times (step_itr->time_averaging, iteration, first_time);
if (save_link_gap && gap_flag) {
Modified: version7/trunk/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Data_Service.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Data_Service.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -23,6 +23,7 @@
Transit_Veh_Flag (false);
Transit_Connections (false);
No_Route_Warnings (false);
+ No_Read_Warnings (false);
Person_Map_Flag (false);
Update_Bearings (false);
Bearing_Warnings (false);
Modified: version7/trunk/Transims70/Data_Service/Performance_Data.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Performance_Data.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -18,7 +18,7 @@
if (spd < 0.1) spd = 0.1;
if (Veh_Dist () <= 0) {
- Veh_Dist (Volume () * exe->UnRound (length));
+ Veh_Dist (Volume () * length);
}
Veh_Time (Veh_Dist () / spd);
@@ -235,6 +235,7 @@
Ratio_Dist (perf1_ptr->Ratio_Dist () * fac1 + perf2_ptr->Ratio_Dist () * fac2);
Ratio_Time (perf1_ptr->Ratio_Time () * fac1 + perf2_ptr->Ratio_Time () * fac2);
}
+
//---------------------------------------------------------
// Factor_Flows
//---------------------------------------------------------
@@ -263,6 +264,71 @@
}
//---------------------------------------------------------
+// Adjust_Flows
+//---------------------------------------------------------
+
+void Perf_Data::Adjust_Flows (double value, int type, double length)
+{
+ double factor, sum, person_fac, time_fac;
+ double vol_fac = Dtime (15, MINUTES);
+
+ time_fac = Time () / Time0 ();
+ if (time_fac > 10.0) time_fac = 10.0;
+
+ sum = Time0 () * time_fac;
+ if (sum > vol_fac) {
+ vol_fac = sum / vol_fac;
+ } else {
+ vol_fac = 1.0;
+ }
+ if (Volume () > 0) {
+ person_fac = Persons () / Volume ();
+
+ if (Enter () > 0) {
+ factor = Volume () / Enter ();
+ if (factor < vol_fac) vol_fac = factor;
+ }
+ } else {
+ person_fac = 1.1;
+ }
+
+ if (type == ENTER_DATA || type == EXIT_DATA) {
+ Enter (value);
+ Volume (value * vol_fac);
+ } else {
+ Volume (value);
+ Enter (value / vol_fac);
+ }
+ Exit (Enter ());
+ Persons (Volume () * person_fac);
+
+ sum = SOV () + HOV2 () + HOV3P () + Truck () + Transit ();
+
+ if (sum > 0) {
+ factor = Enter () / sum;
+
+ SOV (SOV () * factor);
+ HOV2 (HOV2 () * factor);
+ HOV3P (HOV3P () * factor);
+ Truck (Truck () * factor);
+ Transit (Transit () * factor);
+ } else {
+ sum = Enter ();
+
+ SOV (sum * 0.9);
+ HOV2 (sum * 0.07);
+ HOV3P (sum * 0.03);
+ Truck (0);
+ Transit (0);
+ }
+ Max_Volume (Volume ());
+
+ Veh_Dist (Enter () * length);
+ Veh_Time (Enter () * Time0 () * time_fac);
+ Veh_Delay (Veh_Time () - (Enter () * Time0 ()));
+}
+
+//---------------------------------------------------------
// Sum_Periods
//---------------------------------------------------------
Modified: version7/trunk/Transims70/Data_Service/Read_Access_Links.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Access_Links.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Access_Links.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -30,7 +30,7 @@
map_stat = access_map.insert (Int_Map_Data (access_rec.Link (), (int) access_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
continue;
} else {
access_array.push_back (access_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Connections.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -48,7 +48,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
out = link_ptr->Link ();
- Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
continue;
} else {
connect_array.push_back (connect_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Detectors.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Detectors.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Detectors.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -32,7 +32,7 @@
map_stat = detector_map.insert (Int_Map_Data (detector_rec.Detector (), (int) detector_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
continue;
} else {
detector_array.push_back (detector_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Events.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Events.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Events.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -33,7 +33,7 @@
map_stat = event_map.insert (Event_Map_Data (event_index, (int) event_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
event_index.Household () % event_index.Person () % event_index.Tour () %
event_index.Trip () % event_index.Event ());
Modified: version7/trunk/Transims70/Data_Service/Read_Households.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Households.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Households.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -49,7 +49,7 @@
map_stat = hhold_map.insert (Int_Map_Data (household_rec.Household (), index));
if (!map_stat.second) {
- Warning ("Duplicate Household Number = ") << household_rec.Household ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Household Number = ") << household_rec.Household ();
} else {
hhold_array.push_back (household_rec);
count += (int) household_rec.size ();
@@ -64,7 +64,7 @@
person_stat = person_map.insert (Person_Map_Data (person_index, index));
if (!person_stat.second) {
- Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
}
}
}
Modified: version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -167,7 +167,10 @@
} else if (lane_type [lane] < 0 && group == -1) {
ln = Make_Lane_Range (&(*dir_itr), lane, lane);
- Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
+
+ lane_use_ptr->Type (PROHIBIT);
+ lane_use_ptr->Use (NONE);
}
lane_type [lane] = group;
}
Modified: version7/trunk/Transims70/Data_Service/Read_Lines.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Lines.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Lines.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -44,7 +44,7 @@
map_stat = line_map.insert (Int_Map_Data (line_rec.Route (), (int) line_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << line_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << line_rec.Route ();
} else {
line_array.push_back (line_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Links.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Links.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Links.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -51,7 +51,7 @@
map_stat = link_map.insert (Int_Map_Data (link_rec.Link (), (int) link_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << link_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << link_rec.Link ();
continue;
} else {
@@ -81,7 +81,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), index));
if (!map_stat.second) {
- Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
link_rec.Shape (index);
@@ -99,7 +99,7 @@
map_stat = dir_map.insert (Int_Map_Data (ab_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ab_rec);
@@ -110,7 +110,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
if (!ab_stat.second && !exe->Default_Link_Data ()) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
}
}
}
@@ -120,7 +120,7 @@
map_stat = dir_map.insert (Int_Map_Data (ba_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ba_rec);
@@ -131,7 +131,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
if (!ab_stat.second) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
}
}
}
Modified: version7/trunk/Transims70/Data_Service/Read_Locations.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Locations.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Locations.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -32,7 +32,7 @@
map_stat = location_map.insert (Int_Map_Data (location_rec.Location (), (int) location_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Location Number = ") << location_rec.Location ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Location Number = ") << location_rec.Location ();
continue;
} else {
if (!file.Setback_Flag () && location_rec.Setback () == 0) {
Modified: version7/trunk/Transims70/Data_Service/Read_Nodes.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Nodes.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Nodes.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -37,7 +37,7 @@
map_stat = node_map.insert (Int_Map_Data (node_rec.Node (), (int) node_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Node Number = ") << node_rec.Node ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Node Number = ") << node_rec.Node ();
continue;
} else {
Modified: version7/trunk/Transims70/Data_Service/Read_Parking_Lots.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -44,7 +44,7 @@
map_stat = parking_map.insert (Int_Map_Data (parking_rec.Parking (), (int) parking_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
} else {
parking_array.push_back (parking_rec);
}
Modified: version7/trunk/Transims70/Data_Service/Read_Performance.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Performance.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Performance.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -190,7 +190,7 @@
}
if (time < dir_ptr->Time0 ()) time = dir_ptr->Time0 ();
perf_itr->Time (time);
-
+
if (Clear_Flow_Flag ()) perf_itr->Zero_Flows ();
if (perf_itr->Count () < count) {
Modified: version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -100,7 +100,7 @@
Movement_Itr move_itr = phasing_ptr->begin ();
phasing_itr->push_back (*move_itr);
} else {
- Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
}
keep = false;
break;
Modified: version7/trunk/Transims70/Data_Service/Read_Plan_Skims.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -33,7 +33,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, (int) plan_skim_array.size ()));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
plan_skim_array.push_back (plan_skim_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Plans.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Plans.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Plans.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -109,7 +109,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, index));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
keep_flag = false;
}
@@ -120,7 +120,7 @@
time_stat = plan_time_map.insert (Time_Map_Data (time_index, index));
if (!time_stat.second) {
- Warning (String ("Duplicate Plan Index = %s-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %s-%d-%d") %
time_index.Start ().Time_String () %
time_index.Household () % time_index.Person ());
keep_flag = false;
Modified: version7/trunk/Transims70/Data_Service/Read_Route_Nodes.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -46,7 +46,7 @@
map_stat = route_map.insert (Int_Map_Data (route_rec.Route (), (int) route_nodes_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << route_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << route_rec.Route ();
} else {
route_nodes_array.push_back (route_rec);
}
Modified: version7/trunk/Transims70/Data_Service/Read_Selections.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Selections.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Selections.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -38,7 +38,7 @@
map_stat = select_map.insert (Select_Map_Data (trip_index, select_data));
if (!map_stat.second) {
- Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
if (selection_rec.Household () > select_map.Max_Household ()) {
Modified: version7/trunk/Transims70/Data_Service/Read_Shapes.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Shapes.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Shapes.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -44,7 +44,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), (int) shape_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
}
Modified: version7/trunk/Transims70/Data_Service/Read_Signals.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Signals.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Signals.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -86,7 +86,7 @@
timing40_stat = timing40_map.insert (Timing40_Map_Data (time_itr->Timing (), timing40_rec));
if (!timing40_stat.second && timing40_stat.first->second.Signal () != index) {
- Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
continue;
}
time_itr->Timing (num);
@@ -99,7 +99,7 @@
}
}
if (!map_stat.second) {
- Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
} else {
//---- set the node controls ----
Modified: version7/trunk/Transims70/Data_Service/Read_Signs.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Signs.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Signs.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -34,7 +34,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
if (dir_ptr->Sign () > 0) {
- Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
continue;
}
if (dir_ptr->Dir () == 0) {
Modified: version7/trunk/Transims70/Data_Service/Read_Stops.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Stops.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Stops.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -30,7 +30,7 @@
map_stat = stop_map.insert (Int_Map_Data (stop_rec.Stop (), (int) stop_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
continue;
} else {
stop_array.push_back (stop_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Travelers.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Travelers.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Travelers.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -33,7 +33,7 @@
map_stat = traveler_map.insert (Traveler_Map_Data (traveler_index, (int) traveler_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
traveler_index.Household () % traveler_index.Person () % traveler_index.Time ().Time_String ());
continue;
} else {
Modified: version7/trunk/Transims70/Data_Service/Read_Trips.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Trips.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Trips.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -65,7 +65,7 @@
map_stat = trip_map.insert (Trip_Map_Data (trip_index, index));
if (!map_stat.second) {
- Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
trip_array.push_back (trip_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Veh_Types.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Veh_Types.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Veh_Types.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -33,7 +33,7 @@
map_stat = veh_type_map.insert (Int_Map_Data (veh_type_rec.Type (), (int) veh_type_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
continue;
} else {
veh_type_array.push_back (veh_type_rec);
Modified: version7/trunk/Transims70/Data_Service/Read_Volume_Speeds.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -109,7 +109,6 @@
}
}
}
-
if (file.Lane_Use_Flag () && dir_ptr->Use_Index () > 0) {
data_ptr = link_period.Period_Ptr (i)->Data_Ptr (dir_ptr->Use_Index ());
Modified: version7/trunk/Transims70/Data_Service/Read_Zones.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Zones.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Data_Service/Read_Zones.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -29,7 +29,7 @@
map_stat = zone_map.insert (Int_Map_Data (zone_rec.Zone (), (int) zone_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
continue;
} else {
zone_array.push_back (zone_rec);
Modified: version7/trunk/Transims70/File_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/File_Service/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -26,7 +26,13 @@
Lane_Use_Flows (Set_Control_Flag (SAVE_LANE_USE_FLOWS));
}
if (Control_Key_Status (VOLUME_DATA_TYPE)) {
- Volume_Data_Type (Performance_Code (Get_Control_String (VOLUME_DATA_TYPE)));
+ key = Get_Control_String (VOLUME_DATA_TYPE);
+ if (key.empty ()) {
+ key = Get_Default_Text (VOLUME_DATA_TYPE);
+ }
+ Volume_Data_Type (Performance_Code (key));
+ } else {
+ Volume_Data_Type (VOLUME_DATA);
}
if (Control_Key_Status (TOLL_TIME_PERIODS)) {
key = Get_Control_String (TOLL_TIME_PERIODS);
Modified: version7/trunk/Transims70/File_Service/Vol_Spd_Diff_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Vol_Spd_Diff_File.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/File_Service/Vol_Spd_Diff_File.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -93,6 +93,9 @@
Add_Field ("USE_SPD1", DB_DOUBLE, 5.1, MPH);
Add_Field ("USE_SDIFF", DB_DOUBLE, 5.1, MPH);
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -131,6 +134,8 @@
use_sdiff = Optional_Field ("USE_SDIFF");
Lane_Use_Flag (use_vol0 >= 0 || use_spd0 >= 0);
+
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
//---- set default units ----
Modified: version7/trunk/Transims70/Flow_Time_Service/Control.cpp
===================================================================
--- version7/trunk/Transims70/Flow_Time_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
+++ version7/trunk/Transims70/Flow_Time_Service/Control.cpp 2018-03-05 18:47:35 UTC (rev 1704)
@@ -51,6 +51,12 @@
if (Time_Updates ()) {
+ //---- recalculate VMT ----
+
+ if (Control_Key_Status (RECALCULATE_VMT) && System_File_Flag (PERFORMANCE)) {
+ Recalculate_VMT (Get_Control_Flag (RECALCULATE_VMT));
+ }
+
//---- time updates and volume factor ----
if (Control_Key_Status (TIME_UPDATE_RATE)) {
@@ -128,4 +134,51 @@
}
}
}
+
+ //---- smoothing keys ----
+
+ if (Check_Control_Key (SMOOTH_GROUP_SIZ...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-03-05 18:42:47
|
Revision: 1703
http://sourceforge.net/p/transims/code/1703
Author: davidroden
Date: 2018-03-05 18:42:44 +0000 (Mon, 05 Mar 2018)
Log Message:
-----------
TRANSIMS Version 7.1 from AECOM Branch 1702
SysLib
A Fix Volumes option was added to the volume combination methods
File_Service
Notes field was added to the Vol_Spd_Diff_File structure. The default VOLUME_DATA_TYPE was set to VOLUME.
Data_Service
Adjust_Flows method was added to the Performance Data class. The Read_Lane_Use method was enhanced to remove duplicate lane closures from the link capacity adjustment.
Flow_Time_Service
RECALCULATE_VMT key and method was added to facilitate performance adjustments after volume smoothing is applied. The LINK_FLOW_TYPE key access was added to the smoothing key group for situations were travel time updates are not requested. The Smooth_Performance method was enhanced to apply the new Adust_Flows method rather than the Factor_Flows method when the change factor is less than 0.2 or greater than 5.0. The Update_Travel_Times method was modified to recalculate VMT values when that control key is true.
Converge_Service
Logic was added to initialize the converge_step_array even when the maximum number of iterations key is not specified in the control file.
ArcPerf 7.1.10
The Vol_Spd_Data_Diff method was enhanced to copy the file structure from the input file (use fields, data type, and notes), ensure all fields not used are zeroed, and calculate speed differences directly rather than a function of VHT.
PerfPrep 7.1.26
RECALCULATE_VMT key was included to {U+201C}repair{U+201D} other performance measures after the selected flow values were smoothed and travel times recalculated. The Fix_Volumes processing method was implemented using the new Fix_Performance method.
Router 7.1.48
The zero flag for the Minimize VMT call was removed to save the volume and travel time data even when performance data is not being updated for each iteration.
Validate 7.1.11
A bug was fixed in outputting the Use Speed fields for the Vol_Spd_Diff file.
VolSpdData 7.1.15
LaneUse file and Notes and Names Fields keys were enabled. BASE_VOLUME_SPEED_FILE/FORMAT, NEW_VOL_SPD_DIFF_FILE/FORMAT, SELECTION_SHAPE_FILE, SELECTION_SHAPE_FIELD, SELECTION_FIELD_VALUE, PERCENT_DIFFERENCE_PER_MILE, MINIMUM_DIFFERENCE_PER_MILE, MAXIMUM_SELECTION_DISTANCE, and NEW_SELECTION_DATA_FILE/FORMAT keys were added to implement volume-speed comparisons with the option to output records with significant differences related to their distance from coordinates from a polyline or point shape file record. New methods include Read_Selection, Selection_Check and Write_Vol_Spd_Diff.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/Converge_Service/Control.cpp
version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Performance.cpp
version7/branches/aecom/Transims70/File_Service/Control.cpp
version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_File.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Update_Times.cpp
version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
version7/branches/aecom/Transims70/Include/Performance_Data.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/PerfPrep/Control.cpp
version7/branches/aecom/Transims70/PerfPrep/Execute.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters
version7/branches/aecom/Transims70/Router/Iteration_Loop.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Control.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/VolSpdData/Control.cpp
version7/branches/aecom/Transims70/VolSpdData/Execute.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.hpp
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj
version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj.filters
Added Paths:
-----------
version7/branches/aecom/Transims70/PerfPrep/Fix_Performance.cpp
version7/branches/aecom/Transims70/VolSpdData/Read_Selection.cpp
version7/branches/aecom/Transims70/VolSpdData/Selection_Check.cpp
version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (8);
+ Version (10);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -19,7 +19,12 @@
Int_Map_Itr map_itr;
Link_Data *link_ptr;
Vol_Spd_Diff_File vol_spd_diff_out;
+
+ vol_spd_diff_out.Lane_Use_Flag (vol_spd_diff_file.Lane_Use_Flag ());
+ vol_spd_diff_out.Data_Type (vol_spd_diff_file.Data_Type ());
+ vol_spd_diff_out.Copy_Fields (vol_spd_diff_file);
+
vol_spd_diff_out.Create_Fields ();
//---- process each time period ----
@@ -95,30 +100,44 @@
vol_spd_diff_out.Use_Spd0 (vol_spd_diff_file.Use_Spd0 ());
vol_spd_diff_out.Use_Spd1 (vol_spd_diff_file.Use_Spd1 ());
vol_spd_diff_out.Use_Sdiff (vol_spd_diff_file.Use_Sdiff ());
+ vol_spd_diff_out.Notes (vol_spd_diff_file.Notes ());
} else {
vht = (vol_spd_diff_out.Vol0 () * vol_spd_diff_out.Spd0 () + vol_spd_diff_file.Vol0 () * vol_spd_diff_file.Spd0 ());
vol_spd_diff_out.Vol0 (vol_spd_diff_out.Vol0 () + vol_spd_diff_file.Vol0 ());
- if (vol_spd_diff_out.Vol0 () != 0) vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ if (vol_spd_diff_out.Vol0 () != 0) {
+ vol_spd_diff_out.Spd0 (vht / vol_spd_diff_out.Vol0 ());
+ } else {
+ vol_spd_diff_out.Spd0 (0);
+ }
vht = (vol_spd_diff_out.Vol1 () * vol_spd_diff_out.Spd1 () + vol_spd_diff_file.Vol1 () * vol_spd_diff_file.Spd1 ());
vol_spd_diff_out.Vol1 (vol_spd_diff_out.Vol1 () + vol_spd_diff_file.Vol1 ());
- if (vol_spd_diff_out.Vol1 () != 0) vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ if (vol_spd_diff_out.Vol1 () != 0) {
+ vol_spd_diff_out.Spd1 (vht / vol_spd_diff_out.Vol1 ());
+ } else {
+ vol_spd_diff_out.Spd1 (0);
+ }
- vht = (vol_spd_diff_out.Vdiff () * vol_spd_diff_out.Sdiff () + vol_spd_diff_file.Vdiff () * vol_spd_diff_file.Sdiff ());
vol_spd_diff_out.Vdiff (vol_spd_diff_out.Vdiff () + vol_spd_diff_file.Vdiff ());
- if (vol_spd_diff_out.Vdiff () != 0) vol_spd_diff_out.Sdiff (vht / vol_spd_diff_out.Vdiff ());
+ vol_spd_diff_out.Sdiff (vol_spd_diff_out.Spd1 () - vol_spd_diff_out.Spd0 ());
vht = (vol_spd_diff_out.Use_Vol0 () * vol_spd_diff_out.Use_Spd0 () + vol_spd_diff_file.Use_Vol0 () * vol_spd_diff_file.Use_Spd0 ());
vol_spd_diff_out.Use_Vol0 (vol_spd_diff_out.Use_Vol0 () + vol_spd_diff_file.Use_Vol0 ());
- if (vol_spd_diff_out.Use_Vol0 () != 0) vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ if (vol_spd_diff_out.Use_Vol0 () != 0) {
+ vol_spd_diff_out.Use_Spd0 (vht / vol_spd_diff_out.Use_Vol0 ());
+ } else {
+ vol_spd_diff_out.Use_Spd0 (0);
+ }
vht = (vol_spd_diff_out.Use_Vol1 () * vol_spd_diff_out.Use_Spd1 () + vol_spd_diff_file.Use_Vol1 () * vol_spd_diff_file.Use_Spd1 ());
vol_spd_diff_out.Use_Vol1 (vol_spd_diff_out.Use_Vol1 () + vol_spd_diff_file.Use_Vol1 ());
- if (vol_spd_diff_out.Use_Vol1 () != 0) vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
-
- vht = (vol_spd_diff_out.Use_Vdiff () * vol_spd_diff_out.Use_Sdiff () + vol_spd_diff_file.Use_Vdiff () * vol_spd_diff_file.Use_Sdiff ());
+ if (vol_spd_diff_out.Use_Vol1 () != 0) {
+ vol_spd_diff_out.Use_Spd1 (vht / vol_spd_diff_out.Use_Vol1 ());
+ } else {
+ vol_spd_diff_out.Use_Spd1 (0);
+ }
vol_spd_diff_out.Use_Vdiff (vol_spd_diff_out.Use_Vdiff () + vol_spd_diff_file.Use_Vdiff ());
- if (vol_spd_diff_out.Use_Vdiff () != 0) vol_spd_diff_out.Use_Sdiff (vht / vol_spd_diff_out.Use_Vdiff ());
+ vol_spd_diff_out.Use_Sdiff (vol_spd_diff_out.Use_Spd1 () - vol_spd_diff_out.Use_Spd0 ());
}
}
End_Progress ();
Modified: version7/branches/aecom/Transims70/Converge_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -135,7 +135,8 @@
converge_step_array.push_back (step_data);
}
- } else if (Num_Converge_Steps () == 0) {
+ }
+ if (converge_step_array.size () == 0) {
step_data.step = max_converge_step = 1;
step_data.max_iteration = 1;
Modified: version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Data_Service/Performance_Data.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -18,7 +18,7 @@
if (spd < 0.1) spd = 0.1;
if (Veh_Dist () <= 0) {
- Veh_Dist (Volume () * exe->UnRound (length));
+ Veh_Dist (Volume () * length);
}
Veh_Time (Veh_Dist () / spd);
@@ -235,6 +235,7 @@
Ratio_Dist (perf1_ptr->Ratio_Dist () * fac1 + perf2_ptr->Ratio_Dist () * fac2);
Ratio_Time (perf1_ptr->Ratio_Time () * fac1 + perf2_ptr->Ratio_Time () * fac2);
}
+
//---------------------------------------------------------
// Factor_Flows
//---------------------------------------------------------
@@ -263,6 +264,71 @@
}
//---------------------------------------------------------
+// Adjust_Flows
+//---------------------------------------------------------
+
+void Perf_Data::Adjust_Flows (double value, int type, double length)
+{
+ double factor, sum, person_fac, time_fac;
+ double vol_fac = Dtime (15, MINUTES);
+
+ time_fac = Time () / Time0 ();
+ if (time_fac > 10.0) time_fac = 10.0;
+
+ sum = Time0 () * time_fac;
+ if (sum > vol_fac) {
+ vol_fac = sum / vol_fac;
+ } else {
+ vol_fac = 1.0;
+ }
+ if (Volume () > 0) {
+ person_fac = Persons () / Volume ();
+
+ if (Enter () > 0) {
+ factor = Volume () / Enter ();
+ if (factor < vol_fac) vol_fac = factor;
+ }
+ } else {
+ person_fac = 1.1;
+ }
+
+ if (type == ENTER_DATA || type == EXIT_DATA) {
+ Enter (value);
+ Volume (value * vol_fac);
+ } else {
+ Volume (value);
+ Enter (value / vol_fac);
+ }
+ Exit (Enter ());
+ Persons (Volume () * person_fac);
+
+ sum = SOV () + HOV2 () + HOV3P () + Truck () + Transit ();
+
+ if (sum > 0) {
+ factor = Enter () / sum;
+
+ SOV (SOV () * factor);
+ HOV2 (HOV2 () * factor);
+ HOV3P (HOV3P () * factor);
+ Truck (Truck () * factor);
+ Transit (Transit () * factor);
+ } else {
+ sum = Enter ();
+
+ SOV (sum * 0.9);
+ HOV2 (sum * 0.07);
+ HOV3P (sum * 0.03);
+ Truck (0);
+ Transit (0);
+ }
+ Max_Volume (Volume ());
+
+ Veh_Dist (Enter () * length);
+ Veh_Time (Enter () * Time0 () * time_fac);
+ Veh_Delay (Veh_Time () - (Enter () * Time0 ()));
+}
+
+//---------------------------------------------------------
// Sum_Periods
//---------------------------------------------------------
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -168,6 +168,9 @@
ln = Make_Lane_Range (&(*dir_itr), lane, lane);
if (!No_Read_Warnings ()) Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
+
+ lane_use_ptr->Type (PROHIBIT);
+ lane_use_ptr->Use (NONE);
}
lane_type [lane] = group;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Performance.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Performance.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -190,7 +190,7 @@
}
if (time < dir_ptr->Time0 ()) time = dir_ptr->Time0 ();
perf_itr->Time (time);
-
+
if (Clear_Flow_Flag ()) perf_itr->Zero_Flows ();
if (perf_itr->Count () < count) {
Modified: version7/branches/aecom/Transims70/File_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/File_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -26,7 +26,13 @@
Lane_Use_Flows (Set_Control_Flag (SAVE_LANE_USE_FLOWS));
}
if (Control_Key_Status (VOLUME_DATA_TYPE)) {
- Volume_Data_Type (Performance_Code (Get_Control_String (VOLUME_DATA_TYPE)));
+ key = Get_Control_String (VOLUME_DATA_TYPE);
+ if (key.empty ()) {
+ key = Get_Default_Text (VOLUME_DATA_TYPE);
+ }
+ Volume_Data_Type (Performance_Code (key));
+ } else {
+ Volume_Data_Type (VOLUME_DATA);
}
if (Control_Key_Status (TOLL_TIME_PERIODS)) {
key = Get_Control_String (TOLL_TIME_PERIODS);
Modified: version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_File.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/File_Service/Vol_Spd_Diff_File.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -93,6 +93,9 @@
Add_Field ("USE_SPD1", DB_DOUBLE, 5.1, MPH);
Add_Field ("USE_SDIFF", DB_DOUBLE, 5.1, MPH);
}
+ if (exe->Notes_Name_Flag ()) {
+ Add_Field ("NOTES", DB_STRING, STRING_FIELD_SIZE);
+ }
return (Set_Field_Numbers ());
}
@@ -131,6 +134,8 @@
use_sdiff = Optional_Field ("USE_SDIFF");
Lane_Use_Flag (use_vol0 >= 0 || use_spd0 >= 0);
+
+ Notes_Field (Optional_Field (NOTES_FIELD_NAMES));
//---- set default units ----
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -51,6 +51,12 @@
if (Time_Updates ()) {
+ //---- recalculate VMT ----
+
+ if (Control_Key_Status (RECALCULATE_VMT) && System_File_Flag (PERFORMANCE)) {
+ Recalculate_VMT (Get_Control_Flag (RECALCULATE_VMT));
+ }
+
//---- time updates and volume factor ----
if (Control_Key_Status (TIME_UPDATE_RATE)) {
@@ -127,15 +133,31 @@
}
}
}
+ }
- //---- smoothing keys ----
+ //---- smoothing keys ----
- if (Check_Control_Key (SMOOTH_GROUP_SIZE)) {
+ if (Check_Control_Key (SMOOTH_GROUP_SIZE)) {
- //---- read the number smooth records ----
+ //---- read the number smooth records ----
- int size = Get_Control_Integer (SMOOTH_GROUP_SIZE);
+ int size = Get_Control_Integer (SMOOTH_GROUP_SIZE);
+ if (size > 0) {
+
+ if (!Time_Updates ()) {
+
+ //---- link flow type ----
+
+ if (Control_Key_Status (LINK_FLOW_TYPE)) {
+ key = Get_Control_Text (LINK_FLOW_TYPE);
+ flow_type = Performance_Code (key);
+ if (flow_type < VOLUME_DATA || flow_type > FLOW_DATA) {
+ Error (String ("Link Flow Type %s is Out of Range (Volume..Flow)") % key);
+ }
+ }
+ }
+
//---- read the percent distributed forward ----
double forward = Get_Control_Double (PERCENT_MOVED_FORWARD);
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -12,7 +12,7 @@
{
Service_Level (FLOW_TIME_SERVICE);
- flow_updates = turn_updates = time_updates = cap_func_flag = group_flag = false;
+ flow_updates = turn_updates = time_updates = cap_func_flag = group_flag = VMT_flag = false;
update_rate = 0;
flow_type = VOLUME_DATA;
@@ -31,6 +31,7 @@
{ UPDATE_TURNING_MOVEMENTS, "UPDATE_TURNING_MOVEMENTS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ CLEAR_INPUT_FLOW_RATES, "CLEAR_INPUT_FLOW_RATES", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ UPDATE_TRAVEL_TIMES, "UPDATE_TRAVEL_TIMES", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
+ { RECALCULATE_VMT, "RECALCULATE_VMT", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
{ TIME_UPDATE_RATE, "TIME_UPDATE_RATE", LEVEL0, OPT_KEY, INT_KEY, "0", "-1..5000", NO_HELP },
{ 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 },
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -11,7 +11,7 @@
void Flow_Time_Service::Smooth_Performance (bool time_flag)
{
int index, period, num_periods;
- double value, length, total, volume;
+ double value, length, total, volume, factor;
Perf_Itr perf_itr;
Perf_Data *perf_ptr;
@@ -82,7 +82,13 @@
smooth_data.Smooth ();
if (total > 0) {
- perf_itr->Factor_Flows (smooth_data.Output (0) / total);
+ factor = smooth_data.Output (0) / total;
+
+ if (factor > 0.2 && factor < 5.0 && !VMT_flag) {
+ perf_itr->Factor_Flows (factor);
+ } else {
+ perf_itr->Adjust_Flows (smooth_data.Output (0), Link_Flow_Type (), length);
+ }
} else {
value = smooth_data.Output (0);
@@ -117,7 +123,14 @@
break;
}
if (volume > 0) {
- perf_ptr->Factor_Flows (smooth_data.Output (period) / volume);
+ factor = smooth_data.Output (period) / volume;
+
+ if (factor > 0.2 && factor < 5.0 && !VMT_flag) {
+ perf_ptr->Factor_Flows (factor);
+ } else {
+ perf_ptr->Adjust_Flows (smooth_data.Output (period), Link_Flow_Type (), length);
+ }
+
} else {
value = smooth_data.Output (period);
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Update_Times.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Update_Times.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Update_Times.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -50,6 +50,7 @@
start = Model_Start_Time () + period / 2;
vol_fac = flow_factor * Dtime (60, MINUTES) / period;
func = 0;
+ rate = 0;
for (index = 0, dir_itr = dir_array.begin (); dir_itr != dir_array.end (); dir_itr++, index++) {
Show_Progress ();
@@ -103,7 +104,6 @@
if ((use_ptr->Type () == LIMIT && dat->Use_Permission (use_ptr->Use (), NONE)) ||
(use_ptr->Type () == PROHIBIT && use_ptr->Use () == ANY_USE_CODE)) {
-
if (index_ptr->Dir () == 1) {
lanes1 -= use_ptr->High_Lane () - use_ptr->Low_Lane () + 1;
lanes1 = MAX (MIN (lanes1, lanes), 0);
@@ -153,9 +153,6 @@
volume = perf_ptr->Veh_Dist () / len;
break;
}
-
- volume *= vol_fac;
-
if (lanes0 < 1) {
perf_ptr->Clear ();
tim = time0;
@@ -178,7 +175,7 @@
tod_cap = DTOI (tod_cap * functions.Apply_Function (func, rate));
}
}
- tim = equation.Apply_Equation (type, time, volume, tod_cap, len, lanes0);
+ tim = equation.Apply_Equation (type, time, volume * vol_fac, tod_cap, len, lanes0);
}
if (tim < time0) tim = time0;
}
@@ -193,11 +190,19 @@
Save_Gap_Data (tod, perf_ptr->Old_Veh_Time (), new_veh_time);
if (!skip) {
+ if (VMT_flag) {
+ rate = perf_ptr->Volume ();
+ perf_ptr->Volume (volume);
+ perf_ptr->Veh_Dist (0);
+ }
if (avg_flag) {
perf_ptr->Update_Time (DTOI ((perf_ptr->Time () * factor + (double) tim) / factor1), len);
} else {
perf_ptr->Update_Time (tim, len);
}
+ if (VMT_flag) {
+ perf_ptr->Volume (rate);
+ }
}
perf_ptr->Old_Veh_Time (perf_ptr->Veh_Time ());
@@ -223,8 +228,6 @@
volume = perf_ptr->Veh_Dist () / len;
break;
}
- volume *= vol_fac;
-
if (lanes1 == 0) {
perf_ptr->Clear ();
tim = time0;
@@ -244,7 +247,7 @@
tod_cap = DTOI (tod_cap * functions.Apply_Function (func, rate));
}
}
- tim = equation.Apply_Equation (type, time, volume, tod_cap, len, lanes1);
+ tim = equation.Apply_Equation (type, time, volume * vol_fac, tod_cap, len, lanes1);
}
if (tim < time0) tim = time0;
}
@@ -259,11 +262,19 @@
Save_Gap_Data (tod, perf_ptr->Old_Veh_Time (), new_veh_time);
if (!skip) {
+ if (VMT_flag) {
+ rate = perf_ptr->Volume ();
+ perf_ptr->Volume (volume);
+ perf_ptr->Veh_Dist (0);
+ }
if (avg_flag) {
perf_ptr->Update_Time (DTOI ((perf_ptr->Time () * factor + (double) tim) / factor1), len);
} else {
perf_ptr->Update_Time (tim, len);
}
+ if (VMT_flag) {
+ perf_ptr->Volume (rate);
+ }
}
perf_ptr->Old_Veh_Time (perf_ptr->Veh_Time ());
}
Modified: version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -28,6 +28,9 @@
bool Time_Updates (void) { return (time_updates); }
void Time_Updates (bool flag) { time_updates = flag; }
+ bool Recalculate_VMT (void) { return (VMT_flag); }
+ void Recalculate_VMT (bool flag) { VMT_flag = flag; }
+
int Update_Rate (void) { return (update_rate); }
int Link_Flow_Type (void) { return (flow_type); }
@@ -36,8 +39,8 @@
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,
+ UPDATE_FLOW_RATES = FLOW_TIME_SERVICE_OFFSET, UPDATE_TURNING_MOVEMENTS, CLEAR_INPUT_FLOW_RATES,
+ UPDATE_TRAVEL_TIMES, RECALCULATE_VMT, TIME_UPDATE_RATE, LINK_FLOW_FACTOR, LINK_FLOW_TYPE, EQUATION_PARAMETERS,
CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG,
};
@@ -65,7 +68,7 @@
private:
- bool update_flag, flow_updates, turn_updates, time_updates, cap_func_flag, group_flag;
+ bool update_flag, flow_updates, turn_updates, time_updates, cap_func_flag, group_flag, VMT_flag;
int update_rate, flow_type;
double flow_factor;
Modified: version7/branches/aecom/Transims70/Include/Performance_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Performance_Data.hpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Include/Performance_Data.hpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -143,6 +143,7 @@
void Weight_Flows (Perf_Data *perf_ptr, double weight);
void Weight_Flows (Perf_Data *perf1_ptr, double fac1, Perf_Data *perf2_ptr, double fac2);
void Factor_Flows (double factor);
+ void Adjust_Flows (double value, int type, double length);
void Sum_Periods (Perf_Data *perf_ptr);
bool Output_Check (void);
Modified: version7/branches/aecom/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -171,7 +171,7 @@
#define CONSTRAINT_RANGE "NONE, START, ARRIVE, FIXED, DURATION, PASSENGER"
#define MODE_RANGE "WALK, BIKE, DRIVE, RIDE, TRANSIT, PNR_OUT, PNR_IN, KNR_OUT, KNR_IN, TAXI, OTHER, HOV2, HOV3, HOV4"
#define USE_RANGE "ANY, WALK, BIKE, CAR, TRUCK, BUS, RAIL, SOV, HOV2+, HOV3+, HOV2, HOV3, HOV4, LIGHTTRUCK, HEAVYTRUCK, TAXI, RESTRICTED, NONE"
-#define COMBINE_RANGE "REPLACE_LINKS, SIMPLE_AVERAGE, WEIGHTED_AVERAGE, REPLACE_OR_AVERAGE, ADD_FLOWS, UPDATE_TIMES"
+#define COMBINE_RANGE "REPLACE_LINKS, SIMPLE_AVERAGE, WEIGHTED_AVERAGE, REPLACE_OR_AVERAGE, ADD_FLOWS, UPDATE_TIMES, FIX_VOLUMES"
#define SELECT_METHOD_RANGE "RANDOM, PERCENT_DIFFERENCE, RELATIVE_GAP"
#define LOCATION_METHOD_RANGE "USER, RANDOM, CENTROID, DISTRIBUTED"
#define MATRIX_OD_RANGE "DISTRICTS, ZONES, LOCATIONS"
@@ -472,7 +472,7 @@
//---- Performance Combine ----
enum Combine_Type {
- REPLACE_LINKS, SIMPLE_LINK_AVG, WEIGHTED_LINK_AVG, REPLACE_AVERAGE, ADD_FLOWS, UPDATE_TIMES
+ REPLACE_LINKS, SIMPLE_LINK_AVG, WEIGHTED_LINK_AVG, REPLACE_AVERAGE, ADD_FLOWS, UPDATE_TIMES, FIX_VOLUMES
};
//---- Application ----
Modified: version7/branches/aecom/Transims70/PerfPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -89,7 +89,7 @@
if (!key.empty ()) {
method = Combine_Code (key);
- if (method != UPDATE_TIMES) {
+ if (method != UPDATE_TIMES && method != FIX_VOLUMES) {
if (merge_flag || turn_merge_flag) {
if (method == WEIGHTED_LINK_AVG || method == REPLACE_AVERAGE) {
@@ -104,6 +104,10 @@
if (Control_Key_Empty (PROCESSING_METHOD)) {
Output_Control_Key (PROCESSING_METHOD, Combine_Code ((Combine_Type) method));
}
+
+ if (method == FIX_VOLUMES) {
+ System_Read_False (PERFORMANCE);
+ }
}
Modified: version7/branches/aecom/Transims70/PerfPrep/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/Execute.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/Execute.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -14,6 +14,12 @@
Flow_Time_Service::Execute ();
+ //---- fix performance file ----
+
+ if (method == FIX_VOLUMES) {
+ Fix_Performance ();
+ }
+
if (deleted_flag) {
Header_Number (0);
}
Added: version7/branches/aecom/Transims70/PerfPrep/Fix_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/Fix_Performance.cpp (rev 0)
+++ version7/branches/aecom/Transims70/PerfPrep/Fix_Performance.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -0,0 +1,152 @@
+//*********************************************************
+// Fix_Performance.cpp - fix performance values
+//*********************************************************
+
+#include "PerfPrep.hpp"
+
+//---------------------------------------------------------
+// Fix_Performance
+//---------------------------------------------------------
+
+void PerfPrep::Fix_Performance (void)
+{
+ int index, count, start, end;
+ double length, vol_fac;
+ Dtime max_time;
+
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+
+ Time_Periods *period_ptr;
+ Performance_Data perf_rec;
+ Perf_Data *perf_ptr;
+ Perf_Period *perf_period_ptr;
+ Perf_Itr perf_itr;
+ Perf_Period_Itr perf_period_itr;
+
+ Performance_File *file = System_Performance_File ();
+
+ //---- store the performance data ----
+
+ Show_Message (String ("Fixing %s -- Record") % file->File_Type ());
+ Set_Progress ();
+
+ Initialize_Performance (*file, perf_period_array);
+ count = 0;
+
+ period_ptr = perf_period_array.periods;
+
+ while (file->Read ()) {
+ Show_Progress ();
+
+ perf_rec.Clear ();
+
+ if (!Get_Performance_Data (*file, perf_rec)) continue;
+
+ //---- get the time period ----
+
+ if (period_ptr->Period_Range (perf_rec.Start (), perf_rec.End (), start, end)) {
+
+ //---- process the link record ----
+
+ perf_period_ptr = perf_period_array.Period_Ptr (start);
+
+ dir_ptr = &dir_array [perf_rec.Dir_Index ()];
+ link_ptr = &link_array [dir_ptr->Link ()];
+ length = link_ptr->Length ();
+
+ if (perf_rec.Type () == 0 || !Lane_Use_Flows ()) {
+ index = perf_rec.Dir_Index ();
+ } else {
+ index = dir_ptr->Use_Index ();
+ }
+ if (index < 0 || index >= (int) perf_period_ptr->size ()) continue;
+
+ perf_ptr = perf_period_ptr->Data_Ptr (index);
+
+ max_time = perf_rec.End () - perf_rec.Start ();
+
+ if (perf_rec.Time () > max_time) {
+ vol_fac = (double) perf_rec.Time () / max_time;
+ } else {
+ vol_fac = 1.0;
+ }
+ perf_ptr->Time (perf_rec.Time ());
+ perf_ptr->Time0 (dir_ptr->Time0 ());
+ perf_ptr->Enter (perf_rec.Enter ());
+
+ if (perf_rec.Volume () > perf_rec.Enter () * vol_fac || perf_rec.Volume () < perf_rec.Enter ()) {
+
+ perf_ptr->Volume (perf_rec.Enter () * vol_fac);
+ perf_ptr->Exit (perf_rec.Enter ());
+
+ if (perf_rec.Volume () > 0) {
+ vol_fac = perf_ptr->Volume () / perf_rec.Volume ();
+
+ perf_ptr->SOV (perf_rec.SOV () * vol_fac);
+ perf_ptr->HOV2 (perf_rec.HOV2 () * vol_fac);
+ perf_ptr->HOV3P (perf_rec.HOV3P () * vol_fac);
+ perf_ptr->Truck (perf_rec.Truck () * vol_fac);
+ } else {
+ perf_ptr->SOV (perf_ptr->Volume ());
+ }
+ perf_ptr->Persons (perf_ptr->SOV () + perf_ptr->HOV2 () * 2.0 + perf_ptr->HOV3P () * 3.2 + perf_ptr->Truck () + perf_ptr->Transit () * 30);
+
+ perf_ptr->Veh_Dist (perf_ptr->Volume () * length);
+ perf_ptr->Veh_Time (perf_ptr->Volume () * perf_ptr->Time ());
+ perf_ptr->Veh_Delay (perf_ptr->Volume () * (perf_ptr->Time () - perf_ptr->Time0 ()));
+
+ } else {
+ perf_ptr->Volume (perf_rec.Volume ());
+ perf_ptr->Exit (perf_rec.Exit ());
+
+ perf_ptr->SOV (perf_rec.SOV ());
+ perf_ptr->HOV2 (perf_rec.HOV2 ());
+ perf_ptr->HOV3P (perf_rec.HOV3P ());
+ perf_ptr->Truck (perf_rec.Truck ());
+
+ perf_ptr->Persons (perf_rec.Persons ());
+
+ if (perf_ptr->Volume () * length < perf_rec.Veh_Dist ()) {
+ perf_ptr->Veh_Dist (perf_ptr->Volume () * length);
+ } else {
+ perf_ptr->Veh_Dist (Round (perf_rec.Veh_Dist ()));
+ }
+ if (perf_ptr->Volume () * perf_ptr->Time () < perf_rec.Veh_Time ()) {
+ perf_ptr->Veh_Time (perf_ptr->Volume () * perf_ptr->Time ());
+ perf_ptr->Veh_Delay (perf_ptr->Volume () * (perf_ptr->Time () - perf_ptr->Time0 ()));
+ } else {
+ perf_ptr->Veh_Time (perf_rec.Veh_Time ());
+ perf_ptr->Veh_Delay (perf_rec.Veh_Delay ());
+ }
+ if (perf_ptr->Volume () * (perf_ptr->Time () - perf_ptr->Time0 ()) < perf_ptr->Veh_Delay ()) {
+ perf_ptr->Veh_Delay (perf_ptr->Volume () * (perf_ptr->Time () - perf_ptr->Time0 ()));
+ }
+ }
+
+ perf_ptr->Group_Vol (perf_rec.Group_Vol ());
+ perf_ptr->Max_Queue (perf_rec.Max_Queue ());
+
+ perf_ptr->Add_Count ();
+ perf_ptr->Max_Volume (perf_ptr->Volume ());
+ perf_ptr->Queue (perf_rec.Queue ());
+ perf_ptr->Failure (perf_rec.Failure ());
+
+ perf_ptr->Old_Veh_Time (perf_ptr->Veh_Time ());
+
+ count++;
+ }
+ }
+ clock_t duration = End_Progress (clock ());
+ file->Close ();
+
+ Break_Check (3);
+ Print (2, String ("Number of %s Records = %d%s") % file->File_Type () % Progress_Count () % Process_Duration (duration));
+
+ if (count && count != Progress_Count ()) {
+ Print (1, String ("Number of %s Data Records = %d") % file->File_ID () % count);
+ }
+ Print (1, "Number of Link Direction Records = ") << count;
+
+ if (count > 0) System_Data_True (PERFORMANCE);
+}
Modified: version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -11,7 +11,7 @@
PerfPrep::PerfPrep (void) : Flow_Time_Service ()
{
Program ("PerfPrep");
- Version (23);
+ Version (26);
Title ("Manipulate the Performance File");
System_File_Type required_files [] = {
@@ -35,7 +35,7 @@
DELETE_LINKS, DELETE_FACILITY_TYPES, 0
};
int flow_time_service_keys [] = {
- UPDATE_TRAVEL_TIMES, LINK_FLOW_TYPE, EQUATION_PARAMETERS, CAPACITY_FACTOR_FUNCTIONS,
+ UPDATE_TRAVEL_TIMES, RECALCULATE_VMT, LINK_FLOW_TYPE, EQUATION_PARAMETERS, CAPACITY_FACTOR_FUNCTIONS,
SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD, PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG, 0
};
Control_Key perfprep_keys [] = { //--- code, key, level, status, type, default, range, help ----
Modified: version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -65,6 +65,7 @@
void Load_Transit_Data (void);
void Merge_Performance (void);
void Merge_Turn_Delays (void);
+ void Fix_Performance (void);
void Write_Time_Ratios (void);
Modified: version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj 2018-03-05 18:42:44 UTC (rev 1703)
@@ -165,6 +165,7 @@
<ClCompile Include="Control.cpp" />
<ClCompile Include="Deleted_Report.cpp" />
<ClCompile Include="Execute.cpp" />
+ <ClCompile Include="Fix_Performance.cpp" />
<ClCompile Include="Get_Performance_Data.cpp" />
<ClCompile Include="Load_Transit_Data.cpp" />
<ClCompile Include="Max_Peak_Perf.cpp" />
Modified: version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters 2018-03-05 18:42:44 UTC (rev 1703)
@@ -67,5 +67,8 @@
<ClCompile Include="Sum_Performance.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Fix_Performance.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Modified: version7/branches/aecom/Transims70/Router/Iteration_Loop.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router/Iteration_Loop.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Router/Iteration_Loop.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -59,7 +59,7 @@
if (Time_Updates ()) {
if (rs->Min_VHT_Flag ()) {
- Minimize_VHT (new_factor, zero_flag);
+ Minimize_VHT (new_factor, 0); // zero_flag);
Print (0, " to ") << new_factor;
} else {
Merge_Delay (new_factor, zero_flag);
Modified: version7/branches/aecom/Transims70/Router/Router.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router/Router.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Router/Router.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -11,7 +11,7 @@
Router::Router (void) : Router_Service ()
{
Program ("Router");
- Version (46);
+ Version (48);
Title ("Network Path Building");
Control_Key keys [] = { //--- code, key, level, status, type, help ----
Modified: version7/branches/aecom/Transims70/Router_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Router_Service/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -60,7 +60,7 @@
path_param.delay_flag = System_File_Flag (PERFORMANCE);
path_param.turn_delay_flag = System_File_Flag (TURN_DELAY) || System_File_Flag (NEW_TURN_DELAY);
-
+
if (Time_Updates () && (Update_Rate () > 0 || step_itr->max_iteration > 1)) path_param.delay_flag = true;
if (System_File_Flag (NEW_PERFORMANCE) || Flow_Updates ()) path_param.flow_flag = Flow_Updates ();
Modified: version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -560,10 +560,10 @@
Static_Service::Code_Text Static_Service::combine_codes [] = {
{ REPLACE_LINKS, "REPLACE_LINKS" }, { SIMPLE_LINK_AVG, "SIMPLE_AVERAGE" }, { WEIGHTED_LINK_AVG, "WEIGHTED_AVERAGE" },
- { REPLACE_AVERAGE, "REPLACE_OR_AVERAGE" }, { ADD_FLOWS, "ADD_FLOWS" }, { UPDATE_TIMES, "UPDATE_TIMES" },
+ { REPLACE_AVERAGE, "REPLACE_OR_AVERAGE" }, { ADD_FLOWS, "ADD_FLOWS" }, { UPDATE_TIMES, "UPDATE_TIMES" }, { FIX_VOLUMES, "FIX_VOLUMES" },
{ REPLACE_LINKS, "REPLACE" }, { SIMPLE_LINK_AVG, "AVERAGE" }, { WEIGHTED_LINK_AVG, "WEIGHTED" }, { ADD_FLOWS, "ADD" },
{ UPDATE_TIMES, "UPDATE" }, { SIMPLE_LINK_AVG, "SIMPLE" }, { REPLACE_AVERAGE, "REPLACE_AVERAGE" },
- { UPDATE_TIMES, "CHECK_PERFORMANCE" }, { UPDATE_TIMES, "CHECK" }, { 0, 0 }
+ { UPDATE_TIMES, "CHECK_PERFORMANCE" }, { UPDATE_TIMES, "CHECK" }, { FIX_VOLUMES, "FIX" }, { FIX_VOLUMES, "DEBUG" }, { 0, 0 }
};
//---- application type codes ----
Modified: version7/branches/aecom/Transims70/Validate/Validate.cpp
===================================================================
--- version7/branches/aecom/Transims70/Validate/Validate.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Validate/Validate.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -15,7 +15,7 @@
Validate::Validate (void) : Select_Service ()
{
Program ("Validate");
- Version (10);
+ Version (11);
Title ("Compare Volumes to Counts");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -116,17 +116,17 @@
diff = spd1 - spd0;
- vol_spd_diff_file.Spd0 (spd0);
- vol_spd_diff_file.Spd1 (spd1);
- vol_spd_diff_file.Sdiff (diff);
+ vol_spd_diff_file.Use_Spd0 (spd0);
+ vol_spd_diff_file.Use_Spd1 (spd1);
+ vol_spd_diff_file.Use_Sdiff (diff);
} else {
vol_spd_diff_file.Use_Vol0 (0);
vol_spd_diff_file.Use_Vol1 (0);
vol_spd_diff_file.Use_Vdiff (0);
- vol_spd_diff_file.Spd0 (0);
- vol_spd_diff_file.Spd1 (0);
- vol_spd_diff_file.Sdiff (0);
+ vol_spd_diff_file.Use_Spd0 (0);
+ vol_spd_diff_file.Use_Spd1 (0);
+ vol_spd_diff_file.Use_Sdiff (0);
}
}
if (save) {
Modified: version7/branches/aecom/Transims70/VolSpdData/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/Control.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -26,6 +26,7 @@
new_link_flag = System_File_Flag (NEW_LINK);
new_vol_spd_flag = System_File_Flag (NEW_VOLUME_SPEED);
+ vol_spd_diff_flag = Set_Control_Flag (NEW_VOL_SPD_DIFF_FILE);
//---- initialize the field data for each period ----
@@ -89,6 +90,21 @@
}
}
+ //---- open the base volume speed file ----
+
+ key = Get_Control_String (BASE_VOLUME_SPEED_FILE);
+
+ if (!key.empty ()) {
+ base_file.File_Type ("Base Volume Speed File");
+ Print (1);
+
+ if (Check_Control_Key (BASE_VOLUME_SPEED_FORMAT)) {
+ base_file.Dbase_Format (Get_Control_String (BASE_VOLUME_SPEED_FORMAT));
+ }
+ base_file.Open (Project_Filename (key));
+ vol_spd_base_flag = true;
+ }
+
//---- open the input volume speed file----
key = Get_Control_String (INPUT_VOLUME_SPEED_FILE);
@@ -185,7 +201,6 @@
if (!key.empty ()) {
-
Print (1);
speed_contour_file.File_Type ("New Speed Contour File");
@@ -218,6 +233,116 @@
flip_flag = Get_Control_Flag (FLIP_SPEED_CONTOUR_OUTPUT);
}
+ //---- create new vol_spd_diff file ----
+
+ key = Get_Control_String (NEW_VOL_SPD_DIFF_FILE);
+
+ if (!key.empty ()) {
+ if (!vol_spd_base_flag) {
+ Error ("Based Volume-Speed File is Required to Output Volume Speed Differences");
+ }
+ Print (1);
+ vol_spd_diff_file.File_Type ("New Vol-Spd Difference File");
+
+ if (Check_Control_Key (NEW_VOL_SPD_DIFF_FORMAT)) {
+ vol_spd_diff_file.Dbase_Format (Get_Control_String (NEW_VOL_SPD_DIFF_FORMAT));
+ }
+ vol_spd_diff_file.Create (Project_Filename (key));
+ vol_spd_diff_flag = true;
+ }
+
+ //---- process the selection shape file ----
+
+ key = Get_Control_String (SELECTION_SHAPE_FILE);
+
+ if (!key.empty ()) {
+ selection_flag = true;
+
+ Print (1);
+ selection_file.File_Type ("Selection Shape File");
+
+ if (!selection_file.Open (Project_Filename (key))) {
+ File_Error ("Opening Selection Shape File", selection_file.Shape_Filename ());
+ }
+
+ //---- selection shape field ----
+
+ key = Get_Control_Text (SELECTION_SHAPE_FIELD);
+
+ if (key.empty ()) {
+ Error ("A Selection Shape Field is Required");
+ }
+ selection_field = selection_file.Required_Field (key);
+ Print (0, ", Number = ") << (selection_field + 1);
+
+ selection_id = Get_Control_Integer (SELECTION_FIELD_VALUE);
+
+ //---- percent difference per mile ----
+
+ min_percent = Get_Control_Double (PERCENT_DIFFERENCE_PER_MILE) / 100.0;
+
+ min_diff = Get_Control_Double (MINIMUM_DIFFERENCE_PER_MILE);
+
+ max_distance = Get_Control_Double (MAXIMUM_SELECTION_DISTANCE);
+ if (max_distance == 0.0) {
+ max_distance = MAX_INTEGER;
+ } else {
+ max_distance /= 5280.0;
+ }
+ }
+
+ //---- new_selection_data_file ----
+
+ key = Get_Control_String (NEW_SELECTION_DATA_FILE);
+
+ if (!key.empty ()) {
+ Print (1);
+ new_select_file.File_Type ("New Selection Data File");
+
+ if (Check_Control_Key (NEW_SELECTION_DATA_FORMAT)) {
+ new_select_file.Dbase_Format (Get_Control_String (NEW_SELECTION_DATA_FORMAT));
+ }
+ new_select_file.Lane_Use_Flag (Lane_Use_Flows ());
+ new_select_file.Data_Type (Volume_Data_Type ());
+
+ new_select_file.Create (Project_Filename (key));
+ new_select_flag = true;
+
+ first_data_field = new_select_file.Num_Fields ();
+
+ //---- add fields ----
+
+ new_select_file.Add_Field ("LENGTH", DB_DOUBLE, 8.1, FEET);
+ new_select_file.Add_Field ("MAX_SPD", DB_DOUBLE, 6.1, MPH);
+
+ new_select_file.Add_Field ("VMT0", DB_DOUBLE, 12.6, EMT);
+ new_select_file.Add_Field ("VMT1", DB_DOUBLE, 12.6, EMT);
+ new_select_file.Add_Field ("VMTX", DB_DOUBLE, 12.6, EMT);
+
+ new_select_file.Add_Field ("VHT0", DB_DOUBLE, 12.6, EHT);
+ new_select_file.Add_Field ("VHT1", DB_DOUBLE, 12.6, EHT);
+ new_select_file.Add_Field ("VHTX", DB_DOUBLE, 12.6, EHT);
+
+ new_select_file.Add_Field ("VHD0", DB_DOUBLE, 12.6, EHD);
+ new_select_file.Add_Field ("VHD1", DB_DOUBLE, 12.6, EHD);
+ new_select_file.Add_Field ("VHDX", DB_DOUBLE, 12.6, EHD);
+
+ if (Lane_Use_Flows ()) {
+ new_select_file.Add_Field ("USE_VMT0", DB_DOUBLE, 12.6, EMT);
+ new_select_file.Add_Field ("USE_VMT1", DB_DOUBLE, 12.6, EMT);
+ new_select_file.Add_Field ("USE_VMTX", DB_DOUBLE, 12.6, EMT);
+
+ new_select_file.Add_Field ("USE_VHT0", DB_DOUBLE, 12.6, EHT);
+ new_select_file.Add_Field ("USE_VHT1", DB_DOUBLE, 12.6, EHT);
+ new_select_file.Add_Field ("USE_VHTX", DB_DOUBLE, 12.6, EHT);
+
+ new_select_file.Add_Field ("USE_VHD0", DB_DOUBLE, 12.6, EHD);
+ new_select_file.Add_Field ("USE_VHD1", DB_DOUBLE, 12.6, EHD);
+ new_select_file.Add_Field ("USE_VHDX", DB_DOUBLE, 12.6, EHD);
+ }
+ new_select_file.Write_Header ();
+ }
+
List_Reports ();
//---- process support data ----
@@ -225,6 +350,9 @@
if (Link_Equiv_Flag ()) {
link_equiv.Read (Report_Flag (LINK_EQUIV));
}
+
+ diff_report_flag = Report_Flag (DIFF_REPORT);
+
return;
output_vol_spd:
Modified: version7/branches/aecom/Transims70/VolSpdData/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/Execute.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/Execute.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -15,6 +15,12 @@
Data_Service::Execute ();
+ //---- selection id -----
+
+ if (selection_flag) {
+ Read_Selection ();
+ }
+
//---- initialize the volume speed array ----
if (!System_File_Flag (VOLUME_SPEED)) {
@@ -42,6 +48,14 @@
Write_Volume_Speeds (*System_Volume_Speed_File (true), perf_period_array);
Exit_Stat (DONE);
}
+ if (vol_spd_base_flag) {
+ Read_Volume_Speeds (base_file, base_array);
+
+ if (vol_spd_diff_flag) {
+ Write_Vol_Spd_Diff ();
+ }
+ }
+
if (new_link_flag) {
Update_Links ();
Write_Links ();
Added: version7/branches/aecom/Transims70/VolSpdData/Read_Selection.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/Read_Selection.cpp (rev 0)
+++ version7/branches/aecom/Transims70/VolSpdData/Read_Selection.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -0,0 +1,31 @@
+//*********************************************************
+// Read_Selection.cpp - read the selection shape into memory
+//*********************************************************
+
+#include "VolSpdData.hpp"
+
+//---------------------------------------------------------
+// Read_Selection
+//---------------------------------------------------------
+
+void VolSpdData::Read_Selection (void)
+{
+ //---- read the selection file ----
+
+ Show_Message (String ("Reading %s -- Record") % selection_file.File_Type ());
+ Set_Progress ();
+
+ while (selection_file.Read_Record ()) {
+ Show_Progress ();
+
+ if (selection_id != selection_file.Get_Integer (selection_field)) continue;
+
+ points = selection_file;
+ goto exit;
+ }
+ Error (String ("Selection ID %d was Not Found") % selection_id);
+
+exit:
+ End_Progress ();
+ selection_file.Close ();
+}
Added: version7/branches/aecom/Transims70/VolSpdData/Selection_Check.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/Selection_Check.cpp (rev 0)
+++ version7/branches/aecom/Transims70/VolSpdData/Selection_Check.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -0,0 +1,26 @@
+//*********************************************************
+// Selection_Check.cpp - apply selection criteria
+//*********************************************************
+
+#include "VolSpdData.hpp"
+
+//---------------------------------------------------------
+// Selection_Check
+//---------------------------------------------------------
+
+bool VolSpdData::Selection_Check (double min_dist, double base, double volume)
+{
+ double diff, percent_diff;
+
+ if (min_dist == 0.0) return (true);
+
+ diff = fabs (volume - base);
+ if (diff == 0) return (false);
+
+ if (base > 0) {
+ percent_diff = diff / base;
+ } else {
+ percent_diff = 1.0;
+ }
+ return (min_diff * min_dist <= diff && min_percent * min_dist <= percent_diff);
+}
Modified: version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/VolSpdData.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -11,7 +11,7 @@
VolSpdData::VolSpdData (void) : Data_Service ()
{
Program ("VolSpdData");
- Version (9);
+ Version (15);
Title ("Convert Volume-Speed Data");
System_File_Type required_files [] = {
@@ -18,10 +18,10 @@
NODE, LINK, END_FILE
};
System_File_Type optional_files [] = {
- VOLUME_SPEED, PERFORMANCE, NEW_LINK, NEW_VOLUME_SPEED, END_FILE
+ LANE_USE, VOLUME_SPEED, PERFORMANCE, NEW_LINK, NEW_VOLUME_SPEED, END_FILE
};
int file_service_keys [] = {
- SAVE_LANE_USE_FLOWS, VOLUME_DATA_TYPE, LINK_EQUIVALENCE_FILE, 0
+ NOTES_AND_NAME_FIELDS, SAVE_LANE_USE_FLOWS, VOLUME_DATA_TYPE, LINK_EQUIVALENCE_FILE, 0
};
int data_service_keys [] = {
SUMMARY_TIME_RANGES, SUMMARY_TIME_INCREMENT, 0
@@ -29,6 +29,8 @@
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
{ MERGE_VOLUME_SPEED_FILE, "MERGE_VOLUME_SPEED_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ MERGE_VOLUME_SPEED_FORMAT, "MERGE_VOLUME_SPEED_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
+ { BASE_VOLUME_SPEED_FILE, "BASE_VOLUME_SPEED_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { BASE_VOLUME_SPEED_FORMAT, "BASE_VOLUME_SPEED_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ PROCESSING_METHOD, "PROCESSING_METHOD", LEVEL0, OPT_KEY, TEXT_KEY, "SIMPLE_AVERAGE", COMBINE_RANGE, NO_HELP },
{ MERGE_WEIGHTING_FACTOR, "MERGE_WEIGHTING_FACTOR", LEVEL0, OPT_KEY, FLOAT_KEY, "1.0", "0.0, >= 0.5", NO_HELP },
{ MERGE_PERCENTAGE, "MERGE_PERCENTAGE", LEVEL0, OPT_KEY, FLOAT_KEY, "100.0", "0.0..100.0", NO_HELP },
@@ -45,10 +47,21 @@
{ NEW_SPEED_CONTOUR_FILE, "NEW_SPEED_CONTOUR_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
{ NEW_SPEED_CONTOUR_FORMAT, "NEW_SPEED_CONTOUR_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
{ FLIP_SPEED_CONTOUR_OUTPUT, "FLIP_SPEED_CONTOUR_OUTPUT", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
+ { NEW_VOL_SPD_DIFF_FILE, "NEW_VOL_SPD_DIFF_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_VOL_SPD_DIFF_FORMAT, "NEW_VOL_SPD_DIFF_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
+ { SELECTION_FIELD_VALUE, "SELECTION_FIELD_VALUE", LEVEL0, OPT_KEY, INT_KEY, "1", "", NO_HELP },
+ { SELECTION_SHAPE_FILE, "SELECTION_SHAPE_FILE", LEVEL0, OPT_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
+ { SELECTION_SHAPE_FIELD, "SELECTION_SHAPE_FIELD", LEVEL0, OPT_KEY, TEXT_KEY, "", "", NO_HELP },
+ { PERCENT_DIFFERENCE_PER_MILE, "PERCENT_DIFFERENCE_PER_MILE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0 percent", "0.0..25.0 percent", NO_HELP },
+ { MINIMUM_DIFFERENCE_PER_MILE, "MINIMUM_DIFFERENCE_PER_MILE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0", "0.0..10000.0", NO_HELP },
+ { MAXIMUM_SELECTION_DISTANCE, "MAXIMUM_SELECTION_DISTANCE", LEVEL0, OPT_KEY, FLOAT_KEY, "0.0 miles", "0.0..100.0 miles", NO_HELP},
+ { NEW_SELECTION_DATA_FILE, "NEW_SELECTION_DATA_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_SELECTION_DATA_FORMAT, "NEW_SELECTION_DATA_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, NO_HELP },
END_CONTROL
};
const char *reports [] = {
"LINK_EQUIVALENCE",
+ "DIFFERENCE_REPORT",
""
};
Required_System_Files (required_files);
@@ -60,12 +73,14 @@
Sum_Flow_Flag (true);
Report_List (reports);
- link_field = -1;
- xml_flag = merge_flag = input_flag = new_link_flag = speed_contour_flag = flip_flag = false; ;
+ link_field = selection_field = first_data_field = -1;
+ xml_flag = merge_flag = input_flag = new_link_flag = speed_contour_flag = flip_flag = diff_report_flag = selection_flag = false;
+ vol_spd_base_flag = vol_spd_diff_flag = new_select_flag = false;
start_offset = 0;
units = MPH;
method = SIMPLE_LINK_AVG;
factor = 1.0;
+ min_percent = min_diff = max_distance = 0.0;
}
//---------------------------------------------------------
Modified: version7/branches/aecom/Transims70/VolSpdData/VolSpdData.hpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/VolSpdData.hpp 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/VolSpdData.hpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -8,6 +8,8 @@
#include "Data_Service.hpp"
#include "Db_Header.hpp"
#include "TypeDefs.hpp"
+#include "Vol_Spd_Diff_File.hpp"
+#include "Arcview_File.hpp"
#define ROW_SIZE 100
@@ -24,24 +26,31 @@
protected:
enum VolSpdData_Keys {
- MERGE_VOLUME_SPEED_FILE = 1, MERGE_VOLUME_SPEED_FORMAT, PROCESSING_METHOD, MERGE_WEIGHTING_FACTOR,
+ MERGE_VOLUME_SPEED_FILE = 1, MERGE_VOLUME_SPEED_FORMAT, BASE_VOLUME_SPEED_FILE, BASE_VOLUME_SPEED_FORMAT,
+ PROCESSING_METHOD, MERGE_WEIGHTING_FACTOR,
MERGE_PERCENTAGE, INPUT_VOLUME_SPEED_FILE, INPUT_VOLUME_SPEED_FORMAT, LINK_FIELD_NAME,
AB_VOLUME_PERIOD_FIELD, AB_SPEED_PERIOD_FIELD, BA_VOLUME_PERIOD_FIELD, BA_SPEED_PERIOD_FIELD,
XML_VOLUME_SPEED_FILE, XML_START_TIME_OFFSET, SPEED_UNITS,
NEW_SPEED_CONTOUR_FILE, NEW_SPEED_CONTOUR_FORMAT, FLIP_SPEED_CONTOUR_OUTPUT,
+ NEW_VOL_SPD_DIFF_FILE, NEW_VOL_SPD_DIFF_FORMAT, SELECTION_SHAPE_FILE, SELECTION_SHAPE_FIELD,
+ SELECTION_FIELD_VALUE, PERCENT_DIFFERENCE_PER_MILE, MINIMUM_DIFFERENCE_PER_MILE, MAXIMUM_SELECTION_DISTANCE,
+ NEW_SELECTION_DATA_FILE, NEW_SELECTION_DATA_FORMAT,
};
virtual void Program_Control (void);
private:
- enum VolSpdData_Reports { LINK_EQUIV = 1 };
+ enum VolSpdData_Reports { LINK_EQUIV = 1, DIFF_REPORT };
- int link_field, method;
- double factor, percent;
- bool merge_flag, xml_flag, input_flag, new_link_flag, new_vol_spd_flag, percent_flag;
- bool speed_contour_flag, flip_flag;
+ int link_field, method, selection_id, selection_field, first_data_field;
+ double factor, percent, min_percent, min_diff, max_distance;
+ bool merge_flag, xml_flag, input_flag, new_link_flag, new_vol_spd_flag, percent_flag, new_select_flag;
+ bool speed_contour_flag, flip_flag, vol_spd_base_flag, vol_spd_diff_flag, diff_report_flag, selection_flag;
- Volume_Speed_File merge_file;
- Vol_Spd_Period_Array merge_array;
+ Volume_Speed_File merge_file, base_file;
+ Vol_Spd_Period_Array merge_array, base_array;
+ Vol_Spd_Diff_File vol_spd_diff_file, new_select_file;
+ Arcview_File selection_file;
+ Points points;
Db_Header input_file, speed_contour_file;
Db_File xml_file;
@@ -68,5 +77,8 @@
void Update_Volume (void);
void Update_Links (void);
void Speed_Contour (void);
+ void Read_Selection (void);
+ bool Selection_Check (double min_dist, double base, double volume);
+ void Write_Vol_Spd_Diff (void);
};
#endif
Modified: version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj 2018-03-05 18:42:44 UTC (rev 1703)
@@ -164,11 +164,14 @@
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Merge_Vol_Spd.cpp" />
<ClCompile Include="Read_Dir_Data.cpp" />
+ <ClCompile Include="Read_Selection.cpp" />
<ClCompile Include="Read_XML.cpp" />
+ <ClCompile Include="Selection_Check.cpp" />
<ClCompile Include="Speed_Contour.cpp" />
<ClCompile Include="Update_Links.cpp" />
<ClCompile Include="Update_Volume.cpp" />
<ClCompile Include="VolSpdData.cpp" />
+ <ClCompile Include="Write_Vol_Spd_Diff.cpp" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data_Service\Data_Service.vcxproj">
Modified: version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj.filters 2018-01-30 21:23:31 UTC (rev 1702)
+++ version7/branches/aecom/Transims70/VolSpdData/VolSpdData.vcxproj.filters 2018-03-05 18:42:44 UTC (rev 1703)
@@ -43,5 +43,14 @@
<ClCompile Include="Speed_Contour.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Write_Vol_Spd_Diff.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Read_Selection.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Selection_Check.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
Added: version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp (rev 0)
+++ version7/branches/aecom/Transims70/VolSpdData/Write_Vol_Spd_Diff.cpp 2018-03-05 18:42:44 UTC (rev 1703)
@@ -0,0 +1,383 @@
+//*********************************************************
+// Write_Vol_Spd_Diff.cpp - write the vol-spd difference file
+//*********************************************************
+
+#include "VolSpdData.hpp"
+
+//---------------------------------------------------------
+// Write_Vol_Spd_Diff
+//---------------------------------------------------------
+
+void VolSpdData::Write_Vol_Spd_Diff (void)
+{
+ int p, dir, index, use_index, nrec, num_link, num_periods, field;
+ double volume, base, diff, spd0, spd1, max_spd, out_spd, x, y, xa, ya, xb, yb, dx, dy, vht0, vht1, dist, min_dist, a_dist, b_dist;
+ double vmt_diff, vht_diff, vhd_diff, length, len, vmt, vht, vhd, vmt0, vmt1, spd_fac;
+ Dtime start, end;
+ bool first_flag;
+
+ Node_Data *node_ptr;
+ Link_Data *link_ptr;
+ Dir_Data *dir_ptr;
+ Int_Map_Itr itr;
+ Vol_Spd_Period_Itr period_itr;
+ Vol_Spd_Period *period_ptr;
+ Points_Itr pt_itr;
+
+ nrec = num_link = num_periods = field = 0;
+ x = y = min_dist = vmt_diff = vht_diff = vhd_diff = length = len = vmt = vht = vhd = 0;
+ spd_fac = 5280.0 / 600.0;
+
+ Show_Message (String ("Writing %s -- Record") % vol_spd_diff_file.File_Type ());
+ Set_Progress ();
+
+ //---- define the output fields ----
+
+ vol_spd_diff_file.Data_Type (Volume_Data_Type ());
+ vol_spd_diff_file.Lane_Use_Flag (Lane_Use_Flows ());
+
+ if (!vol_spd_diff_file.Create_Fields ()) {
+ Error ("Creating New Volume-Speed Difference Fields");
+ }
+ if (!vol_spd_diff_file.Write_H...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-01-30 21:23:35
|
Revision: 1702
http://sourceforge.net/p/transims/code/1702
Author: davidroden
Date: 2018-01-30 21:23:31 +0000 (Tue, 30 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.1 -- AECOM Branch 1701
SysLib
Changes were made to the Difference_Data and Trip_Gap_Data tools to increase consistency in the units and terminology used for providing inputs and controlling outputs.
Converge_Service
Control keys for PERCENT_TIME_DIFFERENCE, MINIMUM_TIME_DIFFERENCE, MAXIMUM_TIME_DIFFERENCE, PERCENT_COST_DIFFERENCE, MINIMUM_COST_DIFFERENCE, MAXIMUM_COST_DIFFERENCE, MINIMUM_PATH_TIME_RATIO, MAXIMUM_PATH_TIME_RATIO, MINIMUM_PENALTY_RATIO, and MAXIMUM_PENALTY_RATIO were separated from the MAXIMUM_NUMBER_OF_ITERATIONS key to enable use of these keys in applications that don't involve iterations.
NetMerge 7.1.2
The Lane-Use logic was corrected to use the use_period_array to identify the appropriate match records for lane-use records from the merge file.
PlanCompare 7.1.1
MINIMUM_PATH_DIFFERENCES, TIME_DISTRIBUTION_MINIMUM, TIME_DISTRIBUTION_COUNT, TIME_DISTRIBUTION_INCREMENT, COST_DISTRIBUTION_MINIMUM, COST_DISTRIBUTION_COUNT, COST_DISTRIBUTION_INCREMENT, GENERALIZED_COST_IMPEDANCE, NEW_TIME_DISTRIBUTION_FILE, NEW_TRIP_TIME_GAP_FILE, NEW_COST_DISTRIBUTION_FILE, and NEW_TRIP_COST_GAP_FILE keys were added. TOTAL_TIME_DISTRIBUTION, PERIOD_TIME_DISTRIBUTIONS, TOTAL_TIME_SUMMARY, PERIOD_TIME_SUMMARY, TOTAL_COST_DISTRIBUTION, PERIOD_COST_DISTRIBUTIONS, TOTAL_COST_SUMMARY, PERIOD_COST_SUMMARY, TRIP_TIME_GAP_REPORT, and TRIP_COST_GAP_REPORT reports were implemented. Major changes and improvements were included in the PLAN_DIFFERENCE_TYPES report and output file options.
Router 7.1.46
A number of output presentation updates were included.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Converge_Service/Control.cpp
version7/branches/aecom/Transims70/Include/Difference_Data.hpp
version7/branches/aecom/Transims70/Include/Trip_Gap_Data.hpp
version7/branches/aecom/Transims70/NetMerge/Execute.cpp
version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp
version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp
version7/branches/aecom/Transims70/PlanCompare/Control.cpp
version7/branches/aecom/Transims70/PlanCompare/Execute.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj.filters
version7/branches/aecom/Transims70/PlanCompare/Plan_Processing.cpp
version7/branches/aecom/Transims70/PlanCompare/Write_Match.cpp
version7/branches/aecom/Transims70/Router/Iteration_Loop.cpp
version7/branches/aecom/Transims70/Router/Minimize_VHT.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Difference_Data.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Trip_Gap_Data.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/PlanCompare/Difference_File.cpp
version7/branches/aecom/Transims70/PlanCompare/Difference_Report.cpp
Modified: version7/branches/aecom/Transims70/Converge_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/Converge_Service/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -135,6 +135,11 @@
converge_step_array.push_back (step_data);
}
+ } else if (Num_Converge_Steps () == 0) {
+ step_data.step = max_converge_step = 1;
+ step_data.max_iteration = 1;
+
+ converge_step_array.push_back (step_data);
}
//---- process the step attributes ----
@@ -255,7 +260,7 @@
}
//---- transit gap criteria ----
-
+
if (Control_Key_Status (TRANSIT_CAPACITY_CRITERIA)) {
if (!Control_Key_Empty (TRANSIT_CAPACITY_CRITERIA) && first) {
Print (1);
@@ -265,7 +270,7 @@
}
//---- parking gap criteria ----
-
+
if (Control_Key_Status (PARKING_CAPACITY_CRITERIA)) {
if (System_File_Flag (PARK_DEMAND) || System_File_Flag (NEW_PARK_DEMAND)) {
if (!Control_Key_Empty (PARKING_CAPACITY_CRITERIA) && first) {
@@ -284,220 +289,228 @@
}
Get_Control_List_Groups (RATIO_CONVERGENCE_CRITERIA, ratio_gap_list);
}
+ }
- //---- trip time difference ----
+ //---- trip time difference ----
- if (Control_Key_Status (PERCENT_TIME_DIFFERENCE)) {
- if (!Control_Key_Empty (PERCENT_TIME_DIFFERENCE)) Print (1);
+ if (Control_Key_Status (PERCENT_TIME_DIFFERENCE)) {
+ if (!Control_Key_Empty (PERCENT_TIME_DIFFERENCE)) Print (1);
- Get_Control_List_Groups (PERCENT_TIME_DIFFERENCE, per_time_list);
+ Get_Control_List_Groups (PERCENT_TIME_DIFFERENCE, per_time_list);
- if (per_time_list.size () > 2 || per_time_list [0] != 0.0) {
+ if (per_time_list.size () > 2 || per_time_list [0] != 0.0) {
- //---- minimum time difference ----
+ //---- minimum time difference ----
- if (Control_Key_Status (MINIMUM_TIME_DIFFERENCE)) {
- Get_Control_List_Groups (MINIMUM_TIME_DIFFERENCE, min_time_list);
- }
+ if (Control_Key_Status (MINIMUM_TIME_DIFFERENCE)) {
+ Get_Control_List_Groups (MINIMUM_TIME_DIFFERENCE, min_time_list);
+ }
- //---- maximum time difference ----
+ //---- maximum time difference ----
- if (Control_Key_Status (MAXIMUM_TIME_DIFFERENCE)) {
- Get_Control_List_Groups (MAXIMUM_TIME_DIFFERENCE, max_time_list);
- }
+ if (Control_Key_Status (MAXIMUM_TIME_DIFFERENCE)) {
+ Get_Control_List_Groups (MAXIMUM_TIME_DIFFERENCE, max_time_list);
}
}
+ }
- //---- trip cost difference ----
+ //---- trip cost difference ----
- if (Control_Key_Status (PERCENT_COST_DIFFERENCE)) {
- if (!Control_Key_Empty (PERCENT_COST_DIFFERENCE)) Print (1);
+ if (Control_Key_Status (PERCENT_COST_DIFFERENCE)) {
+ if (!Control_Key_Empty (PERCENT_COST_DIFFERENCE)) Print (1);
- Get_Control_List_Groups (PERCENT_COST_DIFFERENCE, per_cost_list);
+ Get_Control_List_Groups (PERCENT_COST_DIFFERENCE, per_cost_list);
- if (per_cost_list.size () > 2 || per_cost_list [0] != 0.0) {
+ if (per_cost_list.size () > 2 || per_cost_list [0] != 0.0) {
- //---- minimum cost difference ----
+ //---- minimum cost difference ----
- if (Control_Key_Status (MINIMUM_COST_DIFFERENCE)) {
- Get_Control_List_Groups (MINIMUM_COST_DIFFERENCE, min_cost_list);
- }
+ if (Control_Key_Status (MINIMUM_COST_DIFFERENCE)) {
+ Get_Control_List_Groups (MINIMUM_COST_DIFFERENCE, min_cost_list);
+ }
- //---- maximum cost difference ----
+ //---- maximum cost difference ----
- if (Control_Key_Status (MAXIMUM_COST_DIFFERENCE)) {
- Get_Control_List_Groups (MAXIMUM_COST_DIFFERENCE, max_cost_list);
- }
+ if (Control_Key_Status (MAXIMUM_COST_DIFFERENCE)) {
+ Get_Control_List_Groups (MAXIMUM_COST_DIFFERENCE, max_cost_list);
}
}
+ }
- //---- path time ratio ----
+ //---- path time ratio ----
- if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
+ if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
- //---- minimum path time ratio ----
+ //---- minimum path time ratio ----
- if (Control_Key_Status (MINIMUM_PATH_TIME_RATIO)) {
- Get_Control_List_Groups (MINIMUM_PATH_TIME_RATIO, min_time_ratio_list);
- }
+ Print (1);
+ if (Control_Key_Status (MINIMUM_PATH_TIME_RATIO)) {
+ Get_Control_List_Groups (MINIMUM_PATH_TIME_RATIO, min_time_ratio_list);
+ }
- //---- maximum path time ratio ----
+ //---- maximum path time ratio ----
- if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
- Get_Control_List_Groups (MAXIMUM_PATH_TIME_RATIO, max_time_ratio_list);
- }
+ if (Control_Key_Status (MAXIMUM_PATH_TIME_RATIO)) {
+ Get_Control_List_Groups (MAXIMUM_PATH_TIME_RATIO, max_time_ratio_list);
}
+ }
- //---- penalty ratio ----
+ //---- penalty ratio ----
- if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
+ if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
- //---- minimum penalty ratio ----
+ //---- minimum penalty ratio ----
- if (Control_Key_Status (MINIMUM_PENALTY_RATIO)) {
- Get_Control_List_Groups (MINIMUM_PENALTY_RATIO, min_penalty_list);
- }
+ Print (1);
+ if (Control_Key_Status (MINIMUM_PENALTY_RATIO)) {
+ Get_Control_List_Groups (MINIMUM_PENALTY_RATIO, min_penalty_list);
+ }
- //---- maximum penalty ratio ----
+ //---- maximum penalty ratio ----
- if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
- Get_Control_List_Groups (MAXIMUM_PENALTY_RATIO, max_penalty_list);
- }
+ if (Control_Key_Status (MAXIMUM_PENALTY_RATIO)) {
+ Get_Control_List_Groups (MAXIMUM_PENALTY_RATIO, max_penalty_list);
}
+ }
- //---- construct the step groups ----
+ //---- construct the step groups ----
- for (step_itr = converge_step_array.begin (); step_itr != converge_step_array.end (); step_itr++) {
- i = step_itr->step;
+ for (step_itr = converge_step_array.begin (); step_itr != converge_step_array.end (); step_itr++) {
+ i = step_itr->step;
- //---- mininum selection score ----
+ //---- mininum selection score ----
- step_itr->min_select_score = min_score_list.Best (i);
+ step_itr->min_select_score = min_score_list.Best (i);
- //---- maximum percent selected ----
+ //---- maximum percent selected ----
- step_itr->max_percent_select = max_per_list.Best (i);
- step_itr->max_percent_flag = (step_itr->max_percent_select > 0.0 && step_itr->max_percent_select < 100.0);
- step_itr->max_percent_select /= 100.0;
+ step_itr->max_percent_select = max_per_list.Best (i);
+ step_itr->max_percent_flag = (step_itr->max_percent_select > 0.0 && step_itr->max_percent_select < 100.0);
+ step_itr->max_percent_select /= 100.0;
- //---- update all plans ----
+ //---- update all plans ----
- step_itr->update_flag = update_list.Best (i);
+ step_itr->update_flag = update_list.Best (i);
- //---- initial weighting factor ----
+ //---- initial weighting factor ----
- if (min_vht_flag) {
- step_itr->initial_factor = 1.0;
+ if (min_vht_flag) {
+ step_itr->initial_factor = 1.0;
- } else {
- step_itr->initial_factor = init_fac_list.Best (i);
- }
+ } else {
+ step_itr->initial_factor = init_fac_list.Best (i);
+ }
- //---- iteration weighting increment ----
+ //---- iteration weighting increment ----
- step_itr->factor_increment = fac_inc_list.Best (i);
+ step_itr->factor_increment = fac_inc_list.Best (i);
- //---- maximum weighting factor ----
+ //---- maximum weighting factor ----
- step_itr->maximum_factor = max_fac_list.Best (i);
+ step_itr->maximum_factor = max_fac_list.Best (i);
- //---- travel time averaging ----
+ //---- travel time averaging ----
- step_itr->time_averaging = Averaging_Code (time_avg_list.Best (i));
+ step_itr->time_averaging = Averaging_Code (time_avg_list.Best (i));
- //---- dynamic toll averaging ----
+ //---- dynamic toll averaging ----
- step_itr->toll_averaging = Averaging_Code (toll_avg_list.Best (i));
+ step_itr->toll_averaging = Averaging_Code (toll_avg_list.Best (i));
- //---- parking penalty averaging ----
+ //---- parking penalty averaging ----
- step_itr->parking_averaging = Averaging_Code (parking_avg_list.Best (i));
+ step_itr->parking_averaging = Averaging_Code (parking_avg_list.Best (i));
- //---- transit penalty averaging ----
+ //---- transit penalty averaging ----
- step_itr->transit_averaging = Averaging_Code (transit_avg_list.Best (i));
+ step_itr->transit_averaging = Averaging_Code (transit_avg_list.Best (i));
- //---- link gap criteria ----
+ //---- link gap criteria ----
- step_itr->link_gap = link_gap_list.Best (i);
- save_link_gap = (save_link_gap || step_itr->link_gap > 0.0);
+ step_itr->link_gap = link_gap_list.Best (i);
+ save_link_gap = (save_link_gap || step_itr->link_gap > 0.0);
- //---- trip gap criteria ----
+ //---- trip gap criteria ----
- step_itr->trip_gap = trip_gap_list.Best (i);
- save_trip_gap = (save_trip_gap || step_itr->trip_gap > 0.0);
+ step_itr->trip_gap = trip_gap_list.Best (i);
+ save_trip_gap = (save_trip_gap || step_itr->trip_gap > 0.0);
- //---- toll gap criteria ----
+ //---- toll gap criteria ----
- step_itr->toll_gap = toll_gap_list.Best (i);
- save_toll_gap = (save_toll_gap || step_itr->toll_gap > 0.0);
+ step_itr->toll_gap = toll_gap_list.Best (i);
+ save_toll_gap = (save_toll_gap || step_itr->toll_gap > 0.0);
- //---- transit gap criteria ----
+ //---- transit gap criteria ----
- step_itr->transit_gap = transit_gap_list.Best (i);
- save_transit_gap = (save_transit_gap || step_itr->transit_gap > 0.0);
+ step_itr->transit_gap = transit_gap_list.Best (i);
+ save_transit_gap = (save_transit_gap || step_itr->transit_gap > 0.0);
- //---- parking gap criteria ----
+ //---- parking gap criteria ----
- step_itr->parking_gap = parking_gap_list.Best (i);
- save_parking_gap = (save_parking_gap || step_itr->parking_gap > 0.0);
+ step_itr->parking_gap = parking_gap_list.Best (i);
+ save_parking_gap = (save_parking_gap || step_itr->parking_gap > 0.0);
- //---- ratio gap criteria ----
+ //---- ratio gap criteria ----
- step_itr->ratio_gap = ratio_gap_list.Best (i);
- save_ratio_gap = (save_ratio_gap || step_itr->ratio_gap > 0.0);
+ step_itr->ratio_gap = ratio_gap_list.Best (i);
+ save_ratio_gap = (save_ratio_gap || step_itr->ratio_gap > 0.0);
- //---- trip time difference ----
+ //---- trip time difference ----
- step_itr->percent_time_diff = per_time_list.Best (i);
- step_itr->time_diff_flag = (step_itr->percent_time_diff > 0.0);
- step_itr->percent_time_diff /= 100.0;
+ step_itr->percent_time_diff = per_time_list.Best (i);
+ step_itr->time_diff_flag = (step_itr->percent_time_diff > 0.0);
+ step_itr->percent_time_diff /= 100.0;
- //---- minimum time difference ----
+ //---- minimum time difference ----
- step_itr->min_time_diff = min_time_list.Best (i);
+ step_itr->min_time_diff = min_time_list.Best (i);
- //---- maximum time difference ----
+ //---- maximum time difference ----
- step_itr->max_time_diff = max_time_list.Best (i);
+ step_itr->max_time_diff = max_time_list.Best (i);
- step_itr->max_min_time_diff = step_itr->max_time_diff - step_itr->min_time_diff;
- if (step_itr->max_min_time_diff < 1) step_itr->max_min_time_diff = 1;
+ step_itr->max_min_time_diff = step_itr->max_time_diff - step_itr->min_time_diff;
+ if (step_itr->max_min_time_diff < 1) step_itr->max_min_time_diff = 1;
- //---- trip cost difference ----
+ //---- trip cost difference ----
- step_itr->percent_cost_diff = per_cost_list.Best (i);
- step_itr->cost_diff_flag = (step_itr->percent_cost_diff > 0.0);
- step_itr->percent_cost_diff /= 100.0;
+ step_itr->percent_cost_diff = per_cost_list.Best (i);
+ step_itr->cost_diff_flag = (step_itr->percent_cost_diff > 0.0);
+ step_itr->percent_cost_diff /= 100.0;
- //---- minimum cost difference ----
+ //---- minimum cost difference ----
- step_itr->min_cost_diff = min_cost_list.Best (i);
+ step_itr->min_cost_diff = Round (min_cost_list.Best (i));
- //---- maximum cost difference ----
+ //---- maximum cost difference ----
- step_itr->max_cost_diff = max_cost_list.Best (i);
+ step_itr->max_cost_diff = Round (max_cost_list.Best (i));
- step_itr->max_min_cost_diff = step_itr->max_cost_diff - step_itr->min_cost_diff;
- if (step_itr->max_min_cost_diff < 1) step_itr->max_min_cost_diff = 1;
+ step_itr->max_min_cost_diff = step_itr->max_cost_diff - step_itr->min_cost_diff;
+ if (step_itr->max_min_cost_diff < 1) step_itr->max_min_cost_diff = 1;
- //---- path time ratio ----
+ //---- path time ratio ----
- step_itr->max_time_ratio = DTOI (max_time_ratio_list.Best (i) * 100);
- step_itr->min_time_ratio = DTOI (min_time_ratio_list.Best (i) * 100);
- step_itr->time_ratio_flag = (step_itr->max_time_ratio > 100);
- step_itr->max_min_time_ratio = step_itr->max_time_ratio - step_itr->min_time_ratio;
- if (step_itr->max_min_time_ratio < 1) step_itr->max_min_time_ratio = 1;
+ step_itr->max_time_ratio = DTOI (max_time_ratio_list.Best (i) * 100);
+ step_itr->min_time_ratio = DTOI (min_time_ratio_list.Best (i) * 100);
+ step_itr->time_ratio_flag = (step_itr->max_time_ratio > 100);
+ step_itr->max_min_time_ratio = step_itr->max_time_ratio - step_itr->min_time_ratio;
+ if (step_itr->max_min_time_ratio < 1) step_itr->max_min_time_ratio = 1;
- //---- penalty ratio ----
+ //---- penalty ratio ----
- step_itr->max_penalty_ratio = DTOI (max_penalty_list.Best (i) * 100);
- step_itr->min_penalty_ratio = DTOI (min_penalty_list.Best (i) * 100);
- step_itr->penalty_ratio_flag = (step_itr->max_penalty_ratio > 0);
- step_itr->max_min_penalty_ratio = step_itr->max_penalty_ratio - step_itr->min_penalty_ratio;
- if (step_itr->max_min_penalty_ratio < 1) step_itr->max_min_penalty_ratio = 1;
- }
+ step_itr->max_penalty_ratio = DTOI (max_penalty_list.Best (i) * 100);
+ step_itr->min_penalty_ratio = DTOI (min_penalty_list.Best (i) * 100);
+ step_itr->penalty_ratio_flag = (step_itr->max_penalty_ratio > 0);
+ step_itr->max_min_penalty_ratio = step_itr->max_penalty_ratio - step_itr->min_penalty_ratio;
+ if (step_itr->max_min_penalty_ratio < 1) step_itr->max_min_penalty_ratio = 1;
+ }
+ step_itr = converge_step_array.begin ();
+ //---- output options ----
+
+ if (Num_Converge_Steps () > 1 || step_flag) {
+
//---- new link convergence file ----
key = Get_Control_String (NEW_LINK_CONVERGENCE_FILE);
@@ -731,14 +744,7 @@
save_step_flag = Get_Control_Flag (SAVE_STEP_RESULTS);
}
}
-
- } else if (Num_Converge_Steps () == 0) {
- step_data.step = max_converge_step = 1;
- step_data.max_iteration = 1;
-
- converge_step_array.push_back (step_data);
}
- step_itr = converge_step_array.begin ();
//---- destination capacity field ----
Modified: version7/branches/aecom/Transims70/Include/Difference_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Difference_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/Include/Difference_Data.hpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -27,7 +27,7 @@
bool Report_Flags (bool total_distrib, bool period_distrib, bool total_sum, bool period_sum);
bool Set_Periods (Time_Periods &periods);
- void Set_Resolution (int min_diff = 0, int num_distb = 0, double units_fac = 0);
+ void Set_Resolution (int min_diff = 0, int num_distb = 0, double increment = 0);
bool Open_Distribution (string filename);
bool Output_Flag (void) { return (output_flag); }
@@ -34,7 +34,7 @@
bool Active_Flag (void) { return (active_flag); }
bool Cost_Flag (void) { return (cost_flag); }
- void Cost_Flag (bool flag);
+ void Cost_Flag (bool flag, double fac);
void Add_Trip (Dtime tod, double current, double base);
@@ -63,7 +63,7 @@
int num_periods, _period;
int num_distribution, min_difference;
- double scaling_factor, units_factor;
+ double scaling_factor, units_factor, increment;
bool total_distrib, period_distrib, total_sum, period_sum;
bool output_flag, cost_flag, period_flag, active_flag;
Modified: version7/branches/aecom/Transims70/Include/Trip_Gap_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Trip_Gap_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/Include/Trip_Gap_Data.hpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -31,7 +31,7 @@
bool Active_Flag (void) { return (active_flag); }
bool Cost_Flag (void) { return (cost_flag); }
- void Cost_Flag (bool flag) { cost_flag = flag; }
+ void Cost_Flag (bool flag, double fac = 0);
void Add_Trip_Gap_Data (Dtime tod, double input, double compare);
void Write_Trip_Gap_File (void);
@@ -52,6 +52,7 @@
int num_periods, period;
bool gap_report, output_flag, cost_flag, period_flag, active_flag;
+ double units_factor;
Gap_Array gap_array;
Modified: version7/branches/aecom/Transims70/NetMerge/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -49,12 +49,13 @@
//---- merge the link files ----
+ max_dir_index = (int) dir_array.size ();
int num_link = (int) link_array.size ();
Read_Links (link_file);
Print (1, "Number of Merge Link Records = ") << ((int) link_array.size () - num_link);
-
+
//---- merge the pocket file ----
if (pocket_flag) {
Modified: version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -10,10 +10,13 @@
void NetMerge::Merge_Lane_Use (void)
{
- int first_index, num;
+ int first_index, num, i, rec;
+ bool found;
Lane_Use_Data lane_use_rec, *lane_use_ptr;
Dir_Data *dir_ptr;
+ Lane_Use_Period *period_ptr;
+ Link_Dir_Data *use_index;
Show_Message (String ("Reading %s -- Record") % lane_use_file.File_Type ());
Set_Progress ();
@@ -24,34 +27,50 @@
lane_use_rec.Clear ();
if (Get_Lane_Use_Data (lane_use_file, lane_use_rec)) {
+ if (lane_use_rec.Dir_Index () >= max_dir_index) continue;
dir_ptr = &dir_array [lane_use_rec.Dir_Index ()];
first_index = dir_ptr->First_Lane_Use ();
if (first_index < 0) continue;
+ found = false;
- for (num = first_index; num >= 0; num = lane_use_ptr->Next_Index ()) {
- lane_use_ptr = &lane_use_array [num];
+ for (;; first_index++) {
+ if (first_index >= use_period_array.size ()) break;
- if (lane_use_rec.Low_Lane () != lane_use_ptr->Low_Lane ()) continue;
- if (lane_use_rec.High_Lane () != lane_use_ptr->High_Lane ()) continue;
- if (lane_use_rec.Type () != lane_use_ptr->Type ()) continue;
- if (lane_use_rec.Use () != lane_use_ptr->Use ()) continue;
- if (lane_use_rec.Min_Veh_Type () != lane_use_ptr->Min_Veh_Type ()) continue;
- if (lane_use_rec.Max_Veh_Type () != lane_use_ptr->Max_Veh_Type ()) continue;
- if (lane_use_rec.Min_Traveler () != lane_use_ptr->Min_Traveler ()) continue;
- if (lane_use_rec.Start () != lane_use_ptr->Start ()) continue;
- if (lane_use_rec.End () != lane_use_ptr->End ()) continue;
- if (lane_use_rec.Offset () != lane_use_ptr->Offset ()) continue;
- if (lane_use_rec.Length () != lane_use_ptr->Length ()) continue;
- if (lane_use_rec.Min_Traveler () != lane_use_ptr->Min_Traveler ()) continue;
+ period_ptr = &use_period_array [first_index];
- lane_use_ptr->Toll (lane_use_rec.Toll ());
- lane_use_ptr->Min_Rate (lane_use_rec.Min_Rate ());
- lane_use_ptr->Max_Rate (lane_use_rec.Max_Rate ());
+ num = period_ptr->Records ();
+ rec = period_ptr->Index ();
- lane_use_ptr->Tolls () = lane_use_rec.Tolls ();
- break;
+ if (rec >= (int) use_period_index.size ()) continue;
+
+ for (i = 0; i < num; i++, rec++) {
+ use_index = &use_period_index [rec];
+ lane_use_ptr = &lane_use_array [use_index->Link ()];
+
+ if (lane_use_rec.Low_Lane () != lane_use_ptr->Low_Lane ()) continue;
+ if (lane_use_rec.High_Lane () != lane_use_ptr->High_Lane ()) continue;
+ if (lane_use_rec.Type () != lane_use_ptr->Type ()) continue;
+ if (lane_use_rec.Use () != lane_use_ptr->Use ()) continue;
+ if (lane_use_rec.Min_Veh_Type () != lane_use_ptr->Min_Veh_Type ()) continue;
+ if (lane_use_rec.Max_Veh_Type () != lane_use_ptr->Max_Veh_Type ()) continue;
+ if (lane_use_rec.Min_Traveler () != lane_use_ptr->Min_Traveler ()) continue;
+ if (lane_use_rec.Start () != lane_use_ptr->Start ()) continue;
+ if (lane_use_rec.End () != lane_use_ptr->End ()) continue;
+ if (lane_use_rec.Offset () != lane_use_ptr->Offset ()) continue;
+ if (lane_use_rec.Length () != lane_use_ptr->Length ()) continue;
+ if (lane_use_rec.Min_Traveler () != lane_use_ptr->Min_Traveler ()) continue;
+
+ lane_use_ptr->Toll (lane_use_rec.Toll ());
+ lane_use_ptr->Min_Rate (lane_use_rec.Min_Rate ());
+ lane_use_ptr->Max_Rate (lane_use_rec.Max_Rate ());
+
+ lane_use_ptr->Tolls () = lane_use_rec.Tolls ();
+ found = true;
+ break;
+ }
+ if (found) break;
}
}
}
Modified: version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -11,7 +11,7 @@
NetMerge::NetMerge (void) : Data_Service ()
{
Program ("NetMerge");
- Version (1);
+ Version (2);
Title ("Merge Two Networks");
System_File_Type required_files [] = {
@@ -65,6 +65,8 @@
sign_flag = signal_flag = timing_flag = phasing_flag = detector_flag = performance_flag = turn_delay_flag = false;
zone_flag = false;
+ max_dir_index = 0;
+
System_Read_False (PERFORMANCE);
System_Read_False (TURN_DELAY);
}
Modified: version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -32,6 +32,7 @@
private:
//enum NetMerge_Reports { REPORT = 1, };
+ int max_dir_index;
bool shape_flag, pocket_flag, lane_use_flag, location_flag, parking_flag, access_flag, stop_flag, line_flag, connect_flag;
bool sign_flag, signal_flag, timing_flag, phasing_flag, detector_flag, performance_flag, turn_delay_flag, merge_flag;
bool zone_flag;
Modified: version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -10,13 +10,17 @@
void PlanCompare::Plan_Processing::Compare_Plan (Plan_Data &plan)
{
+ Dtime tod, time1, time2, tim_diff;
+ int imp1, imp2, imp_diff, ratio, index, legs, select;
+ double prob;
+ bool flag, found;
+
Trip_Index trip_index;
Trip_Map_Itr map_itr;
Plan_Data *plan_ptr;
-
- bool start_flag, end_flag, dur_flag, org_flag, des_flag, org_type_flag, des_type_flag;
- bool purp_flag, mode_flag, const_flag, veh_flag, veh_type_flag, typ_flag;
- bool flag;
+ Plan_Leg_Itr leg1_itr, leg2_itr;
+ String string;
+ Plan_Skim_Data skim_data;
plan.Get_Index (trip_index);
@@ -23,52 +27,235 @@
map_itr = exe->plan_trip_map.find (trip_index);
if (map_itr == exe->plan_trip_map.end ()) {
- new_trips.push_back (trip_index);
+ if (thread_flag) {
+ new_trips.push_back (trip_index);
+ } else {
+ exe->new_trips.push_back (trip_index);
+ }
return;
}
- plan_ptr = &exe->plan_array [map_itr->second];
+ index = map_itr->second;
+ plan_ptr = &exe->plan_array [index];
+
+ //---- difference and gap measures ----
+
+ time1 = plan_ptr->Total_Time ();
+ time2 = plan.Total_Time ();
+
+ if (exe->sum_periods.Period_Control_Point () == MID_TRIP) {
+ tod = (plan.Arrive () + plan.Depart ()) >> 1;
+ } else if (exe->sum_periods.Period_Control_Point () == TRIP_START) {
+ tod = plan.Depart ();
+ } else {
+ tod = plan.Arrive ();
+ }
+ imp1 = Resolve (plan_ptr->Impedance ());
+ imp2 = Resolve (plan.Impedance ());
+
+ //---- save report data ----
+
+ if (exe->time_sum_flag) {
+ time_diff->Add_Trip (tod, time1.Minutes (), time2.Minutes ());
+ }
+ if (exe->cost_sum_flag) {
+ cost_diff->Add_Trip (tod, imp1, imp2);
+ }
+
+ //---- save gap data ----
+
+ if (exe->time_gap_flag) {
+ time_gap->Add_Trip_Gap_Data (tod, time1.Minutes (), time2.Minutes ());
+ }
+ if (exe->cost_gap_flag) {
+ cost_gap->Add_Trip_Gap_Data (tod, imp1, imp2);
+ }
+
+ //---- flag differences ----
+
+ string.assign (NUM_DIFFS, '0');
+
plan_ptr->Select (1);
+ flag = false;
+ select = 1;
- start_flag = (plan_ptr->Start () != plan.Start ());
- end_flag = (plan_ptr->End () != plan.End ());
- dur_flag = (plan_ptr->Duration () != plan.Duration ());
- org_flag = (plan_ptr->Origin () != plan.Origin ());
- des_flag = (plan_ptr->Destination () != plan.Destination ());
- org_type_flag = (plan_ptr->Org_Type () != plan.Org_Type ());
- des_type_flag = (plan_ptr->Des_Type () != plan.Des_Type ());
- purp_flag = (plan_ptr->Purpose () != plan.Purpose ());
- mode_flag = (plan_ptr->Mode () != plan.Mode ());
- const_flag = (plan_ptr->Constraint () != plan.Constraint ());
- veh_flag = (plan_ptr->Vehicle () != plan.Vehicle ());
- veh_type_flag = (plan_ptr->Veh_Type () != plan.Veh_Type ());
- typ_flag = (plan_ptr->Type () != plan.Type ());
+ if (plan_ptr->Start () != plan.Start ()) {
+ string [0] = '1';
+ flag = true;
+ }
+ if (plan_ptr->End () != plan.End ()) {
+ string [1] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Duration () != plan.Duration ()) {
+ string [2] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Origin () != plan.Origin ()) {
+ string [3] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Destination () != plan.Destination ()) {
+ string [4] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Org_Type () != plan.Org_Type ()) {
+ string [5] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Des_Type () != plan.Des_Type ()) {
+ string [6] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Purpose () != plan.Purpose ()) {
+ string [7] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Mode () != plan.Mode ()) {
+ string [8] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Constraint () != plan.Constraint ()) {
+ string [9] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Vehicle () != plan.Vehicle ()) {
+ string [10] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Veh_Type () != plan.Veh_Type ()) {
+ string [11] = '1';
+ flag = true;
+ }
+ if (plan_ptr->Type () != plan.Type ()) {
+ string [12] = '1';
+ flag = true;
+ }
- flag = (plan_ptr->Impedance () != plan.Impedance ());
+ if (flag) select = 2;
- if (start_flag || end_flag || dur_flag || org_flag || des_flag || org_type_flag || des_type_flag ||
- purp_flag || mode_flag || const_flag || veh_flag || veh_type_flag || typ_flag || flag) {
+ //---- time difference ----
- plan_ptr->Select (2);
+ if (exe->step_itr->time_diff_flag) {
+ tim_diff = time1 - time2;
+ if (tim_diff > exe->step_itr->max_time_diff) {
+ string [13] = '1';
+ flag = true;
+ } else if (tim_diff >= exe->step_itr->min_time_diff && time2 > 0) {
+ prob = (double) tim_diff / time2;
+ if (prob >= exe->step_itr->percent_time_diff) {
+ if (exe->step_itr->max_min_time_diff > 1) {
+ string [13] = '1';
+ flag = true;
+ }
+ }
+ }
+ }
+
+ //---- cost-impedance difference ----
+
+ if (exe->step_itr->cost_diff_flag) {
+ imp_diff = imp1 - imp2;
+
+ if (imp_diff > exe->step_itr->max_cost_diff) {
+ string [14] = '1';
+ flag = true;
+ } else if (imp_diff >= exe->step_itr->min_cost_diff && imp2 > 0) {
+ prob = (double) imp_diff / imp2;
+ if (prob >= exe->step_itr->percent_cost_diff) {
+ string [14] = '1';
+ flag = true;
+ }
+ }
+ }
+
+ //---- time ratio selection ----
+
+ if (exe->step_itr->time_ratio_flag) {
+ ratio = plan.Time_Ratio ();
+
+ if (ratio > exe->step_itr->max_time_ratio) {
+ string [15] = '1';
+ flag = true;
+ } else if (ratio >= exe->step_itr->min_time_ratio) {
+ string [15] = '1';
+ flag = true;
+ }
+ }
+
+ //---- penalty ratio selection ----
+
+ if (exe->step_itr->penalty_ratio_flag) {
+ ratio = plan.Penalty_Ratio ();
+
+ if (ratio > exe->step_itr->max_penalty_ratio) {
+ string [16] = '1';
+ flag = true;
+ } else if (ratio >= exe->step_itr->min_penalty_ratio) {
+ string [16] = '1';
+ flag = true;
+ }
+ }
+
+ //---- path difference ----
+
+ if (exe->min_path_legs > 0) {
+ legs = abs ((int) plan_ptr->size () - (int) plan.size ());
+
+ if (legs >= exe->min_path_legs) {
+ string [17] = '1';
+ flag = true;
+ } else {
+ legs = 0;
+
+ for (leg1_itr = plan_ptr->begin (); leg1_itr != plan_ptr->end (); leg1_itr++) {
+ found = false;
+
+ for (leg2_itr = plan.begin (); leg2_itr != plan.end (); leg2_itr++) {
+ if (leg1_itr->Type () == leg2_itr->Type () && leg1_itr->Mode () == leg2_itr->Mode () && leg1_itr->ID () == leg2_itr->ID ()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ if (++legs >= exe->min_path_legs) {
+ string [17] = '1';
+ flag = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ //---- output the differences ----
+
+ if (flag) {
+ if (flag && select == 1) select = 3;
+
+ plan_ptr->Select (select);
+
if (thread_flag) {
- return;
+ difference_map.insert (Str_Map_Data (index, string));
+ } else {
+ if (exe->diff_report) {
+ exe->Difference_Report (trip_index, string);
+ }
+ if (exe->diff_file_flag) {
+ exe->Difference_File (trip_index, string);
+ }
}
- exe->Write (1, String ("Plan %d-%d-%d-%d Different") % trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
+ if (exe->match_flag) {
+ skim_data.Put_Data (plan);
+ skim_data.Num_Legs ((int) plan.size ());
- if (start_flag) exe->Write (0, " Start");
- if (end_flag) exe->Write (0, " End");
- if (dur_flag) exe->Write (0, " Duration");
- if (org_flag) exe->Write (0, " Origin");
- if (des_flag) exe->Write (0, " Destination");
- if (org_type_flag) exe->Write (0, " Org_Type");
- if (des_type_flag) exe->Write (0, " Des_Type");
- if (purp_flag) exe->Write (0, " Purpose");
- if (mode_flag) exe->Write (0, " Mode");
- if (const_flag) exe->Write (0, " Constraint");
- if (veh_flag) exe->Write (0, " Vehicle");
- if (veh_type_flag) exe->Write (0, " Veh_Type");
- if (typ_flag) exe->Write (0, " Type");
- if (flag) exe->Write (0, " Impedance");
+ MAIN_LOCK
+ index = (int) exe->plan_skim_array.size ();
+ if (exe->plan_skim_map.insert (Trip_Map_Data (trip_index, index)).second) {
+ exe->plan_skim_array.push_back (skim_data);
+ }
+ END_LOCK
+ }
}
}
Modified: version7/branches/aecom/Transims70/PlanCompare/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/Control.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/PlanCompare/Control.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -11,6 +11,9 @@
void PlanCompare::Program_Control (void)
{
String key;
+ Dtime time_inc;
+ int min_time, time_count, min_cost, cost_count;
+ double cost_inc, units;
//---- create the network files ----
@@ -19,8 +22,8 @@
thread_flag = (Num_Threads () > 1);
plan_file = System_Plan_File ();
- new_plan_flag = System_File_Flag (NEW_PLAN);
- new_plan_file = System_Plan_File (true);
+ match_flag = System_File_Flag (NEW_PLAN_SKIM);
+ new_skim_file = System_Plan_Skim_File (true);
new_select_flag = System_File_Flag (NEW_SELECTION);
@@ -51,60 +54,127 @@
compare_file.Open ();
}
- //---- compare generalized costs ----
+ //---- minimum path differences ----
- cost_flag = Get_Control_Flag (COMPARE_GENERALIZED_COSTS);
+ min_path_legs = Get_Control_Flag (MINIMUM_PATH_DIFFERENCES);
//---- selection method ----
- method = Select_Method_Code (Get_Control_Text (SELECTION_METHOD));
+// method = Select_Method_Code (Get_Control_Text (SELECTION_METHOD));
- //---- new trip match file ----
+ //---- new difference types file ----
- key = Get_Control_String (NEW_TRIP_MATCH_FILE);
+ key = Get_Control_String (NEW_DIFFERENCE_TYPES_FILE);
if (!key.empty ()) {
Print (1);
- match_file.File_Type ("New Trip Match File");
- match_file.Filename (Project_Filename (key));
- match_file.File_Access (CREATE);
+ difference_file.File_Type ("New Difference Types File");
+ difference_file.Filename (Project_Filename (key));
+ difference_file.File_Access (CREATE);
- key = Get_Control_String (NEW_TRIP_MATCH_FORMAT);
+ key = Get_Control_String (NEW_DIFFERENCE_TYPES_FORMAT);
if (!key.empty ()) {
- match_file.Dbase_Format (key);
+ difference_file.Dbase_Format (key);
}
- match_file.Open ();
- match_flag = true;
+ difference_file.Add_Field ("HHOLD", DB_INTEGER, 4, NO_UNITS, true);
+ difference_file.Add_Field ("PERSON", DB_INTEGER, 2, NO_UNITS, true);
+ difference_file.Add_Field ("TOUR", DB_INTEGER, 1, NO_UNITS, true);
+ difference_file.Add_Field ("TRIP", DB_INTEGER, 1, NO_UNITS, true);
+
+ difference_file.Add_Field ("START", DB_INTEGER, 1);
+ difference_file.Add_Field ("END", DB_INTEGER, 1);
+ difference_file.Add_Field ("DURATION", DB_INTEGER, 1);
+ difference_file.Add_Field ("ORIGIN", DB_INTEGER, 1);
+ difference_file.Add_Field ("DESTINATION", DB_INTEGER, 1);
+ difference_file.Add_Field ("ORG_TYPE", DB_INTEGER, 1);
+ difference_file.Add_Field ("DES_TYPE", DB_INTEGER, 1);
+ difference_file.Add_Field ("PURPOSE", DB_INTEGER, 1);
+ difference_file.Add_Field ("MODE", DB_INTEGER, 1);
+ if (difference_file.Dbase_Format () == SQLITE3) {
+ difference_file.Add_Field ("CONTROL", DB_INTEGER, 1);
+ } else {
+ difference_file.Add_Field ("CONSTRAINT", DB_INTEGER, 1);
+ }
+ difference_file.Add_Field ("VEHICLE", DB_INTEGER, 1);
+ difference_file.Add_Field ("VEH_TYPE", DB_INTEGER, 1);
+ difference_file.Add_Field ("TYPE", DB_INTEGER, 1);
+
+ difference_file.Add_Field ("TIME", DB_INTEGER, 1);
+ difference_file.Add_Field ("IMPEDANCE", DB_INTEGER, 1);
+ difference_file.Add_Field ("TIME_RATIO", DB_INTEGER, 1);
+ difference_file.Add_Field ("PENALTY", DB_INTEGER, 1);
+ difference_file.Add_Field ("PATH", DB_INTEGER, 1);
+
+ difference_file.Open ();
+ diff_file_flag = true;
}
+ //---- time distribution parameters ----
+
+ Print (1);
+ min_time = Get_Control_Integer (TIME_DISTRIBUTION_MINIMUM);
+ time_count = Get_Control_Integer (TIME_DISTRIBUTION_COUNT);
+ time_inc = Get_Control_Time (TIME_DISTRIBUTION_INCREMENT);
+
+ time_diff.Set_Resolution (min_time, time_count, time_inc.Minutes ());
+
+ //---- cost distribution parameters ----
+
+ min_cost = Get_Control_Integer (COST_DISTRIBUTION_MINIMUM);
+ cost_count = Get_Control_Integer (COST_DISTRIBUTION_COUNT);
+ cost_inc = Get_Control_Double (COST_DISTRIBUTION_INCREMENT);
+ units = Get_Control_Double (GENERALIZED_COST_IMPEDANCE);
+
+ cost_diff.Cost_Flag (true, units);
+ cost_diff.Set_Resolution (min_cost, cost_count, cost_inc);
+
+ //---- new time distribution file ----
+
+ time_diff.Open_Distribution (Get_Control_String (NEW_TIME_DISTRIBUTION_FILE));
+
+ //---- new trip time gap file ----
+
+ time_gap.Open_Trip_Gap_File (Get_Control_String (NEW_TRIP_TIME_GAP_FILE));
+
+ //---- new time distribution file ----
+
+ cost_diff.Open_Distribution (Get_Control_String (NEW_COST_DISTRIBUTION_FILE));
+
+ //---- new trip time gap file ----
+
+ cost_gap.Cost_Flag (true, units);
+ cost_gap.Open_Trip_Gap_File (Get_Control_String (NEW_TRIP_COST_GAP_FILE));
+
//---- write the report names ----
List_Reports ();
- ////---- set report flags ----
+ diff_report = Report_Flag (DIFF_TYPES);
- //time_sum_flag = time_diff.Report_Flags (Report_Flag (TOTAL_TIME), Report_Flag (PERIOD_TIME),
- // Report_Flag (TOT_TIME_SUM), Report_Flag (PER_TIME_SUM));
+ //---- set report flags ----
- //cost_sum_flag = cost_diff.Report_Flags (Report_Flag (TOTAL_COST), Report_Flag (PERIOD_COST),
- // Report_Flag (TOT_COST_SUM), Report_Flag (PER_COST_SUM));
+ time_sum_flag = time_diff.Report_Flags (Report_Flag (TOTAL_TIME), Report_Flag (PERIOD_TIME),
+ Report_Flag (TOT_TIME_SUM), Report_Flag (PER_TIME_SUM));
- //if (time_diff.Output_Flag () || Report_Flag (PERIOD_TIME) || Report_Flag (PER_TIME_SUM)) {
- // time_diff.Set_Periods (sum_periods);
- // time_sum_flag = true;
- //}
- //if (cost_diff.Output_Flag () || Report_Flag (PERIOD_COST) || Report_Flag (PER_COST_SUM)) {
- // cost_diff.Set_Periods (sum_periods);
- // cost_sum_flag = true;
- //}
- //if (time_gap.Output_Flag () || Report_Flag (TRP_TIME_GAP)) {
- // time_gap.Report_Flags (Report_Flag (TRP_TIME_GAP));
- // time_gap.Set_Periods (sum_periods);
- // time_gap_flag = true;
- //}
- //if (cost_gap.Output_Flag () || Report_Flag (TRP_COST_GAP)) {
- // cost_gap.Report_Flags (Report_Flag (TRP_COST_GAP));
- // cost_gap.Set_Periods (sum_periods);
- // cost_gap_flag = true;
- //}
+ cost_sum_flag = cost_diff.Report_Flags (Report_Flag (TOTAL_COST), Report_Flag (PERIOD_COST),
+ Report_Flag (TOT_COST_SUM), Report_Flag (PER_COST_SUM));
+
+ if (time_diff.Output_Flag () || Report_Flag (PERIOD_TIME) || Report_Flag (PER_TIME_SUM)) {
+ time_diff.Set_Periods (sum_periods);
+ time_sum_flag = true;
+ }
+ if (cost_diff.Output_Flag () || Report_Flag (PERIOD_COST) || Report_Flag (PER_COST_SUM)) {
+ cost_diff.Set_Periods (sum_periods);
+ cost_sum_flag = true;
+ }
+ if (time_gap.Output_Flag () || Report_Flag (TRP_TIME_GAP)) {
+ time_gap.Report_Flags (Report_Flag (TRP_TIME_GAP));
+ time_gap.Set_Periods (sum_periods);
+ time_gap_flag = true;
+ }
+ if (cost_gap.Output_Flag () || Report_Flag (TRP_COST_GAP)) {
+ cost_gap.Report_Flags (Report_Flag (TRP_COST_GAP));
+ cost_gap.Set_Periods (sum_periods);
+ cost_gap_flag = true;
+ }
}
Added: version7/branches/aecom/Transims70/PlanCompare/Difference_File.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/Difference_File.cpp (rev 0)
+++ version7/branches/aecom/Transims70/PlanCompare/Difference_File.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -0,0 +1,39 @@
+//*********************************************************
+// Difference_File.cpp - Write the Difference File
+//*********************************************************
+
+#include "PlanCompare.hpp"
+
+//---------------------------------------------------------
+// Difference_File
+//---------------------------------------------------------
+
+void PlanCompare::Difference_File (Trip_Index &trip_index, String &string)
+{
+ difference_file.Put_Field (0, trip_index.Household ());
+ difference_file.Put_Field (1, trip_index.Person ());
+ difference_file.Put_Field (2, trip_index.Tour ());
+ difference_file.Put_Field (3, trip_index.Trip ());
+
+ difference_file.Put_Field (4, string [0] - '0'); //----- Start -----
+ difference_file.Put_Field (5, string [1] - '0'); //----- End -----
+ difference_file.Put_Field (6, string [2] - '0'); //----- Duration -----
+ difference_file.Put_Field (7, string [3] - '0'); //----- Origin -----
+ difference_file.Put_Field (8, string [4] - '0'); //----- Destination -----
+ difference_file.Put_Field (9, string [5] - '0'); //----- Org_Type -----
+ difference_file.Put_Field (10, string [6] - '0'); //----- Des_Type -----
+ difference_file.Put_Field (11, string [7] - '0'); //----- Purpose -----
+ difference_file.Put_Field (12, string [8] - '0'); //----- Mode -----
+ difference_file.Put_Field (13, string [9] - '0'); //----- Constraint -----
+ difference_file.Put_Field (14, string [10] - '0'); //----- Vehicle -----
+ difference_file.Put_Field (15, string [11] - '0'); //----- Veh_Type -----
+ difference_file.Put_Field (16, string [12] - '0'); //----- Type -----
+ difference_file.Put_Field (17, string [13] - '0'); //----- Time -----
+ difference_file.Put_Field (18, string [14] - '0'); //----- Impedance -----
+ difference_file.Put_Field (19, string [15] - '0'); //----- Time_Ratio -----
+ difference_file.Put_Field (20, string [16] - '0'); //----- Penalty -----
+ difference_file.Put_Field (21, string [17] - '0'); //----- Path -----
+
+ difference_file.Write ();
+}
+
Added: version7/branches/aecom/Transims70/PlanCompare/Difference_Report.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/Difference_Report.cpp (rev 0)
+++ version7/branches/aecom/Transims70/PlanCompare/Difference_Report.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -0,0 +1,34 @@
+//*********************************************************
+// Difference_Report.cpp - Print the Difference Report
+//*********************************************************
+
+#include "PlanCompare.hpp"
+
+//---------------------------------------------------------
+// Difference_Report
+//---------------------------------------------------------
+
+void PlanCompare::Difference_Report (Trip_Index &trip_index, String &string)
+{
+ Print (1, String ("Plan %d-%d-%d-%d Different") % trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
+
+ if (string [0] == '1') Print (0, " Start");
+ if (string [1] == '1') Print (0, " End");
+ if (string [2] == '1') Print (0, " Duration");
+ if (string [3] == '1') Print (0, " Origin");
+ if (string [4] == '1') Print (0, " Destination");
+ if (string [5] == '1') Print (0, " Org_Type");
+ if (string [6] == '1') Print (0, " Des_Type");
+ if (string [7] == '1') Print (0, " Purpose");
+ if (string [8] == '1') Print (0, " Mode");
+ if (string [9] == '1') Print (0, " Constraint");
+ if (string [10] == '1') Print (0, " Vehicle");
+ if (string [11] == '1') Print (0, " Veh_Type");
+ if (string [12] == '1') Print (0, " Type");
+ if (string [13] == '1') Print (0, " Time");
+ if (string [14] == '1') Print (0, " Impedance");
+ if (string [15] == '1') Print (0, " Time_Ratio");
+ if (string [16] == '1') Print (0, " Penalty");
+ if (string [17] == '1') Print (0, " Path");
+}
+
Modified: version7/branches/aecom/Transims70/PlanCompare/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/Execute.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/PlanCompare/Execute.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -13,7 +13,10 @@
int i;
Select_Data data;
Trip_Index trip_index;
- Plan_Itr plan_itr;
+ Plan_Ptr plan_ptr;
+ Str_Map_Itr map_itr;
+ Trip_Map_Itr itr;
+ Trip_Index_Itr new_itr;
//---- read the network data ----
@@ -48,22 +51,35 @@
Compare_Plans ();
- //---- set the selection set ----
+ //---- sum the thread data ----
- select_map.clear ();
-
if (thread_flag) {
for (i = 0; i < Num_Threads (); i++) {
plan_processing [i]->Merge_Results ();
}
}
- for (plan_itr = plan_array.begin (); plan_itr != plan_array.end (); plan_itr++) {
- if (plan_itr->Select () != 1) {
- plan_itr->Get_Index (trip_index);
- data.Type (plan_itr->Select ());
- select_map.insert (Select_Map_Data (trip_index, data));
+ //---- difference type output ----
+
+ if (diff_report || diff_file_flag) {
+ if (diff_report) {
+ Print (2, "Plan Difference Types");
+ Print (1);
}
+ for (map_itr = difference_map.begin (); map_itr != difference_map.end (); map_itr++) {
+ plan_ptr = &plan_array [map_itr->first];
+ plan_ptr->Get_Index (trip_index);
+
+ if (diff_report) {
+ Difference_Report (trip_index, map_itr->second);
+ }
+ if (diff_file_flag) {
+ Difference_File (trip_index, map_itr->second);
+ }
+ }
+ if (diff_file_flag) {
+ difference_file.Close ();
+ }
}
//---- trip match file ----
@@ -75,48 +91,83 @@
//---- new selection file ----
if (new_select_flag) {
+ select_map.clear ();
+
+ for (itr = plan_trip_map.begin (); itr != plan_trip_map.end (); itr++) {
+ plan_ptr = &plan_array [itr->second];
+
+ if (plan_ptr->Select () != 1) {
+ plan_ptr->Get_Index (trip_index);
+ data.Type (plan_ptr->Select ());
+
+ select_map.insert (Select_Map_Data (trip_index, data));
+ }
+ }
+ data.Type (1);
+
+ for (new_itr = new_trips.begin (); new_itr != new_trips.end (); new_itr++) {
+ select_map.insert (Select_Map_Data (*new_itr, data));
+ }
Write_Selections ();
}
- //---- print output summary ----
+ //---- write the distribution file ----
- if (new_plan_flag) {
- new_plan_file->Print_Summary ();
+ if (time_diff.Output_Flag ()) {
+ time_diff.Write_Distribution ();
}
+ //---- write the trip gap files ----
+
+ if (time_gap.Output_Flag ()) {
+ time_gap.Write_Trip_Gap_File ();
+ }
+
+ //---- write the distribution file ----
+
+ if (cost_diff.Output_Flag ()) {
+ cost_diff.Write_Distribution ();
+ }
+
+ //---- write the trip gap files ----
+
+ if (cost_gap.Output_Flag ()) {
+ cost_gap.Write_Trip_Gap_File ();
+ }
+
//---- print reports ----
for (i=First_Report (); i != 0; i=Next_Report ()) {
switch (i) {
case TOTAL_TIME: //---- total time distribution ----
-// time_diff.Distribution_Report (TOTAL_TIME, true);
+ time_diff.Distribution_Report (TOTAL_TIME, true);
break;
case PERIOD_TIME: //---- period time distributions ----
-// time_diff.Distribution_Report (PERIOD_TIME, false);
+ time_diff.Distribution_Report (PERIOD_TIME, false);
break;
case TOT_TIME_SUM: //---- total time summary ----
-// time_diff.Total_Summary ();
+ time_diff.Total_Summary ();
break;
case PER_TIME_SUM: //---- period time summaries ----
-// time_diff.Period_Summary (PER_TIME_SUM);
+ time_diff.Period_Summary (PER_TIME_SUM);
break;
case TOTAL_COST: //---- total cost distribution ----
-// cost_diff.Distribution_Report (TOTAL_COST, true);
+ cost_diff.Distribution_Report (TOTAL_COST, true);
break;
case PERIOD_COST: //---- period cost distributions ----
-// cost_diff.Distribution_Report (PERIOD_COST, false);
+ cost_diff.Distribution_Report (PERIOD_COST, false);
break;
case TOT_COST_SUM: //---- total cost summary ----
-// cost_diff.Total_Summary ();
+ cost_diff.Total_Summary ();
break;
case PER_COST_SUM: //---- period cost summaries ----
-// cost_diff.Period_Summary (PER_COST_SUM);
+ cost_diff.Period_Summary (PER_COST_SUM);
break;
case TRP_TIME_GAP: //---- trip time gap ----
-// time_gap.Trip_Gap_Report (TRP_TIME_GAP);
+ time_gap.Trip_Gap_Report (TRP_TIME_GAP);
break;
case TRP_COST_GAP: //---- trip cost gap ----
-// cost_gap.Trip_Gap_Report (TRP_COST_GAP);
+ cost_gap.Trip_Gap_Report (TRP_COST_GAP);
default:
break;
}
@@ -132,32 +183,32 @@
{
switch (Header_Number ()) {
case TOTAL_TIME: //---- total time distribution ----
-// time_diff.Distribution_Header (true);
+ time_diff.Distribution_Header (true);
break;
case PERIOD_TIME: //---- period time distributions ----
-// time_diff.Distribution_Header (false);
+ time_diff.Distribution_Header (false);
break;
case TOT_TIME_SUM: //---- total time summary ----
break;
case PER_TIME_SUM: //---- period time summary ----
-// time_diff.Period_Header ();
+ time_diff.Period_Header ();
break;
case TOTAL_COST: //---- total cost distribution ----
-// cost_diff.Distribution_Header (true);
+ cost_diff.Distribution_Header (true);
break;
case PERIOD_COST: //---- period cost distributions ----
-// cost_diff.Distribution_Header (false);
+ cost_diff.Distribution_Header (false);
break;
case TOT_COST_SUM: //---- total cost summary ----
break;
case PER_COST_SUM: //---- period cost summary ----
-// cost_diff.Period_Header ();
+ cost_diff.Period_Header ();
break;
case TRP_TIME_GAP: //---- trip time gap ----
-// time_gap.Trip_Gap_Header ();
+ time_gap.Trip_Gap_Header ();
break;
case TRP_COST_GAP: //---- trip cost gap ----
-// cost_gap.Trip_Gap_Header ();
+ cost_gap.Trip_Gap_Header ();
default:
break;
}
Modified: version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -11,7 +11,7 @@
PlanCompare::PlanCompare (void) : Converge_Service ()
{
Program ("PlanCompare");
- Version (0);
+ Version (1);
Title ("Travel Plan Comparison Utility");
System_File_Type required_files [] = {
@@ -18,8 +18,11 @@
PLAN, END_FILE
};
System_File_Type optional_files [] = {
- SELECTION, NEW_SELECTION, NEW_PLAN, END_FILE
+ SELECTION, NEW_SELECTION, NEW_PLAN_SKIM, END_FILE
};
+ int data_service_keys [] = {
+ SUMMARY_TIME_RANGES, SUMMARY_TIME_INCREMENT, PERIOD_CONTROL_POINT, 0
+ };
int select_service_keys [] = {
SELECT_HOUSEHOLDS, SELECT_MODES, SELECT_PURPOSES, SELECT_START_TIMES, SELECT_END_TIMES,
SELECT_ORIGINS, SELECT_DESTINATIONS, SELECT_VEHICLE_TYPES, SELECT_TRAVELER_TYPES,
@@ -32,22 +35,30 @@
PERCENT_TIME_DIFFERENCE, MINIMUM_TIME_DIFFERENCE, MAXIMUM_TIME_DIFFERENCE,
PERCENT_COST_DIFFERENCE, MINIMUM_COST_DIFFERENCE, MAXIMUM_COST_DIFFERENCE,
MINIMUM_PATH_TIME_RATIO, MAXIMUM_PATH_TIME_RATIO, MINIMUM_PENALTY_RATIO, MAXIMUM_PENALTY_RATIO,
-
- NEW_LINK_CONVERGENCE_FILE, NEW_LINK_CONVERGENCE_FORMAT, NEW_TRIP_CONVERGENCE_FILE, NEW_TRIP_CONVERGENCE_FORMAT,
- NEW_TOLL_CONVERGENCE_FILE, NEW_TOLL_CONVERGENCE_FORMAT, NEW_TRANSIT_CONVERGENCE_FILE, NEW_TRANSIT_CONVERGENCE_FORMAT,
- NEW_PARKING_CONVERGENCE_FILE, NEW_PARKING_CONVERGENCE_FORMAT, NEW_RATIO_CONVERGENCE_FILE, NEW_RATIO_CONVERGENCE_FORMAT,
0
};
Control_Key keys [] = { //--- code, key, level, status, type, default, range, help ----
{ COMPARE_PLAN_FILE, "COMPARE_PLAN_FILE", LEVEL0, REQ_KEY, IN_KEY, "", FILE_RANGE, NO_HELP },
{ COMPARE_PLAN_FORMAT, "COMPARE_PLAN_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
- { COMPARE_GENERALIZED_COSTS, "COMPARE_GENERALIZED_COSTS", LEVEL0, OPT_KEY, BOOL_KEY, "FALSE", BOOL_RANGE, NO_HELP },
- { SELECTION_METHOD, "SELECTION_METHOD", LEVEL0, OPT_KEY, TEXT_KEY, "RANDOM", SELECT_METHOD_RANGE, NO_HELP },
- { NEW_TRIP_MATCH_FILE, "NEW_TRIP_MATCH_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
- { NEW_TRIP_MATCH_FORMAT, "NEW_TRIP_MATCH_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
+ { MINIMUM_PATH_DIFFERENCES, "MINIMUM_PATH_DIFFERENCES", LEVEL0, OPT_KEY, INT_KEY, "0", "0..2000", NO_HELP },
+ //{ SELECTION_METHOD, "SELECTION_METHOD", LEVEL0, OPT_KEY, TEXT_KEY, "RANDOM", SELECT_METHOD_RANGE, NO_HELP },
+ { NEW_DIFFERENCE_TYPES_FILE, "NEW_DIFFERENCE_TYPES_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_DIFFERENCE_TYPES_FORMAT, "NEW_DIFFERENCE_TYPES_FORMAT", LEVEL0, OPT_KEY, TEXT_KEY, "TAB_DELIMITED", FORMAT_RANGE, FORMAT_HELP },
+ { TIME_DISTRIBUTION_MINIMUM, "TIME_DISTRIBUTION_MINIMUM", LEVEL0, OPT_KEY, TIME_KEY, "-60 minutes", "-360..0", NO_HELP },
+ { TIME_DISTRIBUTION_COUNT, "TIME_DISTRIBUTION_COUNT", LEVEL0, OPT_KEY, INT_KEY, "151", "50..500", NO_HELP },
+ { TIME_DISTRIBUTION_INCREMENT, "TIME_DISTRIBUTION_INCREMENT", LEVEL0, OPT_KEY, TIME_KEY, "1 minute", "1..60 minutes", NO_HELP },
+ { COST_DISTRIBUTION_MINIMUM, "COST_DISTRIBUTION_MINIMUM", LEVEL0, OPT_KEY, INT_KEY, "-2000 cents", "-10000..1000 cents", NO_HELP },
+ { COST_DISTRIBUTION_COUNT, "COST_DISTRIBUTION_COUNT", LEVEL0, OPT_KEY, INT_KEY, "151", "50..500", NO_HELP },
+ { COST_DISTRIBUTION_INCREMENT, "COST_DISTRIBUTION_INCREMENT", LEVEL0, OPT_KEY, INT_KEY, "500 cents", "100..5000 cents", NO_HELP },
+ { GENERALIZED_COST_IMPEDANCE, "GENERALIZED_COST_IMPEDANCE", LEVEL0, OPT_KEY, LIST_KEY, "1.0 impedance/cent", "0.1..1000.0", NO_HELP },
+ { NEW_TIME_DISTRIBUTION_FILE, "NEW_TIME_DISTRIBUTION_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_TRIP_TIME_GAP_FILE, "NEW_TRIP_TIME_GAP_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_COST_DISTRIBUTION_FILE, "NEW_COST_DISTRIBUTION_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
+ { NEW_TRIP_COST_GAP_FILE, "NEW_TRIP_COST_GAP_FILE", LEVEL0, OPT_KEY, OUT_KEY, "", FILE_RANGE, NO_HELP },
END_CONTROL
};
const char *reports [] = {
+ "PLAN_DIFFERENCE_TYPES",
"TOTAL_TIME_DISTRIBUTION",
"PERIOD_TIME_DISTRIBUTIONS",
"TOTAL_TIME_SUMMARY",
@@ -63,19 +74,18 @@
Required_System_Files (required_files);
Optional_System_Files (optional_files);
+ Data_Service_Keys (data_service_keys);
Select_Service_Keys (select_service_keys);
Converge_Service_Keys (converge_service_keys);
Key_List (keys);
Report_List (reports);
-// Report_List (converge_reports);
- new_plan_flag = new_select_flag = false;
-
- select_flag = cost_flag = time_sum_flag = cost_sum_flag = time_gap_flag = cost_gap_flag = merge_flag = false;
- time_sort = match_flag = false;
+ new_select_flag = false;
+ select_flag = time_sum_flag = cost_sum_flag = time_gap_flag = cost_gap_flag = false;
+ match_flag = diff_report = diff_file_flag = false;
method = RANDOM_METHOD;
- num_trips = num_select = 0;
+ num_trips = num_select = min_path_legs = 0;
plan_processing = 0;
Modified: version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp 2018-01-30 21:23:31 UTC (rev 1702)
@@ -8,7 +8,11 @@
#include "APIDefs.hpp"
#include "Converge_Service.hpp"
#include "Bounded_Queue.hpp"
+#include "Difference_Data.hpp"
+#include "Trip_Gap_Data.hpp"
+#define NUM_DIFFS 18
+
//---------------------------------------------------------
// PlanCompare - execution class definition
//---------------------------------------------------------
@@ -24,31 +28,45 @@
protected:
enum PlanCompare_Keys {
- COMPARE_PLAN_FILE = 1, COMPARE_PLAN_FORMAT, COMPARE_GENERALIZED_COSTS, SELECTION_METHOD,
- NEW_TRIP_MATCH_FILE, NEW_TRIP_MATCH_FORMAT
+ COMPARE_PLAN_FILE = 1, COMPARE_PLAN_FORMAT, MINIMUM_PATH_DIFFERENCES, // SELECTION_METHOD,
+ NEW_DIFFERENCE_TYPES_FILE, NEW_DIFFERENCE_TYPES_FORMAT,
+ TIME_DISTRIBUTION_MINIMUM, TIME_DISTRIBUTION_COUNT, TIME_DISTRIBUTION_INCREMENT,
+ COST_DISTRIBUTION_MINIMUM, COST_DISTRIBUTION_COUNT, COST_DISTRIBUTION_INCREMENT, GENERALIZED_COST_IMPEDANCE,
+ NEW_TIME_DISTRIBUTION_FILE, NEW_TRIP_TIME_GAP_FILE, NEW_COST_DISTRIBUTION_FILE, NEW_TRIP_COST_GAP_FILE
};
virtual void Program_Control (void);
private:
- enum PlanCompare_Reports { TOTAL_TIME = 1, PERIOD_TIME, TOT_TIME_SUM, PER_TIME_SUM,
+ enum PlanCompare_Reports { DIFF_TYPES = 1, TOTAL_TIME, PERIOD_TIME, TOT_TIME_SUM, PER_TIME_SUM,
TOTAL_COST, PERIOD_COST, TOT_COST_SUM, PER_COST_SUM, TRP_TIME_GAP, TRP_COST_GAP};
-
- Plan_File *plan_file, *new_plan_file;
+
+ Plan_File *plan_file;
+ Plan_Skim_File *new_skim_file;
Plan_File compare_file;
- Selection_File *new_select_file, match_file;
+ Selection_File *new_select_file;
- bool new_plan_flag, new_select_flag;
+ Db_Header difference_file;
- bool select_flag, cost_flag, time_sum_flag, cost_sum_flag, time_gap_flag, cost_gap_flag;
- bool merge_flag, time_sort, match_flag;
- int num_trips, num_compare, method, num_select;
+ bool new_select_flag;
+ bool select_flag, time_sum_flag, cost_sum_flag, time_gap_flag, cost_gap_flag;
+ bool match_flag, diff_report, diff_file_flag;
+ int num_trips, num_compare, method, num_select, min_path_legs;
- Select_Map selected, matched;
+ Select_Map selected;
+
+ Difference_Data time_diff, cost_diff;
+ Trip_Gap_Data time_gap, cost_gap;
+ Str_Map difference_map;
+ Trip_Index_Array new_trips;
+
void Read_Plans (void);
void Compare_Plans (void);
void Write_Match (void);
+ void Difference_Report (Trip_Index &trip_index, String &string);
+ void Difference_File (Trip_Index &trip_index, String &string);
+
bool thread_flag;
Threads threads;
@@ -74,7 +92,11 @@
PlanCompare *exe;
Trip_Index_Array new_trips;
+ Str_Map difference_map;
bool thread_flag;
+
+ Difference_Data *time_diff, *cost_diff;
+ Trip_Gap_Data *time_gap, *cost_gap;
};
Plan_Processing **plan_processing;
Modified: version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj 2018-01-23 18:40:46 UTC (rev 1701)
+++ version7/...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-01-23 18:40:50
|
Revision: 1701
http://sourceforge.net/p/transims/code/1701
Author: davidroden
Date: 2018-01-23 18:40:46 +0000 (Tue, 23 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.1
SysLib
A bug was fixed in the Shape_Bearing method related to the B-node bearing. The Smooth_Data tool control keys were moved into the Flow_Time_Service and embedded as a standard service as an averaging option.
Data_Service
No_Read_Warnings method was added to enable the programmer to disable duplicate record warning message in most standard read methods. This is primarily used for merging networks that typically have a large number of duplicate records. Access to the period toll vector was added to Lane Use Data class to facilitate copies dynamic tolls between networks.
Flow_Time_Service
Smooth_Data logic and control keys SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD, PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG were moved into this service. Smooth_Performance method was moved from PerfPrep to this service.
Converge_Service
Selection types and type counters were added to report the number of each selection type was used to determine the selection score for a given plan. The distribution of selection types is included in the print file for each path building iteration. The SMOOTH option was added to the travel time averaging options. If SMOOTH is selected, the volume data fields in the performance file are smoothed between time periods before the volume-delay equations are applied.
ArcPerf 7.1.8
A bug was fixed in the way directional volume-speed data was aggregated by time.
NetMerge 7.1.1
New Link and Node files and Location merges were made optional. The new No_Read_Warnings method was set to TRUE to avoid reporting thousands of warning messages about duplicate data records. Merge_Lane_Use method was added to exactly match lane-use data between networks and copy the dynamic toll data from the merge file to the output file.
NetPrep 7.1.11
The corrections to the Shape_Bearing method were implemented to improve collapsing nodes to shape points.
PerfPrep 7.1.23
Smooth_Data keys and the Smooth_Performance method were moved into the File_Time_Service class. A Sum_Performance method was added to report the total link travel times, persons, volumes, vehicle miles, vehicle hours, and hours of delay before and after the smoothing process.
PlanCompare 7.1.0
Partially implemented program to identify differences in the skims and paths between two plan files.
Router 7.1.45
The Smoothing option included in Flow_Time_Service was also added. The selection score type logic added to Converge_Service was implemented. The score assigned to plans that are re-skimmed but not re-built was modified to the average of the previous score and the re-skimmed score if the previous score is larger than the re-skimmed score.
SubareaPlans 7.1.10
Logic was added to avoid warning messages and conversion problems for walk legs that travel in the opposite direction of a one-way link.
TripPrep 7.1.11
COMPARE_TRIP_FILE/FORMAT keys were added to identify and report the types of differences that are found when comparing two trip files.
Validate 7.1.10
The logic for creating a Volume-Speed Difference file was modified to save difference records when the input volume-speed or volume-speed count record is not zero.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp
version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp
version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters
version7/branches/aecom/Transims70/Include/Converge_Service.hpp
version7/branches/aecom/Transims70/Include/Data_Service.hpp
version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
version7/branches/aecom/Transims70/Include/Smooth_Data.hpp
version7/branches/aecom/Transims70/Include/System_Defines.hpp
version7/branches/aecom/Transims70/NetMerge/Execute.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.cpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.hpp
version7/branches/aecom/Transims70/NetMerge/NetMerge.vcxproj
version7/branches/aecom/Transims70/NetMerge/NetMerge.vcxproj.filters
version7/branches/aecom/Transims70/NetPrep/Input_Links.cpp
version7/branches/aecom/Transims70/NetPrep/NetPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/Control.cpp
version7/branches/aecom/Transims70/PerfPrep/Execute.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.cpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.hpp
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj
version7/branches/aecom/Transims70/PerfPrep/PerfPrep.vcxproj.filters
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Get_Trip_Data.cpp
version7/branches/aecom/Transims70/Router_Service/Path_Builder.hpp
version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp
version7/branches/aecom/Transims70/Router_Service/Reskim_Plans.cpp
version7/branches/aecom/Transims70/Router_Service/Save_Results.cpp
version7/branches/aecom/Transims70/Router_Service/Trip_Loop.cpp
version7/branches/aecom/Transims70/Router_Service/Update_Data.cpp
version7/branches/aecom/Transims70/SubareaPlans/Convert_Plan.cpp
version7/branches/aecom/Transims70/SubareaPlans/SubareaPlans.cpp
version7/branches/aecom/Transims70/SubareaPlans/Transit_Plans.cpp
version7/branches/aecom/Transims70/SysLib/Service/Control_Service.cpp
version7/branches/aecom/Transims70/SysLib/Service/Static_Service.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Shape_Tools.cpp
version7/branches/aecom/Transims70/SysLib/Tools/Smooth_Data.cpp
version7/branches/aecom/Transims70/Transims71.sln
version7/branches/aecom/Transims70/TripPrep/Control.cpp
version7/branches/aecom/Transims70/TripPrep/Execute.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.cpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.hpp
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj
version7/branches/aecom/Transims70/TripPrep/TripPrep.vcxproj.filters
version7/branches/aecom/Transims70/Validate/Validate.cpp
version7/branches/aecom/Transims70/Validate/Write_Vol_Spd_Diff.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
version7/branches/aecom/Transims70/PerfPrep/Sum_Performance.cpp
version7/branches/aecom/Transims70/PlanCompare/
version7/branches/aecom/Transims70/PlanCompare/Compare_Plan.cpp
version7/branches/aecom/Transims70/PlanCompare/Compare_Plans.cpp
version7/branches/aecom/Transims70/PlanCompare/Control.cpp
version7/branches/aecom/Transims70/PlanCompare/Execute.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.cpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.hpp
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj
version7/branches/aecom/Transims70/PlanCompare/PlanCompare.vcxproj.filters
version7/branches/aecom/Transims70/PlanCompare/Plan_Processing.cpp
version7/branches/aecom/Transims70/PlanCompare/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanCompare/Write_Match.cpp
version7/branches/aecom/Transims70/TripPrep/Compare_Trips.cpp
Removed Paths:
-------------
version7/branches/aecom/Transims70/PerfPrep/Smooth_Performance.cpp
Modified: version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/ArcPerf/ArcPerf.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -11,7 +11,7 @@
ArcPerf::ArcPerf (void) : Draw_Service ()
{
Program ("ArcPerf");
- Version (7);
+ Version (8);
Title ("ArcView Performance Files");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/ArcPerf/Write_Vol_Spd_Diff.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -59,7 +59,7 @@
start = vol_spd_diff_file.Start ();
end = vol_spd_diff_file.End ();
- if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ())) {
+ if (start < low || end > high || (link > 0 && link != vol_spd_diff_file.Link ()) || (dir >= 0 && dir != vol_spd_diff_file.Dir ())) {
if (found) {
map_itr = link_map.find (link);
@@ -76,7 +76,7 @@
}
link = dir = -1;
found = false;
- continue;
+ if (start < low || end > high) continue;
}
if (link < 0) {
link = vol_spd_diff_file.Link ();
Modified: version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Converge_Check.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -10,7 +10,7 @@
bool Converge_Service::Converge_Check (void)
{
- int num;
+ int i, num, total_types;
double gap, std_dev;
bool converge_flag;
@@ -29,6 +29,26 @@
if (!min_vht_flag) {
Write (1, "Build Selection Total = ") << potential;
if (num > 0) Write (0, String (" (%.1lf%%)") % (potential * 100.0 / num) % FINISH);
+
+ total_types = 0;
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ total_types += potential_score_types [i];
+ }
+ if (total_types > 0) {
+ Print (1, "Selection Profile:");
+
+ string labels [MAX_SELECTION_TYPE] = {"", "Path Building Problems", "Parking Capacity Problems",
+ "Transit Capacity Problems", "Travel Time Ratios", "Path Penalty Ratios", "Travel Time Differences",
+ "Impedance Differences", "Selection Score Differences", "Re-Build Selection Score" };
+
+ for (i = 1; i < MAX_SELECTION_TYPE; i++) {
+ if (potential_score_types [i] > 0) {
+ Print (1, String ("\t%-28.28s= %8d (%.1lf%%)") % labels [i] % potential_score_types [i] %
+ (potential_score_types [i] * 100.0 / total_types) % FINISH);
+ }
+ }
+ }
}
Write (1, "Number of Paths Built = ") << num_build;
if (num > 0) Write (0, String (" (%.1lf%%)") % (num_build * 100.0 / num) % FINISH);
Modified: version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Converge_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,6 +37,8 @@
num_travelers = 2;
num_veh_cells = 1;
+ memset (select_score_types, '\0', sizeof (select_score_types));
+
total_records = num_selected = select_records = 0;
select_weight = 0;
num_time_ratio = 0;
@@ -180,7 +182,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,
- CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, 0
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
+ PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG, 0
};
Flow_Time_Service_Keys (flow_time_service_keys);
Modified: version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -8,7 +8,7 @@
// Select_Plan
//---------------------------------------------------------
-int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan)
+int Converge_Service::Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type)
{
Dtime time1, time2, time_diff, tod, duration;
int cost1, cost2, cost_diff, score, ratio;
@@ -15,11 +15,17 @@
double prob;
score = 100;
+ type = NO_SELECT_TYPE;
if (!new_plan.Path_Problem ()) {
if (new_plan.Problem () == PARK_CAP_PROBLEM || new_plan.Problem () == BOARDING_PROBLEM) {
score = step_itr->min_select_score;
+ if (new_plan.Problem () == PARK_CAP_PROBLEM) {
+ type = PARKING_PROBLEM_TYPE;
+ } else {
+ type = BOARDING_PROBLEM_TYPE;
+ }
} else {
score = 0;
}
@@ -31,9 +37,13 @@
if (ratio > step_itr->max_time_ratio) {
score = 100;
+ type = TIME_RATIO_TYPE;
} else if (ratio >= step_itr->min_time_ratio) {
ratio = (ratio - step_itr->min_time_ratio) * 100 / step_itr->max_min_time_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TIME_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -44,9 +54,13 @@
if (ratio > step_itr->max_penalty_ratio) {
score = 100;
+ type = PENALTY_RATIO_TYPE;
} else if (ratio >= step_itr->min_penalty_ratio) {
ratio = (ratio - step_itr->min_penalty_ratio) * 100 / step_itr->max_min_penalty_ratio;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = PENALTY_RATIO_TYPE;
+ score = ratio;
+ }
}
}
@@ -64,6 +78,7 @@
if (time_diff > step_itr->max_time_diff) {
score = 100;
+ type = TRAVEL_TIME_TYPE;
} else if (time_diff >= step_itr->min_time_diff && time2 > 0) {
prob = (double) time_diff / time2;
if (prob >= step_itr->percent_time_diff) {
@@ -70,9 +85,13 @@
if (step_itr->max_min_time_diff > 1) {
time_diff = time_diff - step_itr->min_time_diff;
ratio = 100 * time_diff / step_itr->max_min_time_diff;
- if (ratio > score) score = ratio;
+ if (ratio > score) {
+ type = TRAVEL_TIME_TYPE;
+ score = ratio;
+ }
} else {
score = 100;
+ type = TRAVEL_TIME_TYPE;
}
}
}
@@ -88,6 +107,7 @@
if (cost_diff > step_itr->max_cost_diff) {
score = 100;
+ type = IMPEDANCE_TYPE;
} else if (cost_diff >= step_itr->min_cost_diff && cost2 > 0) {
prob = (double) cost_diff / cost2;
if (prob >= step_itr->percent_cost_diff) {
@@ -94,9 +114,13 @@
if (step_itr->max_min_cost_diff > 1) {
cost_diff = cost_diff - step_itr->min_cost_diff;
ratio = 100 * cost_diff / step_itr->max_min_cost_diff;
- if (ratio > score) ratio = score;
+ if (ratio > score) {
+ type = IMPEDANCE_TYPE;
+ ratio = score;
+ }
} else {
score = 100;
+ type = IMPEDANCE_TYPE;
}
}
}
@@ -106,10 +130,17 @@
if (score == 0) {
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
- score = MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), score);
- if (score > 100) score = 100;
+ score = MIN (MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), 0), 100);
+
+ if (score >= step_itr->min_select_score) {
+ type = SELECT_DIFFERENCE_TYPE;
+ } else {
+ //score = 0;
+ }
}
}
+ } else {
+ type = PROBLEM_SELECT_TYPE;
}
return (score);
}
Modified: version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Converge_Service/Update_Times.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -15,6 +15,10 @@
update_link_gap = gap_flag;
link_gap_data.Clear ();
+ if (step_itr->time_averaging == SMOOTH_AVERAGING) {
+ Smooth_Performance ();
+ }
+
Flow_Time_Service::Update_Travel_Times (step_itr->time_averaging, iteration, first_time);
if (save_link_gap && gap_flag) {
Modified: version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Data_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -23,6 +23,7 @@
Transit_Veh_Flag (false);
Transit_Connections (false);
No_Route_Warnings (false);
+ No_Read_Warnings (false);
Person_Map_Flag (false);
Update_Bearings (false);
Bearing_Warnings (false);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Access_Links.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -30,7 +30,7 @@
map_stat = access_map.insert (Int_Map_Data (access_rec.Link (), (int) access_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Access Link Number = ") << access_rec.Link ();
continue;
} else {
access_array.push_back (access_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Connections.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -48,7 +48,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
out = link_ptr->Link ();
- Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Link Connection = %d to %d") % in % out);
continue;
} else {
connect_array.push_back (connect_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Detectors.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -32,7 +32,7 @@
map_stat = detector_map.insert (Int_Map_Data (detector_rec.Detector (), (int) detector_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Detector Number = ") << detector_rec.Detector ();
continue;
} else {
detector_array.push_back (detector_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Events.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = event_map.insert (Event_Map_Data (event_index, (int) event_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Event Record = %d-%d-%d-%d-%d") %
event_index.Household () % event_index.Person () % event_index.Tour () %
event_index.Trip () % event_index.Event ());
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Households.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -49,7 +49,7 @@
map_stat = hhold_map.insert (Int_Map_Data (household_rec.Household (), index));
if (!map_stat.second) {
- Warning ("Duplicate Household Number = ") << household_rec.Household ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Household Number = ") << household_rec.Household ();
} else {
hhold_array.push_back (household_rec);
count += (int) household_rec.size ();
@@ -64,7 +64,7 @@
person_stat = person_map.insert (Person_Map_Data (person_index, index));
if (!person_stat.second) {
- Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Person Number = ") << person_index.Household () << "." << person_index.Person ();
}
}
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lane_Uses.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -167,7 +167,7 @@
} else if (lane_type [lane] < 0 && group == -1) {
ln = Make_Lane_Range (&(*dir_itr), lane, lane);
- Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Prohibition on Link %d Lane %d at %s-%s") % link_ptr->Link () % ln % period_itr->Start ().Time_String (HOUR_CLOCK) % period_itr->End ().Time_String (HOUR_CLOCK));
}
lane_type [lane] = group;
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Lines.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = line_map.insert (Int_Map_Data (line_rec.Route (), (int) line_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << line_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << line_rec.Route ();
} else {
line_array.push_back (line_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Links.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -51,7 +51,7 @@
map_stat = link_map.insert (Int_Map_Data (link_rec.Link (), (int) link_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << link_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << link_rec.Link ();
continue;
} else {
@@ -81,7 +81,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), index));
if (!map_stat.second) {
- Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Shape Link = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
link_rec.Shape (index);
@@ -99,7 +99,7 @@
map_stat = dir_map.insert (Int_Map_Data (ab_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ab_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ab_rec);
@@ -110,7 +110,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (anode, bnode), index));
if (!ab_stat.second && !exe->Default_Link_Data ()) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % anode % bnode);
}
}
}
@@ -120,7 +120,7 @@
map_stat = dir_map.insert (Int_Map_Data (ba_rec.Link_Dir (), index));
if (!map_stat.second) {
- Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Direction Number = ") << ba_rec.Link_Dir ();
continue;
} else {
dir_array.push_back (ba_rec);
@@ -131,7 +131,7 @@
ab_stat = ab_map.insert (Int2_Map_Data (Int2_Key (bnode, anode), index));
if (!ab_stat.second) {
- Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Anode-Bnode Key = %d-%d") % bnode % anode);
}
}
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Locations.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -32,7 +32,7 @@
map_stat = location_map.insert (Int_Map_Data (location_rec.Location (), (int) location_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Location Number = ") << location_rec.Location ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Location Number = ") << location_rec.Location ();
continue;
} else {
if (!file.Setback_Flag () && location_rec.Setback () == 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Nodes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,7 +37,7 @@
map_stat = node_map.insert (Int_Map_Data (node_rec.Node (), (int) node_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Node Number = ") << node_rec.Node ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Node Number = ") << node_rec.Node ();
continue;
} else {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Parking_Lots.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = parking_map.insert (Int_Map_Data (parking_rec.Parking (), (int) parking_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Parking Number = ") << parking_rec.Parking ();
} else {
parking_array.push_back (parking_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -100,7 +100,7 @@
Movement_Itr move_itr = phasing_ptr->begin ();
phasing_itr->push_back (*move_itr);
} else {
- Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Phasing Plan %d-%d") % phasing_ptr->Phasing () % phasing_ptr->Phase ());
}
keep = false;
break;
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Plan_Skims.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, (int) plan_skim_array.size ()));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Skim Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
plan_skim_array.push_back (plan_skim_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Plans.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -109,7 +109,7 @@
trip_stat = plan_trip_map.insert (Trip_Map_Data (trip_index, index));
if (!trip_stat.second) {
- Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
keep_flag = false;
}
@@ -120,7 +120,7 @@
time_stat = plan_time_map.insert (Time_Map_Data (time_index, index));
if (!time_stat.second) {
- Warning (String ("Duplicate Plan Index = %s-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Plan Index = %s-%d-%d") %
time_index.Start ().Time_String () %
time_index.Household () % time_index.Person ());
keep_flag = false;
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Route_Nodes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -46,7 +46,7 @@
map_stat = route_map.insert (Int_Map_Data (route_rec.Route (), (int) route_nodes_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Route Number = ") << route_rec.Route ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Route Number = ") << route_rec.Route ();
} else {
route_nodes_array.push_back (route_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Selections.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -38,7 +38,7 @@
map_stat = select_map.insert (Select_Map_Data (trip_index, select_data));
if (!map_stat.second) {
- Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Selection Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
if (selection_rec.Household () > select_map.Max_Household ()) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Shapes.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -44,7 +44,7 @@
map_stat = shape_map.insert (Int_Map_Data (shape_rec.Link (), (int) shape_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Link Number = ") << shape_rec.Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Link Number = ") << shape_rec.Link ();
} else {
shape_array.push_back (shape_rec);
}
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Signals.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -86,7 +86,7 @@
timing40_stat = timing40_map.insert (Timing40_Map_Data (time_itr->Timing (), timing40_rec));
if (!timing40_stat.second && timing40_stat.first->second.Signal () != index) {
- Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Timing Number = ") << time_itr->Timing ();
continue;
}
time_itr->Timing (num);
@@ -99,7 +99,7 @@
}
}
if (!map_stat.second) {
- Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Signal Number = ") << signal_rec.Signal ();
} else {
//---- set the node controls ----
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Signs.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -34,7 +34,7 @@
link_ptr = &link_array [dir_ptr->Link ()];
if (dir_ptr->Sign () > 0) {
- Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Sign Record on Link ") << link_ptr->Link ();
continue;
}
if (dir_ptr->Dir () == 0) {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Stops.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -30,7 +30,7 @@
map_stat = stop_map.insert (Int_Map_Data (stop_rec.Stop (), (int) stop_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Stop Number = ") << stop_rec.Stop ();
continue;
} else {
stop_array.push_back (stop_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Travelers.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = traveler_map.insert (Traveler_Map_Data (traveler_index, (int) traveler_array.size ()));
if (!map_stat.second) {
- Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Traveler Record = %d-%d-%s") %
traveler_index.Household () % traveler_index.Person () % traveler_index.Time ().Time_String ());
continue;
} else {
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Trips.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -65,7 +65,7 @@
map_stat = trip_map.insert (Trip_Map_Data (trip_index, index));
if (!map_stat.second) {
- Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
+ if (!No_Read_Warnings ()) Warning (String ("Duplicate Trip Record = %d-%d-%d-%d") %
trip_index.Household () % trip_index.Person () % trip_index.Tour () % trip_index.Trip ());
} else {
trip_array.push_back (trip_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Veh_Types.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -33,7 +33,7 @@
map_stat = veh_type_map.insert (Int_Map_Data (veh_type_rec.Type (), (int) veh_type_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Vehicle Type Number = ") << veh_type_rec.Type ();
continue;
} else {
veh_type_array.push_back (veh_type_rec);
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Volume_Speeds.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -109,7 +109,6 @@
}
}
}
-
if (file.Lane_Use_Flag () && dir_ptr->Use_Index () > 0) {
data_ptr = link_period.Period_Ptr (i)->Data_Ptr (dir_ptr->Use_Index ());
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Zones.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -29,7 +29,7 @@
map_stat = zone_map.insert (Int_Map_Data (zone_rec.Zone (), (int) zone_array.size ()));
if (!map_stat.second) {
- Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
+ if (!No_Read_Warnings ()) Warning ("Duplicate Zone Number = ") << zone_rec.Zone ();
continue;
} else {
zone_array.push_back (zone_rec);
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Control.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -127,5 +127,36 @@
}
}
}
+
+ //---- smoothing keys ----
+
+ if (Check_Control_Key (SMOOTH_GROUP_SIZE)) {
+
+ //---- read the number smooth records ----
+
+ int size = Get_Control_Integer (SMOOTH_GROUP_SIZE);
+
+ //---- read the percent distributed forward ----
+
+ double forward = Get_Control_Double (PERCENT_MOVED_FORWARD);
+
+ //---- read the percent distributed backwarde ----
+
+ double backward = Get_Control_Double (PERCENT_MOVED_BACKWARD);
+
+ //---- number of iterations ----
+
+ int niter = Get_Control_Integer (SMOOTHING_ITERATIONS);
+
+ //---- read the circular smoothing flag ----
+
+ bool loop_flag = Get_Control_Flag (CIRCULAR_GROUP_FLAG);
+
+ //---- initialize the smooth data ----
+
+ smooth_data.Setup (time_periods.Num_Periods (), niter, loop_flag, size, forward, backward);
+
+ if (!smooth_data.Status ()) Error ("Smooth Parameters are Illogical");
+ }
}
}
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -37,6 +37,11 @@
{ EQUATION_PARAMETERS, "EQUATION_PARAMETERS", LEVEL1, OPT_KEY, LIST_KEY, "BPR, 0.15, 4.0, 0.75" , EQUATION_RANGE, NO_HELP },
{ 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},
+ { SMOOTH_GROUP_SIZE, "SMOOTH_GROUP_SIZE", LEVEL0, OPT_KEY, INT_KEY, "3", "0, >= 3", NO_HELP},
+ { PERCENT_MOVED_FORWARD, "PERCENT_MOVED_FORWARD", LEVEL0, OPT_KEY, FLOAT_KEY, "20", "> 0.0", NO_HELP},
+ { PERCENT_MOVED_BACKWARD, "PERCENT_MOVED_BACKWARD", LEVEL0, OPT_KEY, FLOAT_KEY, "20", "> 0.0", NO_HELP},
+ { SMOOTHING_ITERATIONS, "SMOOTHING_ITERATIONS", LEVEL0, OPT_KEY, INT_KEY, "3", "> 0", NO_HELP},
+ { CIRCULAR_GROUP_FLAG, "CIRCULAR_GROUP_FLAG", LEVEL0, OPT_KEY, BOOL_KEY, "TRUE", BOOL_RANGE, NO_HELP},
END_CONTROL
};
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj 2018-01-23 18:40:46 UTC (rev 1701)
@@ -22,6 +22,7 @@
<ClCompile Include="Control.cpp" />
<ClCompile Include="Execute.cpp" />
<ClCompile Include="Flow_Time_Service.cpp" />
+ <ClCompile Include="Smooth_Performance.cpp" />
<ClCompile Include="Update_Times.cpp" />
</ItemGroup>
<ItemGroup>
Modified: version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Flow_Time_Service.vcxproj.filters 2018-01-23 18:40:46 UTC (rev 1701)
@@ -23,6 +23,9 @@
<ClCompile Include="Update_Times.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Smooth_Performance.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\Include\Flow_Time_Service.hpp">
Added: version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp
===================================================================
--- version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp (rev 0)
+++ version7/branches/aecom/Transims70/Flow_Time_Service/Smooth_Performance.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -0,0 +1,160 @@
+//*********************************************************
+// Smooth_Performance.cpp - smooth the performance data
+//*********************************************************
+
+#include "Flow_Time_Service.hpp"
+
+//---------------------------------------------------------
+// Smooth_Performance
+//---------------------------------------------------------
+
+void Flow_Time_Service::Smooth_Performance (bool time_flag)
+{
+ int index, period, num_periods;
+ double value, length, total, volume;
+
+ Perf_Itr perf_itr;
+ Perf_Data *perf_ptr;
+ Perf_Period_Itr period_itr;
+ Perf_Period *period_ptr;
+ Dir_Data *dir_ptr;
+ Link_Data *link_ptr;
+
+ num_periods = (int) perf_period_array.size ();
+ if (num_periods < 3) return;
+
+ //---- process each link direction ----
+
+ period_itr = perf_period_array.begin ();
+
+ for (index = 0, perf_itr = period_itr->begin (); perf_itr != period_itr->end (); perf_itr++, index++) {
+
+ if (index < (int) dir_array.size ()) {
+ dir_ptr = &dir_array [index];
+ link_ptr = &link_array [dir_ptr->Link ()];
+ length = link_ptr->Length ();
+ } else {
+ length = perf_itr->Time0 () * (Metric_Flag () ? 27.78 : 44.0); // 30 mph
+ }
+
+ //---- smooth the volume ----
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_itr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_itr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_itr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_itr->Veh_Dist () / length;
+ break;
+ }
+ total = volume;
+
+ smooth_data.Input (0, volume);
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_ptr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_ptr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_ptr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_ptr->Veh_Dist () / length;
+ break;
+ }
+ smooth_data.Input (period, volume);
+ }
+ smooth_data.Smooth ();
+
+ if (total > 0) {
+ perf_itr->Factor_Flows (smooth_data.Output (0) / total);
+ } else {
+ value = smooth_data.Output (0);
+
+ if (value > 0) {
+ perf_itr->Volume (value);
+ perf_itr->Persons (value);
+ perf_itr->SOV (value);
+ perf_itr->Enter (value);
+ perf_itr->Exit (value);
+ perf_itr->Veh_Dist (value * length);
+ perf_itr->Veh_Time (value * perf_itr->Time0 ());
+ }
+ }
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ switch (Link_Flow_Type ()) {
+ default:
+ case VOLUME_DATA:
+ volume = perf_ptr->Volume ();
+ break;
+ case ENTER_DATA:
+ volume = perf_ptr->Enter ();
+ break;
+ case EXIT_DATA:
+ volume = perf_ptr->Exit ();
+ break;
+ case FLOW_DATA:
+ volume = perf_ptr->Veh_Dist () / length;
+ break;
+ }
+ if (volume > 0) {
+ perf_ptr->Factor_Flows (smooth_data.Output (period) / volume);
+ } else {
+ value = smooth_data.Output (period);
+
+ if (value > 0) {
+ perf_ptr->Volume (value);
+ perf_ptr->Persons (value);
+ perf_ptr->SOV (value);
+ perf_ptr->Enter (value);
+ perf_ptr->Exit (value);
+ perf_ptr->Veh_Dist (value * length);
+ perf_ptr->Veh_Time (value * perf_ptr->Time0 ());
+ }
+ }
+ }
+
+ if (!time_flag) continue;
+
+ //---- smooth the travel time ----
+
+ smooth_data.Input (0, (double) perf_itr->Time ());
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ smooth_data.Input (period, (double) perf_ptr->Time ());
+ }
+ smooth_data.Smooth ();
+
+ perf_itr->Update_Time (Dtime (smooth_data.Output (0)), (int) length);
+
+ for (period = 1; period < num_periods; period++) {
+ period_ptr = &perf_period_array [period];
+ perf_ptr = period_ptr->Data_Ptr (index);
+
+ perf_ptr->Update_Time (Dtime (smooth_data.Output (period)), (int) length);
+ }
+ }
+}
+
Modified: version7/branches/aecom/Transims70/Include/Converge_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Converge_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Converge_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -61,6 +61,11 @@
virtual bool Get_Plan_Data (Plan_File &file, Plan_Data &data);
virtual bool Get_Location_Data (Location_File &file, Location_Data &data);
+ enum Selection_Types {
+ NO_SELECT_TYPE, PROBLEM_SELECT_TYPE, PARKING_PROBLEM_TYPE, BOARDING_PROBLEM_TYPE, TIME_RATIO_TYPE,
+ PENALTY_RATIO_TYPE, TRAVEL_TIME_TYPE, IMPEDANCE_TYPE, SELECT_DIFFERENCE_TYPE, BUILD_SELECT_TYPE, MAX_SELECTION_TYPE
+ };
+
protected:
enum Converge_Service_Keys {
APPLICATION_METHOD = CONVERGE_SERVICE_OFFSET, PROCESS_ALL_TRIPS,
@@ -199,7 +204,7 @@
double select_weight, sum_time_ratio, sum2_time_ratio, max_time_ratio;
int iteration, iteration_num, max_speed_updates, num_trip_sel, num_trip_rec;
- int num_time_updates, potential;
+ int num_time_updates, potential, potential_score_types [MAX_SELECTION_TYPE], select_score_types [MAX_SELECTION_TYPE];
double min_speed_diff, percent_selected;
@@ -222,7 +227,7 @@
void Step_Output (void);
bool Set_Trip_Data (Trip_Data &trip_rec);
- int Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan);
+ int Selection_Score (Plan_Data &old_plan, Plan_Data &new_plan, int &type);
void Update_Travel_Times (Dtime first_time = 0, bool gap_flag = true);
virtual void Save_Gap_Data (Dtime tod, double old_veh_time, double new_veh_time);
Modified: version7/branches/aecom/Transims70/Include/Data_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Data_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Data_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -196,6 +196,9 @@
bool No_Route_Warnings (void) { return (no_warning_flag); }
void No_Route_Warnings (bool flag) { no_warning_flag = flag; }
+ bool No_Read_Warnings (void) { return (no_read_warning); }
+ void No_Read_Warnings (bool flag) { no_read_warning = flag; }
+
int Congested_Ratio (void) { return (congested_ratio); }
void Congested_Ratio (int value) { congested_ratio = value; }
@@ -488,7 +491,7 @@
bool _convert_flag, ratio_flag, loc_xy_flag, sum_flow_flag, clear_flow_flag, time_table_flag, transit_veh_flag, fare_flag;
bool person_map_flag, lane_use_flows, update_bearings, bearing_warnings, transit_connect_flag, detector_flag, zone_loc_flag;
- bool no_warning_flag;
+ bool no_warning_flag, no_read_warning;
int bearing_offset, num_fare_zone, congested_ratio, maximum_ratio, max_zone, num_lane_flows, toll_function;
Integers perf_veh_type_map;
};
Modified: version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Flow_Time_Service.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -7,6 +7,7 @@
#include "Select_Service.hpp"
#include "Equation.hpp"
+#include "Smooth_Data.hpp"
//---------------------------------------------------------
// Flow_Time_Service - volume delay equation processing
@@ -37,7 +38,8 @@
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,
+ CAPACITY_FACTOR_FUNCTIONS, TRAVELER_TYPE_GROUP, SMOOTH_GROUP_SIZE, PERCENT_MOVED_FORWARD,
+ PERCENT_MOVED_BACKWARD, SMOOTHING_ITERATIONS, CIRCULAR_GROUP_FLAG,
};
void Flow_Time_Service_Keys (int *keys = 0);
@@ -50,6 +52,8 @@
int Apply_Equation (int number, int time0, double volume, int capacity, int length, int lanes) {
return (equation.Apply_Equation (number, time0, volume, capacity, length, lanes));}
+ void Smooth_Performance (bool time_updates = false);
+
void Update_Travel_Times (int time_averaging = NO_AVERAGING, int iteration = 1, Dtime first_time = 0);
virtual void Save_Gap_Data (Dtime tod, double old_veh_time, double new_veh_time)
@@ -56,6 +60,8 @@
{
tod = 0; old_veh_time = new_veh_time = 0.0;
}
+
+ Smooth_Data smooth_data;
private:
Modified: version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Lane_Use_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -136,6 +136,8 @@
void Initialize_Tolls (void);
+ Shorts & Tolls (void) { return (tolls); }
+
void Clear (void)
{
dir_index = next_index = -1, low_lane = high_lane = -1; type = 0; toll = min_rate = max_rate = min_delay = max_delay = speed = capacity = 0;
Modified: version7/branches/aecom/Transims70/Include/Smooth_Data.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Smooth_Data.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/Smooth_Data.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -25,6 +25,8 @@
bool Interpolate (int num_in, double increment, int iterations = 3,
int group_size = 3, double forward = 20.0, double backward = 20.0, bool dup_flag = true);
+ bool Status (void) { return (status); }
+
bool Num_Input (int value);
void Input (int num, double value) { if (Check_In (num)) input [num] = value; };
double Input (int num) { return ((Check_In (num)) ? input [num] : 0); }
@@ -36,18 +38,11 @@
double Output (int num) { return ((Check_Out (num)) ? output [num] : 0.0); }
int Smooth (int num = 0);
-
- void Add_Keys (void);
- bool Read_Control (void);
void Duplicate_Flag (bool flag) { dup_flag = flag; }
void Num_Subdivide (int value) { num_sub = value; }
protected:
- enum SmoothData_Keys {
- SMOOTH_GROUP_SIZE = SMOOTH_DATA_OFFSET, PERCENT_MOVED_FORWARD, PERCENT_MOVED_BACKWARD,
- NUMBER_OF_ITERATIONS, CIRCULAR_GROUP_FLAG,
- };
bool Check_In (int num) { return (num >= 0 && num < num_in); }
bool Check_Out (int num) { return (num >= 0 && num < num_out); }
@@ -56,7 +51,7 @@
private:
int num_in, num_out, niter, size, num_sub;
double increment, forward, backward, weight;
- bool loop_flag, dup_flag, interpolate;
+ bool loop_flag, dup_flag, interpolate, status;
Doubles input, output, current;
};
#endif
Modified: version7/branches/aecom/Transims70/Include/System_Defines.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/Include/System_Defines.hpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -34,8 +34,7 @@
#define PROBLEM_OUTPUT_OFFSET 1400
#define VOLUME_SPEED_OUTPUT_OFFSET 1420
-#define SMOOTH_DATA_OFFSET 1500
-#define DIFFERENCE_DATA_OFFSET 1540
+#define DIFFERENCE_DATA_OFFSET 1500
#define END_CONTROL { 0, "", LEVEL0, OPT_KEY, END_KEY, "", "", NO_HELP }
@@ -185,7 +184,7 @@
#define APPLICATION_RANGE "TRAVEL_PLANS, LINK_FLOWS, DUE_PLANS, DTA_FLOWS"
#define COORD_SYSTEM_RANGE "LATLONG, DEGREES/MILLION_DEGREES or STATEPLANE/UTM, code, FEET/METERS/MILES/KILOMETERS"
#define COORD_ADJUST_RANGE "X Offset, Y Offset, X Factor, Y Factor"
-#define AVERAGING_RANGE "NO, YES, MSA, SKIP"
+#define AVERAGING_RANGE "NO, YES, MSA, SKIP, SMOOTH"
#define AGGREGATION_RANGE "TOTAL, AVERAGE, MINIMUM, MAXIMUM"
enum Execution_Type { //----- execution type ----
@@ -485,7 +484,7 @@
//---- Averaging Type ----
enum Averaging_Type {
- NO_AVERAGING, YES_AVERAGING, MSA_AVERAGING, SKIP_AVERAGING
+ NO_AVERAGING, YES_AVERAGING, MSA_AVERAGING, SKIP_AVERAGING, SMOOTH_AVERAGING
};
//---- Selection Method ----
Modified: version7/branches/aecom/Transims70/NetMerge/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-12 02:58:44 UTC (rev 1700)
+++ version7/branches/aecom/Transims70/NetMerge/Execute.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -17,6 +17,7 @@
//---- read the merge files ----
merge_flag = true;
+ No_Read_Warnings (true);
//---- merge the node files ----
@@ -69,7 +70,7 @@
if (lane_use_flag) {
int num_lane_use = (int) lane_use_array.size ();
- Read_Lane_Uses (lane_use_file);
+ Merge_Lane_Use ();
Print (1, "Number of Merge Lane Use Records = ") << ((int) lane_use_array.size () - num_lane_use);
}
@@ -160,8 +161,8 @@
//----- write the output files ----
- Write_Nodes ();
- Write_Links ();
+ if (System_File_Flag (NEW_NODE)) Write_Nodes ();
+ if (System_File_Flag (NEW_LINK)) Write_Links ();
if (System_File_Flag (NEW_SHAPE)) Write_Shapes ();
if (System_File_Flag (NEW_POCKET)) Write_Pockets ();
if (System_File_Flag (NEW_LANE_USE)) Write_Lane_Uses ();
Added: version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp
===================================================================
--- version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp (rev 0)
+++ version7/branches/aecom/Transims70/NetMerge/Merge_Lane_Use.cpp 2018-01-23 18:40:46 UTC (rev 1701)
@@ -0,0 +1,61 @@
+//*********************************************************
+// Merge_Lane_Use.cpp - merge lane use file
+//*********************************************************
+
+#include "NetMerge.hpp"
+
+//---------------------------------------------------------
+// Initialize_Lane_Uses
+//---------------------------------------------------------
+
+void NetMerge::Merge_Lane_Use (void)
+{
+ int first_index, num;
+
+ Lane_Use_Data lane_use_rec, *lane_use_ptr;
+ Dir_Data *dir_ptr;
+
+ Show_Message (String ("Reading %s -- Record") % lane_use_file.File_Type ());
+ Set_Progress ();
+
+ while (lane_use_file.Read ()) {
+ Show_Progress ();
+
+ lane_use_rec.Clear ();
+
+ if (Get_Lane_Use_Data (lane_use_file, lane_use_rec)) {
+
+ dir_ptr = &dir_array [lane_use_rec.Dir_Index ()];
+
+ first_index = dir_ptr->First_Lane_Use ();
+ if (first_index < 0) continue;
+
+ for (num = first_index; num >= 0; num = lane_use_ptr->Next_Index ()) {
+ lane_use_ptr = &lane_use_array [num];
+
+ if (lane_use_rec.Low_Lane () != lane_use_ptr->Low_Lane ()) continue;
+ if (lane_use_rec.High_Lane () != lane_use_ptr->High_Lane ()) continue;
+ if (lane_use_rec.Type () != lane_use_ptr->Type ()) continue;
+ if (lane_use_rec.Use () != lane_use_ptr->Use ()) continue;
+ if (lane_use_rec.Min_Veh_Type () != lane_use_ptr...
[truncated message content] |
|
From: subversion c. n. <tra...@li...> - 2018-01-12 02:58:46
|
Revision: 1700
http://sourceforge.net/p/transims/code/1700
Author: davidroden
Date: 2018-01-12 02:58:44 +0000 (Fri, 12 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.0 -- from AECOM Branch 1699
Modified Paths:
--------------
version7/trunk/Transims70/GTFSData/GTFSData.vcxproj
version7/trunk/Transims70/PNRSplit/PNRSplit.vcxproj
version7/trunk/Transims70/Transims71.sln
Modified: version7/trunk/Transims70/GTFSData/GTFSData.vcxproj
===================================================================
--- version7/trunk/Transims70/GTFSData/GTFSData.vcxproj 2018-01-12 02:54:29 UTC (rev 1699)
+++ version7/trunk/Transims70/GTFSData/GTFSData.vcxproj 2018-01-12 02:58:44 UTC (rev 1700)
@@ -105,11 +105,17 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <WarningLevel>Level3</WarningLevel>
+ <WarningLevel>Level4</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
Modified: version7/trunk/Transims70/PNRSplit/PNRSplit.vcxproj
===================================================================
--- version7/trunk/Transims70/PNRSplit/PNRSplit.vcxproj 2018-01-12 02:54:29 UTC (rev 1699)
+++ version7/trunk/Transims70/PNRSplit/PNRSplit.vcxproj 2018-01-12 02:58:44 UTC (rev 1700)
@@ -105,11 +105,17 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <WarningLevel>Level3</WarningLevel>
+ <WarningLevel>Level4</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
Modified: version7/trunk/Transims70/Transims71.sln
===================================================================
--- version7/trunk/Transims70/Transims71.sln 2018-01-12 02:54:29 UTC (rev 1699)
+++ version7/trunk/Transims70/Transims71.sln 2018-01-12 02:58:44 UTC (rev 1700)
@@ -178,8 +178,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTFSData", "GTFSData\GTFSData.vcxproj", "{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CAVImpact", "CAVImpact\CAVImpact.vcxproj", "{C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-01-12 02:54:32
|
Revision: 1699
http://sourceforge.net/p/transims/code/1699
Author: davidroden
Date: 2018-01-12 02:54:29 +0000 (Fri, 12 Jan 2018)
Log Message:
-----------
Modified Paths:
--------------
version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj
version7/branches/aecom/Transims70/PNRSplit/PNRSplit.vcxproj
version7/branches/aecom/Transims70/Transims71.sln
Modified: version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj 2018-01-09 20:12:26 UTC (rev 1698)
+++ version7/branches/aecom/Transims70/GTFSData/GTFSData.vcxproj 2018-01-12 02:54:29 UTC (rev 1699)
@@ -105,11 +105,17 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <WarningLevel>Level3</WarningLevel>
+ <WarningLevel>Level4</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
Modified: version7/branches/aecom/Transims70/PNRSplit/PNRSplit.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/PNRSplit/PNRSplit.vcxproj 2018-01-09 20:12:26 UTC (rev 1698)
+++ version7/branches/aecom/Transims70/PNRSplit/PNRSplit.vcxproj 2018-01-12 02:54:29 UTC (rev 1699)
@@ -105,11 +105,17 @@
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
- <WarningLevel>Level3</WarningLevel>
+ <WarningLevel>Level4</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>..\Include</AdditionalIncludeDirectories>
+ <TreatWarningAsError>true</TreatWarningAsError>
+ <MultiProcessorCompilation>true</MultiProcessorCompilation>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <EnableParallelCodeGeneration>true</EnableParallelCodeGeneration>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
Modified: version7/branches/aecom/Transims70/Transims71.sln
===================================================================
--- version7/branches/aecom/Transims70/Transims71.sln 2018-01-09 20:12:26 UTC (rev 1698)
+++ version7/branches/aecom/Transims70/Transims71.sln 2018-01-12 02:54:29 UTC (rev 1699)
@@ -178,8 +178,6 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTFSData", "GTFSData\GTFSData.vcxproj", "{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}"
EndProject
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CAVImpact", "CAVImpact\CAVImpact.vcxproj", "{C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-01-09 20:12:29
|
Revision: 1698
http://sourceforge.net/p/transims/code/1698
Author: davidroden
Date: 2018-01-09 20:12:26 +0000 (Tue, 09 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7 Trunk -- updated from AECOM branch 1696
Modified Paths:
--------------
version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
version7/trunk/Transims70/ArcPlan/Read_Plan.cpp
version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp
version7/trunk/Transims70/Include/Router_Service.hpp
version7/trunk/Transims70/Router/Router.cpp
version7/trunk/Transims70/Router_Service/Path_Builder.cpp
version7/trunk/Transims70/Router_Service/Path_Parameters.hpp
version7/trunk/Transims70/Router_Service/Plan_Build.cpp
version7/trunk/Transims70/Router_Service/Plan_Extend.cpp
version7/trunk/Transims70/Router_Service/Plan_Flow.cpp
version7/trunk/Transims70/Router_Service/Plan_Processing.cpp
version7/trunk/Transims70/Router_Service/Plan_ReRoute.cpp
version7/trunk/Transims70/Router_Service/Plan_Reskim.cpp
version7/trunk/Transims70/Router_Service/Plan_Update.cpp
version7/trunk/Transims70/Router_Service/Set_Method.cpp
version7/trunk/Transims70/Router_Service/Set_Parameters.cpp
version7/trunk/Transims70/Router_Service/Sum_Demand.cpp
version7/trunk/Transims70/Transims71.sln
Modified: version7/trunk/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/ArcPlan/ArcPlan.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (4);
+ Version (5);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/trunk/Transims70/ArcPlan/Read_Plan.cpp
===================================================================
--- version7/trunk/Transims70/ArcPlan/Read_Plan.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/ArcPlan/Read_Plan.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -874,8 +874,10 @@
if (prev_itr->Access_Type () && access_map.size () == 0) {
pt_itr = location_pt.find (plan.Destination ());
- if (pt_itr == location_pt.end ()) goto leg_error;
-
+ if (pt_itr == location_pt.end ()) {
+ Warning (String ("Plan %d-%d-%d-%d Destination was Not Found") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
+ continue;
+ }
arcview_plan.push_back (pt_itr->second);
if (arrow_flag) Add_Arrow (arcview_plan);
@@ -899,9 +901,6 @@
}
num_out++;
}
- continue;
-leg_error:
- Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
//---- summarized path data ----
@@ -914,7 +913,7 @@
dir = leg_itr->Link_Dir ();
int_itr = link_map.find (link);
- if (int_itr == link_map.end ()) goto leg_error2;
+ if (int_itr == link_map.end ()) goto leg_error;
link_ptr = &link_array [int_itr->second];
if (dir) {
@@ -939,7 +938,7 @@
}
} else if ((rider_flag || on_off_flag) && leg_itr->Type () == STOP_ID) {
int_itr = stop_map.find (leg_itr->ID ());
- if (int_itr == stop_map.end ()) goto leg_error2;
+ if (int_itr == stop_map.end ()) goto leg_error;
if (prev_itr->Type () != ROUTE_ID) {
alight_data [int_itr->second]++;
@@ -952,9 +951,6 @@
}
}
prev_itr = leg_itr;
- continue;
-leg_error2:
- Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
}
@@ -963,6 +959,9 @@
if (time_flag || distance_flag) {
Write_Contour (plan);
}
+ continue;
+leg_error:
+ Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
End_Progress ();
Modified: version7/trunk/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Converge_Service/Selection_Score.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -12,7 +12,7 @@
{
Dtime time1, time2, time_diff, tod, duration;
int cost1, cost2, cost_diff, score, ratio;
- double prob, ran;
+ double prob;
score = 100;
@@ -105,7 +105,6 @@
//---- selection difference ----
if (score == 0) {
- ran = random.Probability (new_plan.Household () + iteration);
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
score = MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), score);
if (score > 100) score = 100;
Modified: version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp
===================================================================
--- version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -204,7 +204,7 @@
if (num > 0 && !System_File_Flag (DETECTOR)) {
Detector_Flag (false);
- Warning ("Dectectors Not Provided -- Signals Converted to Fixed Time");
+ Warning ("Detectors Not Provided -- Signals Converted to Fixed Time");
} else {
for (itr = detect.begin (); itr != detect.end (); itr++) {
detector = itr->Integer ();
Modified: version7/trunk/Transims70/Include/Router_Service.hpp
===================================================================
--- version7/trunk/Transims70/Include/Router_Service.hpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Include/Router_Service.hpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -78,8 +78,8 @@
double Skim_Gap (void);
- void Set_Parameters (Path_Parameters ¶m, Trip_Data &trip);
- void Set_Parameters (Path_Parameters ¶m, int traveler_type = 0, int veh_type = -1, int mode = 0, unsigned traveler = 0);
+ void Set_Parameters (Path_Parameters ¶m, Trip_Data &trip, int traveler);
+ void Set_Parameters (Path_Parameters ¶m, int traveler_type = 0, int veh_type = -1, int mode = 0, int traveler = 0);
virtual bool Save_Skims (One_To_Many *ptr) { delete ptr; return (false); }
virtual bool Skim_Check (Plan_Ptr ptr) { return (ptr != 0); }
Modified: version7/trunk/Transims70/Router/Router.cpp
===================================================================
--- version7/trunk/Transims70/Router/Router.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router/Router.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -11,7 +11,7 @@
Router::Router (void) : Router_Service ()
{
Program ("Router");
- Version (42);
+ Version (43);
Title ("Network Path Building");
Control_Key keys [] = { //--- code, key, level, status, type, help ----
Modified: version7/trunk/Transims70/Router_Service/Path_Builder.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Path_Builder.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Path_Builder.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -12,8 +12,9 @@
void Path_Builder::Initialize (int id)
{
_id = id + 1;
- random_select.Seed (rs->Random_Seed () + _id);
+ random_select.Seed (rs->Random_Seed ());
+
perf_period_array_ptr = 0;
turn_period_array_ptr = 0;
Modified: version7/trunk/Transims70/Router_Service/Path_Parameters.hpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Path_Parameters.hpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Path_Parameters.hpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -32,6 +32,7 @@
double random_imped; //---- maximum percent random impedance variance ----
Random random; //---- random number generator ----
+ int traveler_seed; //---- random seed index for a given traveler ----
bool delay_flag; //---- use time period travel times -----
bool turn_delay_flag; //---- use time period turn delays ----
bool flow_flag; //---- save flow data by time period ----
Modified: version7/trunk/Transims70/Router_Service/Plan_Build.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Build.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Build.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -24,8 +24,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = (plan.Constraint () != END_TIME);
time_limit = (forward_flag) ? MAX_INTEGER : 0;
Modified: version7/trunk/Transims70/Router_Service/Plan_Extend.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Extend.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Extend.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -20,8 +20,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = true;
Modified: version7/trunk/Transims70/Router_Service/Plan_Flow.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Flow.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Flow.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -31,7 +31,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
forward_flag = (plan.Constraint () != END_TIME);
group_flag = rs->In_Traveler_Group (plan.Type ());
Modified: version7/trunk/Transims70/Router_Service/Plan_Processing.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Processing.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Processing.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -29,6 +29,8 @@
//---- retrieve the current trip ----
plan_ptr = &rs->plan_array [plan_index];
+
+ rs->Set_Parameters (path_param, *plan_ptr, plan_index);
if (rs->Reskim_Flag ()) {
if (plan_ptr->Path_Problem ()) {
@@ -344,6 +346,7 @@
} else if (parking_lot >= 0 && prev_ptr->Destination () != plan_ptr->Origin ()) {
parking_lot = -1;
}
+ rs->Set_Parameters (path_param, *plan_ptr, trip_itr->second);
goto next;
}
return (true);
Modified: version7/trunk/Transims70/Router_Service/Plan_ReRoute.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_ReRoute.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_ReRoute.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -26,8 +26,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = true;
Modified: version7/trunk/Transims70/Router_Service/Plan_Reskim.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Reskim.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Reskim.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -33,8 +33,6 @@
if (!path_param.transit_penalty && mode == TRANSIT_MODE) return (true);
//---- set the traveler parameters ----
-
- rs->Set_Parameters (path_param, plan);
dir_index = board = route = -1;
local_factor = 1.0;
Modified: version7/trunk/Transims70/Router_Service/Plan_Update.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Plan_Update.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Plan_Update.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -35,8 +35,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
random_flag = (path_param.random_imped > 0);
turn_flag = (path_param.left_imped > 0 || path_param.right_imped > 0 || path_param.uturn_imped > 0);
Modified: version7/trunk/Transims70/Router_Service/Set_Method.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Set_Method.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Set_Method.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -56,7 +56,7 @@
build_flag = (plan_ptr->Select () >= rs->step_itr->min_select_score);
if (build_flag && rs->step_itr->max_percent_flag && rs->percent_selected < 1.0) {
- prob = random_select.Probability ();
+ prob = random_select.Probability (path_param.traveler_seed);
build_flag = (prob <= (rs->percent_selected * plan_ptr->Select ()));
}
if (build_flag) {
Modified: version7/trunk/Transims70/Router_Service/Set_Parameters.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Set_Parameters.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Set_Parameters.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -8,20 +8,23 @@
// Set_Parameters
//---------------------------------------------------------
-void Router_Service::Set_Parameters (Path_Parameters &p, Trip_Data &trip)
+void Router_Service::Set_Parameters (Path_Parameters &p, Trip_Data &trip, int traveler)
{
- unsigned traveler = (unsigned) trip.Household () + trip.Person () + trip.Tour () + trip.Trip ();
-
Set_Parameters (p, trip.Type (), trip.Veh_Type (), trip.Mode (), traveler);
}
-void Router_Service::Set_Parameters (Path_Parameters &p, int traveler_type, int veh_type, int mode, unsigned traveler)
+void Router_Service::Set_Parameters (Path_Parameters &p, int traveler_type, int veh_type, int mode, int traveler)
{
if (traveler_type < 0) return;
memcpy (&p, &path_param, sizeof (path_param));
-
- p.random.Seed ((unsigned) rs->Random_Seed () + traveler);
+
+ p.traveler_seed = rs->Random_Seed () + traveler;
+
+ p.random.Seed (p.traveler_seed);
+
+ p.traveler_seed += rs->iteration_num;
+
p.traveler_type = traveler_type;
if (mode > 0) {
p.mode = (Mode_Type) mode;
Modified: version7/trunk/Transims70/Router_Service/Sum_Demand.cpp
===================================================================
--- version7/trunk/Transims70/Router_Service/Sum_Demand.cpp 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Router_Service/Sum_Demand.cpp 2018-01-09 20:12:26 UTC (rev 1698)
@@ -37,7 +37,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, *plan_ptr);
forward_flag = (plan_ptr->Constraint () != END_TIME);
group_flag = rs->In_Traveler_Group (plan_ptr->Type ());;
Modified: version7/trunk/Transims70/Transims71.sln
===================================================================
--- version7/trunk/Transims70/Transims71.sln 2018-01-09 20:10:19 UTC (rev 1697)
+++ version7/trunk/Transims70/Transims71.sln 2018-01-09 20:12:26 UTC (rev 1698)
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26730.10
+VisualStudioVersion = 15.0.27004.2009
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SysLib", "SysLib\SysLib.vcxproj", "{826501C9-0E87-4E33-B731-16575E7B7069}"
EndProject
@@ -178,6 +178,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTFSData", "GTFSData\GTFSData.vcxproj", "{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CAVImpact", "CAVImpact\CAVImpact.vcxproj", "{C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -722,6 +724,14 @@
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|Win32.Build.0 = Release|Win32
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|x64.ActiveCfg = Release|x64
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|x64.Build.0 = Release|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|Win32.Build.0 = Debug|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|x64.ActiveCfg = Debug|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|x64.Build.0 = Debug|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|Win32.ActiveCfg = Release|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|Win32.Build.0 = Release|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|x64.ActiveCfg = Release|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-01-09 20:10:22
|
Revision: 1697
http://sourceforge.net/p/transims/code/1697
Author: davidroden
Date: 2018-01-09 20:10:19 +0000 (Tue, 09 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.1 -- AECOM Branch 1696
ArcPlan 7.1.5
The warning message logic was reorganized to avoid skipping transit stop processing when plan shapefiles are created.
Router 7.1.43
The random number generator used for selecting plans when the number of eligible plans is greater than the maximum selection percentage was changed for a thread ID offset to a traveler ID and iteration number offset in order to generate the same results when the Router is re-run with the same inputs.
Modified Paths:
--------------
version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
version7/branches/aecom/Transims70/ArcPlan/Read_Plan.cpp
version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
version7/branches/aecom/Transims70/Include/Router_Service.hpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Path_Builder.cpp
version7/branches/aecom/Transims70/Router_Service/Path_Parameters.hpp
version7/branches/aecom/Transims70/Router_Service/Plan_Build.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Extend.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Flow.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_ReRoute.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Reskim.cpp
version7/branches/aecom/Transims70/Router_Service/Plan_Update.cpp
version7/branches/aecom/Transims70/Router_Service/Set_Method.cpp
version7/branches/aecom/Transims70/Router_Service/Set_Parameters.cpp
version7/branches/aecom/Transims70/Router_Service/Sum_Demand.cpp
version7/branches/aecom/Transims70/Transims71.sln
Modified: version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/ArcPlan/ArcPlan.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -11,7 +11,7 @@
ArcPlan::ArcPlan (void) : Draw_Service ()
{
Program ("ArcPlan");
- Version (4);
+ Version (5);
Title ("Plan File Display Utility");
System_File_Type required_files [] = {
Modified: version7/branches/aecom/Transims70/ArcPlan/Read_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/ArcPlan/Read_Plan.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/ArcPlan/Read_Plan.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -874,8 +874,10 @@
if (prev_itr->Access_Type () && access_map.size () == 0) {
pt_itr = location_pt.find (plan.Destination ());
- if (pt_itr == location_pt.end ()) goto leg_error;
-
+ if (pt_itr == location_pt.end ()) {
+ Warning (String ("Plan %d-%d-%d-%d Destination was Not Found") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
+ continue;
+ }
arcview_plan.push_back (pt_itr->second);
if (arrow_flag) Add_Arrow (arcview_plan);
@@ -899,9 +901,6 @@
}
num_out++;
}
- continue;
-leg_error:
- Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
//---- summarized path data ----
@@ -914,7 +913,7 @@
dir = leg_itr->Link_Dir ();
int_itr = link_map.find (link);
- if (int_itr == link_map.end ()) goto leg_error2;
+ if (int_itr == link_map.end ()) goto leg_error;
link_ptr = &link_array [int_itr->second];
if (dir) {
@@ -939,7 +938,7 @@
}
} else if ((rider_flag || on_off_flag) && leg_itr->Type () == STOP_ID) {
int_itr = stop_map.find (leg_itr->ID ());
- if (int_itr == stop_map.end ()) goto leg_error2;
+ if (int_itr == stop_map.end ()) goto leg_error;
if (prev_itr->Type () != ROUTE_ID) {
alight_data [int_itr->second]++;
@@ -952,9 +951,6 @@
}
}
prev_itr = leg_itr;
- continue;
-leg_error2:
- Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
}
@@ -963,6 +959,9 @@
if (time_flag || distance_flag) {
Write_Contour (plan);
}
+ continue;
+leg_error:
+ Warning (String ("Plan %d-%d-%d-%d Legs and Network Incompatibility") % plan.Household () % plan.Person () % plan.Tour () % plan.Trip ());
}
End_Progress ();
Modified: version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp
===================================================================
--- version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Converge_Service/Selection_Score.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -12,7 +12,7 @@
{
Dtime time1, time2, time_diff, tod, duration;
int cost1, cost2, cost_diff, score, ratio;
- double prob, ran;
+ double prob;
score = 100;
@@ -105,7 +105,6 @@
//---- selection difference ----
if (score == 0) {
- ran = random.Probability (new_plan.Household () + iteration);
prob = 1.0 - ((double) new_plan.Impedance () / (new_plan.Impedance () + old_plan.Impedance ()));
score = MAX ((int) (100 * fabs (prob - 0.5) * 2.0 + 0.5), score);
if (score > 100) score = 100;
Modified: version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Data_Service/Read_Phasing_Plans.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -204,7 +204,7 @@
if (num > 0 && !System_File_Flag (DETECTOR)) {
Detector_Flag (false);
- Warning ("Dectectors Not Provided -- Signals Converted to Fixed Time");
+ Warning ("Detectors Not Provided -- Signals Converted to Fixed Time");
} else {
for (itr = detect.begin (); itr != detect.end (); itr++) {
detector = itr->Integer ();
Modified: version7/branches/aecom/Transims70/Include/Router_Service.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Router_Service.hpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Include/Router_Service.hpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -78,8 +78,8 @@
double Skim_Gap (void);
- void Set_Parameters (Path_Parameters ¶m, Trip_Data &trip);
- void Set_Parameters (Path_Parameters ¶m, int traveler_type = 0, int veh_type = -1, int mode = 0, unsigned traveler = 0);
+ void Set_Parameters (Path_Parameters ¶m, Trip_Data &trip, int traveler);
+ void Set_Parameters (Path_Parameters ¶m, int traveler_type = 0, int veh_type = -1, int mode = 0, int traveler = 0);
virtual bool Save_Skims (One_To_Many *ptr) { delete ptr; return (false); }
virtual bool Skim_Check (Plan_Ptr ptr) { return (ptr != 0); }
Modified: version7/branches/aecom/Transims70/Router/Router.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router/Router.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router/Router.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -11,7 +11,7 @@
Router::Router (void) : Router_Service ()
{
Program ("Router");
- Version (42);
+ Version (43);
Title ("Network Path Building");
Control_Key keys [] = { //--- code, key, level, status, type, help ----
Modified: version7/branches/aecom/Transims70/Router_Service/Path_Builder.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Path_Builder.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Path_Builder.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -12,8 +12,9 @@
void Path_Builder::Initialize (int id)
{
_id = id + 1;
- random_select.Seed (rs->Random_Seed () + _id);
+ random_select.Seed (rs->Random_Seed ());
+
perf_period_array_ptr = 0;
turn_period_array_ptr = 0;
Modified: version7/branches/aecom/Transims70/Router_Service/Path_Parameters.hpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Path_Parameters.hpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Path_Parameters.hpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -32,6 +32,7 @@
double random_imped; //---- maximum percent random impedance variance ----
Random random; //---- random number generator ----
+ int traveler_seed; //---- random seed index for a given traveler ----
bool delay_flag; //---- use time period travel times -----
bool turn_delay_flag; //---- use time period turn delays ----
bool flow_flag; //---- save flow data by time period ----
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Build.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Build.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Build.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -24,8 +24,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = (plan.Constraint () != END_TIME);
time_limit = (forward_flag) ? MAX_INTEGER : 0;
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Extend.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Extend.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Extend.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -20,8 +20,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = true;
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Flow.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Flow.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Flow.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -31,7 +31,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
forward_flag = (plan.Constraint () != END_TIME);
group_flag = rs->In_Traveler_Group (plan.Type ());
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Processing.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -29,6 +29,8 @@
//---- retrieve the current trip ----
plan_ptr = &rs->plan_array [plan_index];
+
+ rs->Set_Parameters (path_param, *plan_ptr, plan_index);
if (rs->Reskim_Flag ()) {
if (plan_ptr->Path_Problem ()) {
@@ -320,6 +322,7 @@
} else if (parking_lot >= 0 && prev_ptr->Destination () != plan_ptr->Origin ()) {
parking_lot = -1;
}
+ rs->Set_Parameters (path_param, *plan_ptr, trip_itr->second);
goto next;
}
return (true);
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_ReRoute.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_ReRoute.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_ReRoute.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -26,8 +26,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
parking_duration = plan.Duration ();
forward_flag = true;
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Reskim.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Reskim.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Reskim.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -33,8 +33,6 @@
if (!path_param.transit_penalty && mode == TRANSIT_MODE) return (true);
//---- set the traveler parameters ----
-
- rs->Set_Parameters (path_param, plan);
dir_index = board = route = -1;
local_factor = 1.0;
Modified: version7/branches/aecom/Transims70/Router_Service/Plan_Update.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Plan_Update.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Plan_Update.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -35,8 +35,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, plan);
-
random_flag = (path_param.random_imped > 0);
turn_flag = (path_param.left_imped > 0 || path_param.right_imped > 0 || path_param.uturn_imped > 0);
Modified: version7/branches/aecom/Transims70/Router_Service/Set_Method.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Set_Method.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Set_Method.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -56,7 +56,7 @@
build_flag = (plan_ptr->Select () >= rs->step_itr->min_select_score);
if (build_flag && rs->step_itr->max_percent_flag && rs->percent_selected < 1.0) {
- prob = random_select.Probability ();
+ prob = random_select.Probability (path_param.traveler_seed);
build_flag = (prob <= (rs->percent_selected * plan_ptr->Select ()));
}
Modified: version7/branches/aecom/Transims70/Router_Service/Set_Parameters.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Set_Parameters.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Set_Parameters.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -8,20 +8,23 @@
// Set_Parameters
//---------------------------------------------------------
-void Router_Service::Set_Parameters (Path_Parameters &p, Trip_Data &trip)
+void Router_Service::Set_Parameters (Path_Parameters &p, Trip_Data &trip, int traveler)
{
- unsigned traveler = (unsigned) trip.Household () + trip.Person () + trip.Tour () + trip.Trip ();
-
Set_Parameters (p, trip.Type (), trip.Veh_Type (), trip.Mode (), traveler);
}
-void Router_Service::Set_Parameters (Path_Parameters &p, int traveler_type, int veh_type, int mode, unsigned traveler)
+void Router_Service::Set_Parameters (Path_Parameters &p, int traveler_type, int veh_type, int mode, int traveler)
{
if (traveler_type < 0) return;
memcpy (&p, &path_param, sizeof (path_param));
-
- p.random.Seed ((unsigned) rs->Random_Seed () + traveler);
+
+ p.traveler_seed = rs->Random_Seed () + traveler;
+
+ p.random.Seed (p.traveler_seed);
+
+ p.traveler_seed += rs->iteration_num;
+
p.traveler_type = traveler_type;
if (mode > 0) {
p.mode = (Mode_Type) mode;
Modified: version7/branches/aecom/Transims70/Router_Service/Sum_Demand.cpp
===================================================================
--- version7/branches/aecom/Transims70/Router_Service/Sum_Demand.cpp 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Router_Service/Sum_Demand.cpp 2018-01-09 20:10:19 UTC (rev 1697)
@@ -37,7 +37,6 @@
//---- set the traveler parameters ----
- rs->Set_Parameters (path_param, *plan_ptr);
forward_flag = (plan_ptr->Constraint () != END_TIME);
group_flag = rs->In_Traveler_Group (plan_ptr->Type ());;
Modified: version7/branches/aecom/Transims70/Transims71.sln
===================================================================
--- version7/branches/aecom/Transims70/Transims71.sln 2018-01-02 21:35:01 UTC (rev 1696)
+++ version7/branches/aecom/Transims70/Transims71.sln 2018-01-09 20:10:19 UTC (rev 1697)
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
-VisualStudioVersion = 15.0.26730.10
+VisualStudioVersion = 15.0.27004.2009
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SysLib", "SysLib\SysLib.vcxproj", "{826501C9-0E87-4E33-B731-16575E7B7069}"
EndProject
@@ -178,6 +178,8 @@
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GTFSData", "GTFSData\GTFSData.vcxproj", "{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}"
EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CAVImpact", "CAVImpact\CAVImpact.vcxproj", "{C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@@ -722,6 +724,14 @@
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|Win32.Build.0 = Release|Win32
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|x64.ActiveCfg = Release|x64
{9652EC62-B02D-4C38-AF16-B6DA2E3BAD99}.Release|x64.Build.0 = Release|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|Win32.Build.0 = Debug|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|x64.ActiveCfg = Debug|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Debug|x64.Build.0 = Debug|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|Win32.ActiveCfg = Release|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|Win32.Build.0 = Release|Win32
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|x64.ActiveCfg = Release|x64
+ {C4B94A2D-DF31-4537-A83B-ACFD6940DFF9}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: subversion c. n. <tra...@li...> - 2018-01-02 21:35:04
|
Revision: 1696
http://sourceforge.net/p/transims/code/1696
Author: davidroden
Date: 2018-01-02 21:35:01 +0000 (Tue, 02 Jan 2018)
Log Message:
-----------
TRANSIMS Version 7.0 Trunk -- Update to be consistent with AECOM branch
Modified Paths:
--------------
version7/trunk/Transims70/File_Service/Plan_Skim_File.cpp
version7/trunk/Transims70/Include/Plan_Skim_File.hpp
Modified: version7/trunk/Transims70/File_Service/Plan_Skim_File.cpp
===================================================================
--- version7/trunk/Transims70/File_Service/Plan_Skim_File.cpp 2017-12-29 21:42:05 UTC (rev 1695)
+++ version7/trunk/Transims70/File_Service/Plan_Skim_File.cpp 2018-01-02 21:35:01 UTC (rev 1696)
@@ -244,3 +244,73 @@
return (true);
}
+
+//-----------------------------------------------------------
+// Plan_Skim_Data_Array constructor
+//-----------------------------------------------------------
+
+Plan_Skim_Data_Array::Plan_Skim_Data_Array () : Plan_Skim_File (MODIFY, BINARY)
+{
+ data_array.Replicate_Fields (this);
+}
+
+//-----------------------------------------------------------
+// Plan_Skim_Data_Array::Read_Record
+//-----------------------------------------------------------
+
+bool Plan_Skim_Data_Array::Read_Record (int index)
+{
+ bool stat = data_array.Read_Record (index);
+ if (stat) {
+ this->Record (data_array.Record ());
+ } else {
+ this->Reset_Record ();
+ }
+ return (stat);
+}
+
+//-----------------------------------------------------------
+// Plan_Skim_Data_Array::Write_Record
+//-----------------------------------------------------------
+
+bool Plan_Skim_Data_Array::Write_Record (int index)
+{
+ data_array.Record (this->Record ());
+
+ return (data_array.Write_Record (index));
+}
+
+//-----------------------------------------------------------
+// Plan_Skim_Sort_Array constructor
+//-----------------------------------------------------------
+
+Plan_Skim_Sort_Array::Plan_Skim_Sort_Array () : Plan_Skim_File (MODIFY, BINARY)
+{
+ sort_array.Replicate_Fields (this);
+}
+
+//-----------------------------------------------------------
+// Plan_Skim_Sort_Array::Read_Record
+//-----------------------------------------------------------
+
+bool Plan_Skim_Sort_Array::Read_Record (int index)
+{
+ bool stat = sort_array.Read_Record (index);
+ if (stat) {
+ this->Record (sort_array.Record ());
+ } else {
+ this->Reset_Record ();
+ }
+ return (stat);
+}
+
+//-----------------------------------------------------------
+// Plan_Skim_Sort_Array::Write_Record
+//-----------------------------------------------------------
+
+bool Plan_Skim_Sort_Array::Write_Record (int index)
+{
+ sort_array.Record (this->Record ());
+
+ return (sort_array.Write_Record (index));
+}
Modified: version7/trunk/Transims70/Include/Plan_Skim_File.hpp
===================================================================
--- version7/trunk/Transims70/Include/Plan_Skim_File.hpp 2017-12-29 21:42:05 UTC (rev 1695)
+++ version7/trunk/Transims70/Include/Plan_Skim_File.hpp 2018-01-02 21:35:01 UTC (rev 1696)
@@ -63,19 +63,19 @@
// Plan_Skim_Data_Array Class definition
//---------------------------------------------------------
-class SYSLIB_API Plan_Skim_Data_Array : public Db_Data_Array, public Plan_Skim_File
+class SYSLIB_API Plan_Skim_Data_Array : public Plan_Skim_File
{
public:
- Plan_Skim_Data_Array () { }
+ Plan_Skim_Data_Array ();
- 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 Read_Record (int index = 0);
+ bool Write_Record (int index = 0);
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 ()); }
+ Db_Data_Array data_array;
};
typedef Plan_Skim_Data_Array * Plan_Skim_Data_Ptr;
@@ -86,18 +86,17 @@
// Plan_Skim_Sort_Array Class definition
//---------------------------------------------------------
-class SYSLIB_API Plan_Skim_Sort_Array : public Db_Sort_Array, public Plan_Skim_File
+class SYSLIB_API Plan_Skim_Sort_Array : public Plan_Skim_File
{
public:
- Plan_Skim_Sort_Array () { }
+ Plan_Skim_Sort_Array ();
- bool Read_Record (int index) { return (Db_Sort_Array::Read_Record (index)); }
- bool Write_Record (int index) { return (Db_Sort_Array::Write_Record (index)); }
+ bool Read_Record (int index = 0);
+ bool Write_Record (int index = 0);
- bool Record (Buffer &buf) { return (Plan_Skim_File::Record (buf)); }
- Buffer & Record (void) { return (Plan_Skim_File::Record ()); }
+ bool Rewind (void) { return (sort_array.Rewind ()); }
- bool Rewind (void) { return (Db_Sort_Array::Rewind ()); }
+ Db_Sort_Array sort_array;
};
typedef Plan_Skim_Sort_Array * Plan_Skim_Sort_Ptr;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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] |
|
From: subversion c. n. <tra...@li...> - 2017-12-29 21:33:17
|
Revision: 1694
http://sourceforge.net/p/transims/code/1694
Author: davidroden
Date: 2017-12-29 21:33:14 +0000 (Fri, 29 Dec 2017)
Log Message:
-----------
TRANSIMS Version 7.1 -- to AECOM branch 1693
Data_Service
The Write_Plan_Skims method was expanded to create a map file if one was not provided. The Write_Plan_Ptrs method was expanded to write a new plan skims file as well.
PlanPrep 7.1.17
Exporting a plan file to a new format or to a plan skims file will write the output data directly without reading the file into memory if the application is run with a single thread.
PlanSelect 7.1.2
The option was added to write the selected plans to a plan skims file.
PlanSum 7.1.9
The plan skim file will now be written based on the plan pointer sort option at the same time as the plan file is written.
Router 7.1.42
The walk and bike travel time calculations were modified on links with facility types WALKWAY and BIKEWAY. The travel time on these links are pulled directly from the link file rather than calculated based on the link length and the walk or bike speed keys.
ModeChoice 7.1.18
The PLAN_SKIMS_IN_MEMORY key is now available for plan processing without the calibration option. In this case, the plan skims or plan files are read into memory as tour skims and sorted using the trip index. A bug was fixed in the output plan processing when tours were not available for all modes. The new plan skim file can write the tour skim records if a new plan file is not created. Otherwise the plan skim file will include the each leg of the selected tours. The plan skim file will now be written based on the plan pointer sort option at the same time as the plan file is written.
Modified Paths:
--------------
version7/branches/aecom/Transims70/Data_Service/Write_Plan_Skims.cpp
version7/branches/aecom/Transims70/Data_Service/Write_Plans.cpp
version7/branches/aecom/Transims70/Include/Plan_Skim_File.hpp
version7/branches/aecom/Transims70/Include/Trip_Index.hpp
version7/branches/aecom/Transims70/ModeChoice/Choice_Data.cpp
version7/branches/aecom/Transims70/ModeChoice/Choice_Process.cpp
version7/branches/aecom/Transims70/ModeChoice/Control.cpp
version7/branches/aecom/Transims70/ModeChoice/Execute.cpp
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.hpp
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj
version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj.filters
version7/branches/aecom/Transims70/ModeChoice/Mode_Splits.cpp
version7/branches/aecom/Transims70/ModeChoice/Read_Plan_Skims.cpp
version7/branches/aecom/Transims70/ModeChoice/Read_Plans.cpp
version7/branches/aecom/Transims70/ModeChoice/Zone_Tables.cpp
version7/branches/aecom/Transims70/PlanPrep/Control.cpp
version7/branches/aecom/Transims70/PlanPrep/Execute.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
version7/branches/aecom/Transims70/PlanPrep/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSelect/Control.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
version7/branches/aecom/Transims70/PlanSelect/PlanSelect.hpp
version7/branches/aecom/Transims70/PlanSelect/Read_Plans.cpp
version7/branches/aecom/Transims70/PlanSum/Execute.cpp
version7/branches/aecom/Transims70/PlanSum/PlanSum.cpp
version7/branches/aecom/Transims70/Router/Router.cpp
version7/branches/aecom/Transims70/Router_Service/Node_Path.cpp
version7/branches/aecom/Transims70/Router_Service/Transit_Access.cpp
Added Paths:
-----------
version7/branches/aecom/Transims70/ModeChoice/Memory_Skims.cpp
version7/branches/aecom/Transims70/ModeChoice/Read_Process.cpp
version7/branches/aecom/Transims70/ModeChoice/Read_Skims.cpp
version7/branches/aecom/Transims70/ModeChoice/Select_Plans.cpp
version7/branches/aecom/Transims70/ModeChoice/Skim_Choice.cpp
Modified: version7/branches/aecom/Transims70/Data_Service/Write_Plan_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Plan_Skims.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Plan_Skims.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/Data_Service/Write_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/Data_Service/Write_Plans.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/Data_Service/Write_Plans.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -167,15 +167,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;
@@ -192,6 +204,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) {
@@ -210,6 +227,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 {
@@ -219,6 +241,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;
}
}
@@ -226,4 +253,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/branches/aecom/Transims70/Include/Plan_Skim_File.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Plan_Skim_File.hpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/Include/Plan_Skim_File.hpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -71,6 +71,8 @@
bool Read_Record (int index = 0);
bool Write_Record (int index = 0);
+ int Add_Index (void) { return ((int) data_array.size () + 1); }
+
bool Rewind (void) { return (data_array.Rewind ()); }
Db_Data_Array data_array;
Modified: version7/branches/aecom/Transims70/Include/Trip_Index.hpp
===================================================================
--- version7/branches/aecom/Transims70/Include/Trip_Index.hpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/Include/Trip_Index.hpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/Choice_Data.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Choice_Data.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Choice_Data.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/Choice_Process.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Choice_Process.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Choice_Process.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Control.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Control.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Execute.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Execute.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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 ----
Added: version7/branches/aecom/Transims70/ModeChoice/Memory_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Memory_Skims.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ModeChoice/Memory_Skims.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/ModeChoice.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/ModeChoice.hpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/ModeChoice.hpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/ModeChoice.hpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj.filters
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj.filters 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/ModeChoice.vcxproj.filters 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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/branches/aecom/Transims70/ModeChoice/Mode_Splits.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Mode_Splits.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Mode_Splits.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -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_ptr) [0] [nest] [exe->num_models] += trips;
- }
- if (exe->market_flag && segment > 0) {
- (*market_seg_ptr) [segment] [nest] [model] += trips;
- (*market_seg_ptr) [segment] [nest] [exe->num_models] += trips;
- }
- if (exe->prod_sum_flag) {
- (*prod_share_ptr) [nest] [o1] += trips;
- }
- if (exe->attr_sum_flag) {
- (*attr_share_ptr) [nest] [d1] += trips;
- }
- mode = nest;
- }
+ break;
}
+ if (exe->thread_flag) {
+ plan_tour_ptr = &split_data.plan_tours [num];
+ } else {
+ plan_tour_ptr = &exe->plan_tours [num];
+ }
+ mode = -1;
- //---- save the plan ----
+ for (plan_itr = plan_tour_ptr->begin (); plan_itr != plan_tour_ptr->end (); plan_itr++) {
+ if (exe->auto_occ_flag && plan_itr->Mode () >= HOV2_MODE && plan_itr->Mode () <= HOV4_MODE) {
+ if (mode < 0) {
+ prob = Random (seed + 1).Probability ();
+ Veh_Type_Data *veh_type_ptr = &exe->veh_type_array [plan_itr->Veh_Type ()];
+ mode = plan_itr->Mode ();
- if (exe->save_flag) {
- if (exe->new_skim_flag && !exe->thread_flag) {
- Plan_Skim_Data skim;
- exe->new_plan_skim->Put_Data (exe->plan_skims [num]->Get_Data (skim));
- if (!exe->new_plan_skim->Write ()) {
- exe->Error ("Writing New Plan Skim File");
+ if (veh_type_ptr->Occupancy () > 0) {
+ prob *= veh_type_ptr->Occupancy () / 100.0;
+ if (prob > 1.0) {
+ mode = RIDE_MODE;
+ }
+ }
}
+ plan_itr->Mode (mode);
+ if (mode == RIDE_MODE) {
+ plan_itr->Vehicle (-1);
+ plan_itr->Veh_Type (0);
+ }
+ } else if (exe->rider_flag && plan_itr->Transit_Mode_Flag ()) { //******************//
+ exe->line_array.Sum_Riders (*plan_itr);
}
- if (exe->new_plan_flag) {
- if (exe->thread_flag) {
- plan_tour_ptr = &split_data.plan_tours [num];
- } else {
- plan_tour_ptr = &exe->plan_tours [num];
- }
+ if (exe->thread_flag) {
+ plan_ptr = new Plan_Data (*plan_itr);
- mode = -1;
+ plan_ptr_array.push_back (plan_ptr);
+ } else {
+ exe->new_plan_file->Write_Plan (*plan_itr);
- for (plan_itr = plan_tour_ptr->begin (); plan_itr != plan_tour_ptr->end (); plan_itr++) {
- if (exe->auto_occ_flag && plan_itr->Mode () >= HOV2_MODE && plan_itr->Mode () <= HOV4_MODE) {
- if (mode < 0) {
- prob = Random (seed + 1).Probability ();
- Veh_Type_Data *veh_type_ptr = &exe->veh_type_array [plan_itr->Veh_Type ()];
- mode = plan_itr->Mode ();
+ if (exe->new_skim_flag) {
+ skim.Put_Data (*plan_itr);
- if (veh_type_ptr->Occupancy () > 0) {
- prob *= veh_type_ptr->Occupancy () / 100.0;
- if (prob > 1.0) {
- mode = RIDE_MODE;
- }
- }
- }
- plan_itr->Mode (mode);
- if (mode == RIDE_MODE) {
- plan_itr->Vehicle (-1);
- plan_itr->Veh_Type (0);
- }
- } else if (exe->rider_flag && plan_itr->Transit_Mode_Flag ()) { //******************//
- exe->line_array.Sum_Riders (*plan_itr);
- }
- if (exe->thread_flag) {
- plan_ptr = new Plan_Data (*plan_itr);
-
- plan_ptr_array.push_back (plan_ptr);
- } else {
- exe->new_plan_file->Write_Plan (*plan_itr);
- }
+ exe->Put_Plan_Skim_Data (*exe->new_plan_skim, skim);
}
}
}
- break;
+ } else if (exe->new_skim_flag) {
+ if (exe->thread_flag) {
+ new_skim_array.push_back (plan_skims->at (num)->Get_Data (skim));
+ } else {
+ exe->new_plan_skim->Put_Data (exe->plan_skims [num]->Get_Data (skim));
+
+ if (!exe->new_plan_skim->Write ()) {
+ exe->Error ("Writing New Plan Skim File");
+ }
+ }
}
}
+ break;
}
}
Modified: version7/branches/aecom/Transims70/ModeChoice/Read_Plan_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Read_Plan_Skims.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Read_Plan_Skims.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -15,29 +15,25 @@
Trip_Index trip_index, min_index;
Trip_Index_Array read_index;
Trip_Index_Itr index_itr;
+ Trip_Map_Itr map_itr;
+ Trip_Map_Itr_Array map_itr_array;
+ Trip_Map_Itr_Array_Itr map_array_itr;
+ Trip_Map_Array_Itr trip_map_itr;
Plan_Skim_File_Itr skim_itr;
- Plan_Skim_Data_Itr data_itr;
+ Plan_Skim_Sort_Itr data_itr;
Plan_Skim_Data data;
- memory_flag = false;
park_cap_flag = ((System_File_Flag (NEW_PARK_DEMAND) && save_flag) || penalty_update_flag);
if (calib_flag) {
- if (save_flag && new_skim_flag) {
+ if (save_flag && new_skim_flag && !thread_flag) {
Show_Message (String ("Iteration %d Writing Plan Skims -- Record") % iteration);
} else {
Show_Message (String ("Iteration %d Reading Plan Skims -- Record") % iteration);
}
if (iteration > 1) {
- if (skim_memory_flag) {
- memory_flag = true;
- for (data_itr = plan_skim_arrays.begin (); data_itr != plan_skim_arrays.end (); data_itr++) {
- (*data_itr)->Rewind ();
- }
- } else {
- for (skim_itr = plan_skim_files.begin (); skim_itr != plan_skim_files.end (); skim_itr++) {
- (*skim_itr)->Rewind ();
- }
+ for (skim_itr = plan_skim_files.begin (); skim_itr != plan_skim_files.end (); skim_itr++) {
+ (*skim_itr)->Rewind ();
}
}
//---- clear the parking demand ----
@@ -60,9 +56,10 @@
i = (int) plan_skims.size ();
index_array.assign (i, trip_index);
read_index.assign (i, trip_index);
+
+ //---- process each trip ----
while (trip_index.Household () < MAX_INTEGER) {
- Show_Progress ();
//---- read the next ----
@@ -71,51 +68,38 @@
for (i = 0, index_itr = index_array.begin (); index_itr != index_array.end (); index_itr++, i++) {
if (*index_itr <= trip_index) {
- if (memory_flag) {
- if (plan_skim_arrays [i]->Read_Record ()) {
- index_skims [i]->Record (plan_skim_arrays [i]->Record ());
- index_skims [i]->Get_Index (*index_itr);
+ if (read_index [i].Household () == 0) {
+ if (plan_skim_files [i]->Read_Record ()) {
+ plan_skim_files [i]->Get_Index (read_index [i]);
} else {
- index_itr->Household (MAX_INTEGER);
+ read_index [i].Household (MAX_INTEGER);
}
- } else {
- if (read_index [i].Household () == 0) {
- if (plan_skim_files [i]->Read_Record ()) {
- plan_skim_files [i]->Get_Index (read_index [i]);
- } else {
- read_index [i].Household (MAX_INTEGER);
- }
- }
- *index_itr = read_index [i];
- if (read_index [i].Household () == MAX_INTEGER) continue;
+ }
+ *index_itr = read_index [i];
+ if (read_index [i].Household () == MAX_INTEGER) continue;
- index_skims [i]->Put_Data (plan_skim_files [i]->Get_Data (data));
+ index_skims [i]->Put_Data (plan_skim_files [i]->Get_Data (data));
- if (plan_skim_files [i]->Read_Record ()) {
- plan_skim_files [i]->Get_Index (read_index [i]);
+ if (plan_skim_files [i]->Read_Record ()) {
+ plan_skim_files [i]->Get_Index (read_index [i]);
- if (tour_choice_flag) {
- while (read_index [i].Household () < MAX_INTEGER) {
- if (read_index [i].Household () != index_itr->Household () || read_index [i].Person () != index_itr->Person () ||
- read_index [i].Tour () != index_itr->Tour ()) {
- break;
- }
- index_skims [i]->Add_Leg (plan_skim_files [i]->Get_Data (data));
+ if (tour_choice_flag) {
+ while (read_index [i].Household () < MAX_INTEGER) {
+ if (read_index [i].Household () != index_itr->Household () || read_index [i].Person () != index_itr->Person () ||
+ read_index [i].Tour () != index_itr->Tour ()) {
+ break;
+ }
+ index_skims [i]->Add_Leg (plan_skim_files [i]->Get_Data (data));
- if (plan_skim_files [i]->Read_Record ()) {
- plan_skim_files [i]->Get_Index (read_index [i]);
- } else {
- read_index [i].Household (MAX_INTEGER);
- }
+ if (plan_skim_files [i]->Read_Record ()) {
+ plan_skim_files [i]->Get_Index (read_index [i]);
+ } else {
+ read_index [i].Household (MAX_INTEGER);
}
}
- } else {
- read_index [i].Household (MAX_INTEGER);
}
- if (skim_memory_flag) {
- plan_skim_arrays [i]->Record (index_skims [i]->Record ());
- plan_skim_arrays [i]->Write_Record ();
- }
+ } else {
+ read_index [i].Household (MAX_INTEGER);
}
}
if (*index_itr < min_index) {
@@ -124,7 +108,14 @@
}
if (min_index.Household () == MAX_INTEGER) break;
+ //---- check for an incomplete tour ----
+
+ if (min_index.Household () == trip_index.Household () && min_index.Person () == trip_index.Person () && min_index.Tour () == trip_index.Tour ()) {
+ trip_index = min_index;
+ continue;
+ }
trip_index = min_index;
+ Show_Progress ();
//---- mode choice ----
@@ -132,10 +123,6 @@
}
if (thread_flag) {
split_queue.Complete_Work ();
-
- for (i = 0; i < Num_Threads (); i++) {
- choice_process [i]->Sum_Totals ();
- }
}
if (calib_flag) {
End_Progress (false);
Modified: version7/branches/aecom/Transims70/ModeChoice/Read_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Read_Plans.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Read_Plans.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -16,8 +16,11 @@
Trip_Index trip_index, min_index;
Trip_Index_Array read_index;
Trip_Index_Itr index_itr;
+ Trip_Map_Itr map_itr;
+ Trip_Map_Itr_Array map_itr_array;
+ Trip_Map_Itr_Array_Itr map_array_itr;
+ Trip_Map_Array_Itr trip_map_itr;
Plan_File_Itr plan_itr;
- Plan_Skim_Data_Itr data_itr;
Plan_Data plan_data;
Plan_Ptr plan_ptr;
Plan_Array mode_plans, tour;
@@ -24,25 +27,15 @@
park_cap_flag = ((System_File_Flag (NEW_PARK_DEMAND) && save_flag) || penalty_update_flag);
- memory_flag = false;
-
if (calib_flag) {
- if (save_flag && new_plan_flag) {
+ if (save_flag && new_plan_flag && !thread_flag) {
Show_Message (String ("Iteration %d Writing Plans -- Record") % iteration);
- skim_memory_flag = false;
} else {
Show_Message (String ("Iteration %d Reading Plans -- Record") % iteration);
}
if (iteration > 1) {
- if (skim_memory_flag) {
- memory_flag = true;
- for (data_itr = plan_skim_arrays.begin (); data_itr != plan_skim_arrays.end (); data_itr++) {
- (*data_itr)->Rewind ();
- }
- } else {
- for (plan_itr = plan_files.begin (); plan_itr != plan_files.end (); plan_itr++) {
- (*plan_itr)->Rewind ();
- }
+ for (plan_itr = plan_files.begin (); plan_itr != plan_files.end (); plan_itr++) {
+ (*plan_itr)->Rewind ();
}
//---- clear the ridership and parking demand ----
@@ -72,97 +65,74 @@
read_index.assign (num, trip_index);
mode_plans.assign (num, plan_data);
-
+ plan_tours.assign (num, tour);
+
while (trip_index.Household () < MAX_INTEGER) {
- Show_Progress ();
//---- read the next ----
min_index.Household (MAX_INTEGER);
- if (!plan_skim_flag) {
- plan_tours.assign (num, tour);
- }
for (i = 0, index_itr = index_array.begin (); index_itr != index_array.end (); index_itr++, i++) {
if (*index_itr <= trip_index) {
- if (memory_flag) {
- if (plan_skim_arrays [i]->Read_Record ()) {
- index_skims [i]->Record (plan_skim_arrays [i]->Record ());
- index_skims [i]->Get_Index (*index_itr);
+ plan_ptr = &mode_plans [i];
+
+ if (read_index [i].Household () == 0) {
+ if (plan_files [i]->Read_Plan (*plan_ptr)) {
+ plan_ptr->Get_Index (read_index [i]);
} else {
- (*index_itr).Household (MAX_INTEGER);
+ read_index [i].Household (MAX_INTEGER);
}
+ }
+ *index_itr = read_index [i];
+ if (read_index [i].Household () == MAX_INTEGER) continue;
+
+ if (plan_ptr->Transit_Mode_Flag () && System_File_Flag (RIDERSHIP)) {
+ crowd_flag = Transit_Crowding (plan_ptr);
} else {
- plan_ptr = &mode_plans [i];
+ crowd_flag = false;
+ }
+ index_skims [i]->Put_Data (*plan_ptr);
- if (read_index [i].Household () == 0) {
- if (plan_files [i]->Read_Plan (*plan_ptr)) {
- plan_ptr->Get_Index (read_index [i]);
- } else {
- read_index [i].Household (MAX_INTEGER);
- }
- }
- *index_itr = read_index [i];
- if (read_index [i].Household () == MAX_INTEGER) continue;
+ plan_tours [i].assign (1, *plan_ptr);
- if (plan_ptr->Transit_Mode_Flag () && System_File_Flag (RIDERSHIP)) {
- crowd_flag = Transit_Crowding (plan_ptr);
- } else {
- crowd_flag = false;
- }
- index_skims [i]->Put_Data (*plan_ptr);
+ if (plan_files [i]->Read_Plan (*plan_ptr)) {
+ plan_ptr->Get_Index (read_index [i]);
- if (!plan_skim_flag) {
- plan_tours [i].assign (1, *plan_ptr);
- }
-
- if (plan_files [i]->Read_Plan (*plan_ptr)) {
- plan_ptr->Get_Index (read_index [i]);
-
- if (tour_choice_flag) {
- while (read_index [i].Household () < MAX_INTEGER) {
- if (read_index [i].Household () != index_itr->Household () || read_index [i].Person () != index_itr->Person () ||
- read_index [i].Tour () != index_itr->Tour ()) {
- break;
+ if (tour_choice_flag) {
+ while (read_index [i].Household () < MAX_INTEGER) {
+ if (read_index [i].Household () != index_itr->Household () || read_index [i].Person () != index_itr->Person () ||
+ read_index [i].Tour () != index_itr->Tour ()) {
+ break;
+ }
+ if (!crowd_flag) {
+ if (plan_ptr->Transit_Mode_Flag () && System_File_Flag (RIDERSHIP)) {
+ crowd_flag = Transit_Crowding (plan_ptr);
+ } else {
+ crowd_flag = false;
}
- if (!crowd_flag) {
- if (plan_ptr->Transit_Mode_Flag () && System_File_Flag (RIDERSHIP)) {
- crowd_flag = Transit_Crowding (plan_ptr);
- } else {
- crowd_flag = false;
- }
- if (crowd_flag) {
- index_skims [i]->Put_Data (*plan_ptr);
+ if (crowd_flag) {
+ index_skims [i]->Put_Data (*plan_ptr);
- if (!plan_skim_flag) {
- plan_tours [i].assign (1, *plan_ptr);
- }
- } else {
- index_skims [i]->Add_Leg (*plan_ptr);
+ plan_tours [i].assign (1, *plan_ptr);
+ } else {
+ index_skims [i]->Add_Leg (*plan_ptr);
- if (!plan_skim_flag) {
- plan_tours [i].push_back (*plan_ptr);
- }
- }
+ plan_tours [i].push_back (*plan_ptr);
}
- if (plan_files [i]->Read_Plan (*plan_ptr)) {
- plan_ptr->Get_Index (read_index [i]);
- } else {
- read_index [i].Household (MAX_INTEGER);
- }
}
- } else {
- plan_tours [i].push_back (*plan_ptr);
+ if (plan_files [i]->Read_Plan (*plan_ptr)) {
+ plan_ptr->Get_Index (read_index [i]);
+ } else {
+ read_index [i].Household (MAX_INTEGER);
+ }
}
- } else {
- read_index [i].Household (MAX_INTEGER);
}
- if (skim_memory_flag) {
- plan_skim_arrays [i]->Record (index_skims [i]->Record ());
- plan_skim_arrays [i]->Write_Record ();
- }
+ } else {
+ read_index [i].Household (MAX_INTEGER);
}
+
}
if (*index_itr < min_index) {
min_index = *index_itr;
@@ -170,7 +140,14 @@
}
if (min_index.Household () == MAX_INTEGER) break;
+ //---- check for an incomplete tour ----
+
+ if (min_index.Household () == trip_index.Household () && min_index.Person () == trip_index.Person () && min_index.Tour () == trip_index.Tour ()) {
+ trip_index = min_index;
+ continue;
+ }
trip_index = min_index;
+ Show_Progress ();
//---- mode choice ----
@@ -179,14 +156,9 @@
}
if (thread_flag) {
split_queue.Complete_Work ();
-
- for (i = 0; i < Num_Threads (); i++) {
- choice_process [i]->Sum_Totals ();
- }
}
if (calib_flag) {
End_Progress (false);
-
} else {
End_Progress (clock ());
}
Added: version7/branches/aecom/Transims70/ModeChoice/Read_Process.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Read_Process.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ModeChoice/Read_Process.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -0,0 +1,31 @@
+
+//*********************************************************
+// Read_Process.cpp - read skim process
+//*********************************************************
+
+#include "ModeChoice.hpp"
+
+//---------------------------------------------------------
+// Read_Process constructor
+//---------------------------------------------------------
+
+ModeChoice::Read_Process::Read_Process (ModeChoice *_exe)
+{
+ exe = _exe;
+}
+
+//---------------------------------------------------------
+// Read_Process operator
+//---------------------------------------------------------
+
+void ModeChoice::Read_Process::operator()()
+{
+ //---- process each choice ----
+
+ int number;
+
+ while (exe->skim_number.Get (number)) {
+ Memory_Skims (number);
+ exe->skim_number.Finished ();
+ }
+}
Added: version7/branches/aecom/Transims70/ModeChoice/Read_Skims.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Read_Skims.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ModeChoice/Read_Skims.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -0,0 +1,61 @@
+//*********************************************************
+// Read_Skims.cpp -- read skims into memory
+//*********************************************************
+
+#include "ModeChoice.hpp"
+
+//---------------------------------------------------------
+// Read_Skims
+//---------------------------------------------------------
+
+void ModeChoice::Read_Skims (void)
+{
+ int i, num, size;
+ Int_Map_Itr map_itr;
+ Threads read_threads;
+
+ //---- read skims into memory ----
+
+ size = (int) plan_num_map.size ();
+
+ num = MIN (size, Num_Threads ());
+
+ read_process = new Read_Process * [size];
+
+ if (thread_flag) {
+ skim_number.Max_Records (size);
+
+ for (i = 0; i < num; i++) {
+ Show_Progress ();
+ Read_Process *ptr = read_process [i] = new Read_Process (this);
+ read_threads.push_back (thread (ref (*ptr)));
+ }
+ Show_Message ("Reading Skims into Memory -- Record");
+ Set_Progress ();
+
+ skim_number.Start_Work ();
+
+ for (map_itr = plan_num_map.begin (); map_itr != plan_num_map.end (); map_itr++) {
+ skim_number.Put (map_itr->second);
+ }
+ skim_number.End_of_Work ();
+ read_threads.Join_All ();
+ End_Progress (clock ());
+
+ for (i = 0; i < num; i++) {
+ delete read_process [i];
+ }
+ } else {
+ *read_process = new Read_Process (this);
+
+ for (map_itr = plan_num_map.begin (); map_itr != plan_num_map.end (); map_itr++) {
+ Show_Message (String ("Reading Skim %d into Memory -- Record") % map_itr->first);
+ Set_Progress ();
+
+ (*read_process)->Memory_Skims (map_itr->second);
+
+ End_Progress (clock ());
+ }
+ }
+}
+
Added: version7/branches/aecom/Transims70/ModeChoice/Select_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Select_Plans.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ModeChoice/Select_Plans.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -0,0 +1,95 @@
+//*********************************************************
+// Select_Plans - copy plans to output array
+//*********************************************************
+
+#include "ModeChoice.hpp"
+
+#include <math.h>
+
+//---------------------------------------------------------
+// Select_Plans
+//---------------------------------------------------------
+
+void ModeChoice::Select_Plans (void)
+{
+ int i, mode, seed;
+ double prob;
+
+ Trip_Index trip_index;
+ Trip_Map_Itr trip_itr;
+ Plan_File_Itr plan_itr;
+ Plan_Data plan_data, *plan_ptr;
+
+ //---- clear the ridership and parking demand ----
+
+ if (rider_flag) {
+ line_array.Zero_Riders ();
+ }
+ if (penalty_update_flag) {
+ park_demand_array.Zero_Demand ();
+ }
+ Show_Message ("Selecting Choosen Plans -- Record");
+ Set_Progress ();
+
+ mode = -1;
+
+ //---- process each file ----
+
+ for (i = 0, plan_itr = plan_files.begin (); plan_itr != plan_files.end (); plan_itr++, i++) {
+ (*plan_itr)->Rewind ();
+
+ while ((*plan_itr)->Read_Plan (plan_data)) {
+
+ plan_data.Get_Index (trip_index);
+ trip_index.Trip (1);
+
+ trip_itr = trip_mode.find (trip_index);
+ if (trip_itr == trip_mode.end ()) {
+ plan_data.Get_Index (trip_index);
+
+ trip_itr = trip_mode.find (trip_index);
+ if (trip_itr == trip_mode.end ()) {
+ continue;
+ }
+ }
+
+ if (trip_itr->second != i) continue;
+
+ Show_Progress ();
+
+ if (plan_data.Trip () == 1) {
+ mode = -1;
+ }
+ seed = (int) ((double) random_seed + plan_data.Household () + plan_data.Person () + plan_data.Tour () + plan_data.Trip ());
+
+ if (auto_occ_flag && plan_data.Mode () >= HOV2_MODE && plan_data.Mode () <= HOV4_MODE) {
+ if (mode < 0) {
+ prob = Random (seed + 1).Probability ();
+ Veh_Type_Data *veh_type_ptr = &veh_type_array [plan_data.Veh_Type ()];
+ mode = plan_data.Mode ();
+
+ if (veh_type_ptr->Occupancy () > 0) {
+ prob *= veh_type_ptr->Occupancy () / 100.0;
+ if (prob > 1.0) {
+ mode = RIDE_MODE;
+ }
+ }
+ }
+ plan_data.Mode (mode);
+
+ if (mode == RIDE_MODE) {
+ plan_data.Vehicle (-1);
+ plan_data.Veh_Type (0);
+ }
+ } else if (rider_flag && plan_data.Transit_Mode_Flag ()) { //******************//
+ line_array.Sum_Riders (plan_data);
+ }
+
+ plan_ptr = new Plan_Data (plan_data);
+
+ plan_ptr_array.push_back (plan_ptr);
+ }
+ (*plan_itr)->Close ();
+ }
+ End_Progress (clock ());
+}
Added: version7/branches/aecom/Transims70/ModeChoice/Skim_Choice.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Skim_Choice.cpp (rev 0)
+++ version7/branches/aecom/Transims70/ModeChoice/Skim_Choice.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -0,0 +1,106 @@
+//*********************************************************
+// Skim_Choice.cpp - choice between plan skims
+//*********************************************************
+
+#include "ModeChoice.hpp"
+
+//---------------------------------------------------------
+// Skim_Choice
+//---------------------------------------------------------
+
+void ModeChoice::Skim_Choice (void)
+{
+ int i;
+
+ Trip_Index trip_index, min_index;
+ Trip_Index_Itr index_itr;
+ Trip_Map_Itr map_itr;
+ Trip_Map_Itr_Array map_itr_array;
+ Trip_Map_Itr_Array_Itr map_array_itr;
+ Trip_Map_Array_Itr trip_map_itr;
+
+ park_cap_flag = ((System_File_Flag (NEW_PARK_DEMAND) && save_flag) || penalty_update_flag);
+
+ if (calib_flag) {
+ if (save_flag && new_skim_flag) {
+ Show_Message (String ("Iteration %d Writing Plan Skims -- Record") % iteration);
+ } else {
+ Show_Message (String ("Iteration %d Choosing Plan Skims -- Record") % iteration);
+ }
+ if (iteration > 1) {
+
+ //---- clear the parking demand ----
+
+ if (penalty_update_flag) {
+ park_demand_array.Zero_Demand ();
+ }
+ }
+ } else {
+ Show_Message ("Choosing Plan Skims -- Record");
+ }
+ Set_Progress ();
+
+ for (trip_map_itr = skim_index_array.begin (); trip_map_itr != skim_index_array.end (); trip_map_itr++) {
+ map_itr_array.push_back (trip_map_itr->begin ());
+ }
+
+ //---- process each trip ----
+
+ if (thread_flag) {
+ split_queue.Start_Work ();
+ }
+ trip_index.Household (0);
+
+ i = (int) plan_skims.size ();
+ index_array.assign (i, trip_index);
+
+ //---- process each trip ----
+
+ while (trip_index.Household () < MAX_INTEGER) {
+
+ //---- read the next ----
+
+ min_index.Household (MAX_INTEGER);
+
+ for (i = 0, index_itr = index_array.begin (); index_itr != index_array.end (); index_itr++, i++) {
+ if (*index_itr <= trip_index) {
+
+ if (map_itr_array [i] != skim_index_array [i].end ()) {
+ *index_itr = map_itr_array [i]->first;
+
+ plan_skim_arrays [i]->Read_Record (map_itr_array [i]->second);
+ index_skims [i]->Record (plan_skim_arrays [i]->Record ());
+
+ map_itr_array [i]++;
+ } else {
+ index_itr->Household (MAX_INTEGER);
+ }
+ }
+ if (*index_itr < min_index) {
+ min_index = *index_itr;
+ }
+ }
+ if (min_index.Household () == MAX_INTEGER) break;
+
+ //---- check for an incomplete tour ----
+
+ if (min_index.Household () == trip_index.Household () && min_index.Person () == trip_index.Person () && min_index.Tour () == trip_index.Tour ()) {
+ trip_index = min_index;
+ continue;
+ }
+ trip_index = min_index;
+ Show_Progress ();
+
+ //---- mode choice ----
+
+ Choice_Data (trip_index);
+ }
+ if (thread_flag) {
+ split_queue.Complete_Work ();
+ }
+ if (calib_flag) {
+ End_Progress (false);
+ } else {
+ End_Progress (clock ());
+ }
+}
Modified: version7/branches/aecom/Transims70/ModeChoice/Zone_Tables.cpp
===================================================================
--- version7/branches/aecom/Transims70/ModeChoice/Zone_Tables.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/ModeChoice/Zone_Tables.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -148,11 +148,6 @@
}
}
}
- if (thread_flag) {
- for (i = 0; i < Num_Threads (); i++) {
- choice_process [i]->Sum_Totals ();
- }
- }
if (!calib_flag) End_Progress (clock ());
if (lost_flag && save_flag) {
Modified: version7/branches/aecom/Transims70/PlanPrep/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/Control.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -16,6 +16,8 @@
//---- create the network files ----
Select_Service::Program_Control ();
+
+ thread_flag = (Num_Threads () > 1);
if (select_org_zones || select_des_zones || select_polygon || select_subareas) {
if (!System_File_Flag (NODE) || !System_File_Flag (LINK) || !System_File_Flag (LOCATION)) {
@@ -227,4 +229,8 @@
reroute_percent = Get_Control_Double (REROUTE_PERCENTAGE);
}
+
+ if (!thread_flag && plan_flag && (new_plan_flag || plan_skim_flag) && !merge_flag && !subarea_flag && !combine_flag && !repair_flag && !reroute_flag) {
+ export_flag = true;
+ }
}
Modified: version7/branches/aecom/Transims70/PlanPrep/Execute.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Execute.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/Execute.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -11,7 +11,6 @@
void PlanPrep::Execute (void)
{
int i;
- thread_flag = (Num_Threads () > 1);
//---- read the network data ----
@@ -84,7 +83,7 @@
}
//---- write the new plan file ----
- if (new_plan_flag || plan_skim_flag) {
+ if (!export_flag && (new_plan_flag || plan_skim_flag)) {
Write_Plans ();
}
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -11,7 +11,7 @@
PlanPrep::PlanPrep (void) : Select_Service ()
{
Program ("PlanPrep");
- Version (12);
+ Version (13);
Title ("Travel Plan Processing Utility");
System_File_Type optional_files [] = {
@@ -62,7 +62,7 @@
num_repair = repair_plans = num_subarea_merge = num_new_skims = num_constraints = num_merge_files = check_sum = check_sum_type = 0;
select_flag = merge_flag = subarea_flag = combine_flag = output_flag = new_plan_flag = new_trip_flag = new_select_flag = false;
- repair_flag = skim_flag = plan_skim_flag = plan_flag = check_sum_flag = false;
+ repair_flag = skim_flag = plan_skim_flag = plan_flag = check_sum_flag = export_flag = false;
shift_start_flag = shift_end_flag = reroute_flag = false;
shift_rate = 0.0;
shift_factor = 1.0;
Modified: version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/PlanPrep.hpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -46,7 +46,7 @@
int new_format, num_repair, num_subarea_merge, repair_plans, num_constraints, num_new_skims, num_merge_files;
int check_sum, check_sum_type, num_reroute, num_shifted;
bool select_flag, merge_flag, subarea_flag, combine_flag, output_flag, new_plan_flag, new_trip_flag, new_select_flag;
- bool repair_flag, plan_skim_flag, skim_flag, plan_flag, check_sum_flag;
+ bool repair_flag, plan_skim_flag, skim_flag, plan_flag, check_sum_flag, export_flag;
bool park_list_flag, route_list_flag, shift_start_flag, shift_end_flag, reroute_flag;
double max_ratio, max_factor, shift_rate, shift_factor, reroute_percent;
Dtime low_from, high_from, low_to, high_to, reroute_start, reroute_end;
Modified: version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/Process_Plan.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -154,7 +154,17 @@
keep_flag = false;
}
} else {
- plan_ptr_array_ptr->push_back (plan_ptr);
+ if (exe->export_flag) {
+ if (exe->new_plan_flag) {
+ exe->new_plan_file->Write_Plan (*plan_ptr);
+ }
+ if (exe->plan_skim_flag) {
+ exe->plan_skim_file->Write_Plan_Skim (*plan_ptr);
+ num_new_skims++;
+ }
+ } else {
+ plan_ptr_array_ptr->push_back (plan_ptr);
+ }
}
}
}
Modified: version7/branches/aecom/Transims70/PlanPrep/Read_Plans.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanPrep/Read_Plans.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanPrep/Read_Plans.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -20,7 +20,7 @@
}
//---- write the process message ----
- if (plan_flag) {
+ if (plan_flag && !export_flag) {
process_type = "Reading";
} else if (subarea_flag) {
process_type = "Subarea";
Modified: version7/branches/aecom/Transims70/PlanSelect/Control.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanSelect/Control.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -26,6 +26,14 @@
new_plan_file->Write_Header ();
}
+ new_skim_flag = System_File_Flag (NEW_PLAN_SKIM);
+
+ if (new_skim_flag) {
+ new_skim_file = System_Plan_Skim_File (true);
+ new_skim_file->Sort_Type (plan_file->Sort_Type ());
+ new_skim_file->Write_Header ();
+ }
+
new_select_flag = System_File_Flag (NEW_SELECTION);
Print (2, String ("%s Control Keys:") % Program ());
Modified: version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp
===================================================================
--- version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2017-12-22 19:06:29 UTC (rev 1693)
+++ version7/branches/aecom/Transims70/PlanSelect/PlanSelect.cpp 2017-12-29 21:33:14 UTC (rev 1694)
@@ -11,7 +11,7 @@
PlanSelect::PlanSelect (void) : Select_Service ()
{
Program ("PlanSelect");
- Version (1);
+ Version (2);
Title ("Travel Plan Selection Utility");
System_File_Type required_files [] = {
@@ -18,7 +18,7 @@
PLAN, END_FILE
};
System_File_Type optional_files [] = {
- LINK, NODE, TRANSIT_STOP, TRANSIT_ROUTE, TRANSIT_DRIVER, VEHICLE_TYPE, PERFORMANCE, SELECTION, NEW_SELECTION, NEW_PLAN, END_FILE
+ LINK, NODE, TRANSIT_STOP, TRANSIT_ROUTE, TRANSIT_DRIVER, VEHICLE_TYPE, PERFORMANCE, SELECTION, NEW_SELECTION, NEW_PLAN, NEW_PLAN_SKIM, END_FILE
};
int file_service_keys [] = {
SAVE_LANE_USE_FLOWS, 0
@@ -53,7 +53,7 @@
Report_List (reports);
Sum_Flow_Flag (true);
- new_plan_flag = new_select_flag = false;
+ new_plan_flag = new_skim_flag = new_select_flag = false;
plan_file = new_plan_file = 0;
Mod...
[truncated message content] |