|
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] |