# RiverWare_Ruleset 6.8 Development # Created 13:06 November 16, 2015 # RULESET AGENDA_ORDER ASCENDING; DESCRIPTION "This is the ruleset for running flood control,
optionally for comparison with SUPER results."; PRECISION 8; BEGIN POLICY_GROUP "Qfish Operations"; DESCRIPTION ""; ACTIVE FALSE; BEGIN RULE "Set QFish Outflows"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT IsNaN "TenkillerFish.Supply" []; BEGIN FOREACH (OBJECT res IN "ListSubbasin"( "QFish Reservoirs" )) DO res & "Outflow" [] := IF ( res & "Off Peak Spill" [] < "DataObjectName"( res ) & "MinimumQFish" [] ) THEN res & "Outflow" [] + "AdditionalQFishFlow"( res ) ENDIF; res & "Regulated Spill" [] := IF ( res & "Off Peak Spill" [] < "DataObjectName"( res ) & "MinimumQFish" [] ) THEN res & "Regulated Spill" [] + "AdditionalQFishFlow"( res ) ENDIF; ( STRINGIFY res ) CONCAT "Fish" CONCAT ".Supply" [] := IF ( res & "Off Peak Spill" [] < "DataObjectName"( res ) & "MinimumQFish" [] ) THEN "AdditionalQFishFlow"( res ) ENDIF; ENDFOREACH; END; END; POLICY_GROUP "Hydropower"; DESCRIPTION ""; ACTIVE TRUE; BEGIN RULE "Hydropower Releases"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN FOREACH (LIST pair IN "HydropowerRelease"( "Flood Basin" )) DO ( GET @INDEX 0.00000000 FROM pair ) [] := GET @INDEX 1.00000000 FROM pair; ENDFOREACH; END; END; POLICY_GROUP "Compute Reservoir Diversion"; DESCRIPTION ""; ACTIVE TRUE; BEGIN RULE "Compute Reservoir Diversions"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Compute Reservoir Diversions" ); BEGIN FOREACH (LIST result IN "ComputeReservoirDiversions"( "Flood Basin" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; END; POLICY_GROUP "Meet Low Flow Requirements"; DESCRIPTION ""; ACTIVE TRUE; BEGIN RULE "Sallisaw Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Sallisaw Low Flow Diversion" ); BEGIN $ "Oologah_Claremore NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); $ "Claremore_Inola NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); $ "Inola_Muskogee NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - ( "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ) + "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Inola" ) ); $ "Muskogee_Sallisaw NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - ( "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ) + ( "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Inola" ) + "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Muskogee" ) ) ) + ( "LowFlowReleaseFrom"( % "Keystone" ) - ( "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Outflow" ) + "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Muskogee" ) ) ); $ "Keystone_Haskell NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Keystone" ) - "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Outflow" ); $ "Haskell_Muskogee NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Keystone" ) - "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Outflow" ); $ "Tenkiller_Sallisaw NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Tenkiller" ) - "GetSlotNoNaNs"( $ "Tenkiller Data.Low Flow Release For Outflow" ); $ "Eufaula_Sallisaw NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Eufaula" ); END; RULE "Sallisaw Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Sallisaw Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Sallisaw" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Sallisaw" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Tenkiller Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Tenkiller Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Tenkiller_Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Muskogee Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Muskogee Low Flow Diversion" ); BEGIN $ "Oologah_Claremore NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); $ "Claremore_Inola NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); $ "Inola_Muskogee NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - ( "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ) + "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Inola" ) ); $ "Keystone_Haskell NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Keystone" ) - "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Outflow" ); $ "Haskell_Muskogee NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Keystone" ) - "GetSlotNoNaNs"( $ "Keystone Data.Low Flow Release For Outflow" ); END; RULE "Muskogee Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Muskogee Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Muskogee" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Muskogee" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Keystone Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Keystone Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Keystone Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Inola Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Inola Low Flow Diversion" ); BEGIN $ "Oologah_Claremore NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); $ "Claremore_Inola NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Oologah" ) - "GetSlotNoNaNs"( $ "Oologah Data.Low Flow Release For Outflow" ); END; RULE "Inola Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Inola Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Inola" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Inola" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Oologah Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Oologah Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Oologah Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Sperry Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Sperry Low Flow Diversion" ); BEGIN $ "Birch_Avant NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Birch" ) - "GetSlotNoNaNs"( $ "Birch Data.Low Flow Release For Outflow" ); $ "Avant_Sperry NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Birch" ) - "GetSlotNoNaNs"( $ "Birch Data.Low Flow Release For Outflow" ); $ "Skiatook_Sperry NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Skiatook" ) - "GetSlotNoNaNs"( $ "Skiatook Data.Low Flow Release For Outflow" ); END; RULE "Sperry Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Sperry Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Sperry" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Sperry" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Skiatook Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Skiatook Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Skiatook Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Birch Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Birch Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Birch Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Bartlesville Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Bartlesville Low Flow Diversion" ); BEGIN $ "Hulah_Bartlesville NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Hulah" ) - "GetSlotNoNaNs"( $ "Hulah Data.Low Flow Release For Outflow" ); $ "Copan_Bartlesville NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Copan" ) - "GetSlotNoNaNs"( $ "Copan Data.Low Flow Release For Outflow" ); END; RULE "Bartlesville Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Bartlesville Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Bartlesville" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Bartlesville" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Copan Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Copan Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Copan Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Hulah Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Hulah Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Hulah Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Independence Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Independence Low Flow Diversion" ); BEGIN $ "Fall River_Fredonia NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Fall River" ) - "GetSlotNoNaNs"( $ "Fall River Data.Low Flow Release For Outflow" ); $ "Fredonia_Independence NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Fall River" ) - ( "GetSlotNoNaNs"( $ "Fall River Data.Low Flow Release For Outflow" ) + "GetSlotNoNaNs"( $ "Fall River Data.Low Flow Release For Fredonia" ) ); $ "Toronto_Altoona NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Toronto" ) - "GetSlotNoNaNs"( $ "Toronto Data.Low Flow Release For Outflow" ); $ "Fredonia_Independence NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Toronto" ) - ( "GetSlotNoNaNs"( $ "Toronto Data.Low Flow Release For Outflow" ) + "GetSlotNoNaNs"( $ "Toronto Data.Low Flow Release For Altoona" ) ); $ "Elk City_Independence NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Elk City" ) - "GetSlotNoNaNs"( $ "Elk City Data.Low Flow Release For Outflow" ); END; RULE "Independence Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Independence Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Independence" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Independence" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Elk City Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Elk City Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Elk City Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Fredonia Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Fredonia Low Flow Diversion" ); BEGIN $ "Fall River_Fredonia NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Fall River" ) - "GetSlotNoNaNs"( $ "Fall River Data.Low Flow Release For Outflow" ); END; RULE "Fredonia Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Fredonia Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Fredonia" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Fredonia" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Fall River Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Fall River Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Fall River Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Altoona Low Flow Diversion"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Altoona Low Flow Diversion" ); BEGIN $ "Toronto_Altoona NoLag.Diversion Requested" [] := "LowFlowReleaseFrom"( % "Toronto" ) - "GetSlotNoNaNs"( $ "Toronto Data.Low Flow Release For Outflow" ); END; RULE "Altoona Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Altoona Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Altoona" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Altoona" [] := ( GET @INDEX 1.00000000 FROM result ) - "LowFlowReleaseFrom"( GET @INDEX 2.00000000 FROM result ); END_IF_STATEMENT; ENDFOREACH; END; RULE "Toronto Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Toronto Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Toronto Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; IF_STATEMENT ("IsSlotLowFlowRelease"( result )) THEN "DataObjectName"( GET @INDEX 2.00000000 FROM result ) & "Low Flow Release For Outflow" [] := GET @INDEX 1.00000000 FROM result; END_IF_STATEMENT; ENDFOREACH; END; RULE "Hudson Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Hudson Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Hudson Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "Pensacola Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Pensacola Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Pensacola Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "John Redmond Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "John Redmond Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "John Redmond Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "Marion Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Marion Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Marion Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "Council Grove Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Council Grove Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Council Grove Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "Kaw Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "Kaw Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "Kaw Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; RULE "El Dorado Outflow Low Flow"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT NOT "HasRuleFiredSuccessfully"( "El Dorado Outflow Low Flow" ); BEGIN FOREACH (LIST result IN "MeetLowFlowRequirement"( "Flood Basin", % "El Dorado Outflow" )) DO ( GET @INDEX 0.00000000 FROM result ) [] := GET @INDEX 1.00000000 FROM result; ENDFOREACH; END; END; POLICY_GROUP "Flood Control Rule"; DESCRIPTION "This rule causes flood control to happen. You must have this turned on
when running flood control, along with the Regulation Discharge and
the Surcharge Release rule groups.

For a production run, these are the only 3 groups in this rule set
that will be turned on."; ACTIVE TRUE; BEGIN RULE "Flood Control"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN FOREACH (LIST pair IN "FloodControl"( "Flood Basin" )) DO ( GET @INDEX 0.00000000 FROM pair ) [] := GET @INDEX 1.00000000 FROM pair; ENDFOREACH; END; END; POLICY_GROUP "Regulation Discharge Rule"; DESCRIPTION "This group causes regulation discharge to be computed for the control points.
It must be turned on if flood control is turned on.

You can run only surcharge release and regulation discharge (sans
flood control), with Set Storage to SUPER also turned on, to compare
the regulation discharge results with SUPER's.
"; ACTIVE TRUE; BEGIN RULE "Regulation Discharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN FOREACH (OBJECT ControlPt IN "ListSubbasin"( "CP" )) DO ControlPt & "Reg Discharge Calculation" [] := REGULATION_DISCHARGE_FLAG; ENDFOREACH; END; END; POLICY_GROUP "Surcharge Release Rules"; DESCRIPTION "Cause surcharge release to be computed for all reservoirs.

This rule group must be turned on if regulation discharge is to run.
(and regulation discharge is required for flood control, so this is required
for flood control).

You can run only surcharge release with Set Storage to SUPER to
compare only surcharge release results."; ACTIVE TRUE; BEGIN RULE "Wister Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Wister.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Eufaula Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Eufaula.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Tenkiller Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Tenkiller.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Ft Gibson Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Ft Gibson.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Hudson Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Hudson.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Pensacola Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Pensacola.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "John Redmond Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "John Redmond.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Council Grove Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Council Grove.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Marion Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Marion.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Oologah Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Oologah.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Big Hill Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Big Hill.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Toronto Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Toronto.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Fall River Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Fall River.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Elk City Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Elk City.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Copan Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Copan.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Hulah Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Hulah.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Birch Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Birch.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Skiatook Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Skiatook.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Keystone Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Keystone.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "Kaw Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "Kaw.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; RULE "El Dorado Surcharge"; DESCRIPTION ""; ACTIVE TRUE; RULE_EXEC_CONSTRAINT TRUE; BEGIN $ "El Dorado.Outflow" [] := SURCHARGE_RELEASE_FLAG; END; END; UTILITY_GROUP "Utility Group1"; DESCRIPTION ""; ACTIVE TRUE; BEGIN FUNCTION "DataObjectName" ( OBJECT res ) RETURN_TYPE OBJECT; SCALE_UNITS ""; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN "GetObject"( ( STRINGIFY res ) CONCAT " Data" ); END; FUNCTION "AdditionalQFishFlow" ( OBJECT res ) RETURN_TYPE NUMERIC; SCALE_UNITS "cfs"; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN "Min"( "DataObjectName"( res ) & "MinimumQFish" [] * "OffPeakFraction"( res ), "VolumeToFlow"( res ~ "Fish.Storage" [@"t - 1"], @"t" ) ); END; FUNCTION "OffPeakFraction" ( OBJECT res ) RETURN_TYPE NUMERIC; SCALE_UNITS ""; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN ( "GetTimestep"( @"t" ) - res & "Peak Time" [] ) / "GetTimestep"( @"t" ); END; FUNCTION "LowFlowReleaseFrom" ( OBJECT res ) RETURN_TYPE NUMERIC; SCALE_UNITS ""; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN IF ( IsNaN res & "Low Flow Release" [] ) THEN 0.00000000 "cfs" ELSE res & "Low Flow Release" [] ENDIF; END; FUNCTION "IsSlotLowFlowRelease" ( LIST result ) RETURN_TYPE BOOLEAN; SCALE_UNITS ""; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN ( GET @INDEX 1.00000000 FROM "Split"( STRINGIFY ( GET @INDEX 0.00000000 FROM result ), "." ) ) == "Low Flow Release"; END; FUNCTION "GetSlotNoNaNs" ( SLOT slot ) RETURN_TYPE NUMERIC; SCALE_UNITS ""; DESCRIPTION ""; ACTIVE TRUE; PRE_EXEC_DIAG FALSE; POST_EXEC_DIAG FALSE; BEGIN IF ( IsNaN slot [] ) THEN 0.00000000 "cfs" ELSE slot [] ENDIF; END; END; END