Subject: Adding New View Variables To SWMM 5 for Villemonte Correction for Downstream Submergence. A simple seven step procedure to modify the SWMM 5 GUI Delphi Code and the SWMM 5 C code.
Step 1: Add a new View Variable to the SWMM 5 GUI Delphi code UGLOBAL.PAS
You need to add a new variable name (LINKVILLEMONTE) and increase the index number of LINKVIEWS
LINKVILLEMONTE = 48; //Output // (5.0.022 - RED)
LINKQUAL = 49; //Output // (5.0.022 - RED)
LINKVIEWS = 48; //Max. display variable index // (5.0.022 - RED)
Step 2: Add a new BaseLinkUnits description to the SWMM 5 GUI Delphi code UGLOBAL.PAS
('',''), // Villemonte Correction // (5.0.022 - RED)
('mg/L','mg/L')); // Quality
Step 3: Add a new Link View Variable SourceIndex description to the SWMM 5 GUI Delphi code Viewvars.txt
(Name: 'Villemonte Correction';
SourceIndex: 43;
DefIntervals: (25,50,75,100)),
(Name:'Quality';
SourceIndex: 44;
DefIntervals:(0.25,0.5,0.75,1.0))
);
Step 4: Add a new Link View Variable LINK_VILLEMONTE to the SWMM 5 C code in enums.h
You also need to increase the number of Link Results in enums.h for the increased number of view variables
#define MAX_LINK_RESULTS 45 // (5.0.022 - RED)
LINK_VILLEMONTE, // Villemonte Correction // (5.0.022 - RED)
LINK_QUAL}; // concentration of each pollutant
Step 5: Add a new variable to objects.h for the structure Tlink to remember the Villemonte correction at each iteration for each Weir and Orifice
double Villemonte; //(5.0.022 - RED)
} TLink;
Step 6: In the SWMM 5 LINK.C code in procedure weir_getInflow save the current iteration value of the Villemonte correction to the new structure variable
// --- apply Villemonte eqn. to correct for submergence
Link[j].Villemonte = 1.0; //(5.0.022 - RED)
Link[j].head = head; //(5.0.022 - RED)
if ( h2 > hcrest )
{ ratio = (h2 - hcrest) / (h1 - hcrest);
q1 *= pow( (1.0 - pow(ratio, weirPower[Weir[k].type])), 0.385);
if ( q2 > 0.0 )
q2 *= pow( (1.0 - pow(ratio, weirPower[VNOTCH_WEIR])), 0.385);
Link[j].Villemonte = pow( (1.0 - pow(ratio, weirPower[Weir[k].type])), 0.385); }
Step 7: Save the value of the saved Villemonte correction in LINK.C in the procedure link_getResults so it can be read and seen in the Delphi interface
x[LINK_VILLEMONTE] = (float)Link[j].Villemonte; // (5.0.022 - RED)