Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Prioritising Shortfalls
Introduction
This specification has been created to try and develop a simple and effective system that allows users in Source to specify how shortfalls are prioritised between different demands in Source. Currently Source tries to shortfall all demands equally within the model, this specification will hopefully provide a solution to address the following situations encountered in water resource models:

...

  • n number of priorities specified
  • pNode Node priority applies to things which can place orders
  • dsOrder(min) ds order at a node at min flow time
  • order(min) order propagated upstream at min flow time
  • nPriority(thumbs down) (n) output array of n priorities for the node
  • dsPriority(thumbs down) array (n) array of n priorities being passed into the node
  • sumDSPriorityG sum of dsPriority(thumbs down) (n) where n < pNode
  • sumDSPriorityGE sum of dsPriority(thumbs down) where (n) where n <= pNode
  • sumDSPriorityL sum of dsPriority(thumbs down) where (n) where n > pNode
  • sumDSPriorityLE sum of dsPriority(thumbs down) where (n) where n >= pNode
  • sumnPriorityG sum of nPriority(thumbs down) where (n) where n < p
  • MinFlowReq minimum flow requirement
  • SupplyPointOrderOrder generated by water user and passed to supply point
  • dsMainPriority(p) Priorities arriving at a splitter from the main branch
  • dsMainOrder Order arriving at a splitter from the main branch
  • dsEffPriority(p) Priorities arriving at a splitter from the effluent branch
  • dsEffOrder Order arriving at a splitter from the effluent branch

...

  1. Loop on priorities p = 0 to n
  2. If the MinFlowReq >= dsOrder Then
    1. If p < pNode then nPriority(p) = dsPriority(p)*dsOrder/MinFlowReq
    2. If p = pNode then
      1. sumDSPriorityLE = sum of dsPriority(thumbs down) (n) where n >= p
      2. nPriority(p) = ((MinFlowReq – dsOrder) + sumDSPriorityLE* dsOrder)/MinFlowReq
    3. If p > pNode then nPriority(p) = 0
  3. If the MinFlowReq < dsOrder Then
    1. sumDSPriorityGE = sum of dsPriority(thumbs down) (n) where n <= p
    2. If p <= pNode then
      1. sumDSPriorityG = sum of dsPriority(thumbs down) (n) where n < p
      2. nPriority(p) = sumDSPriorityGE*dsOrder >= MinFlowReq ? dsPriority(p)*dsOrder/usOrder : (MinFowReq- sumDSPriorityG *dsOrder)/usOrder
    3. If p > Node(p) then
      1. sumDSPriorityL = sum of dsPriority(thumbs down) where n > p
      2. nPriority(p) = nPrioirity(p)/ sumDSPriorityL*(1- sumDSPriorityGE)


Supply Point
There are essentially four scenarios in how a supply point node can be configured for the rules based-ordering, shown in Table 1. Note that if a Supply Point is selected as groundwater then it should not be part of the ordering network i.e. it should not be allowed to generate orders (this does not appear to happen in the model, maybe more validation for that setting?)
As the Supply Point can extract water from the system we need to consider how the priorities affect both the order phase and the flow phase.

Anchor
_Ref411330922
_Ref411330922
Table 1 Supply Point configuration

Scenario

Allow Order

Extract Water

Notes

1

True

True

Standard case

2

True

False

Just restrict the extraction in the flow phase – should not be an issue

3

False

True

Water will be extracted independently of the priorities

4

False

False

Nothing occurs


Order Phase
Adjustment of orders will only occur when "Allow Order" has been selected. If

...

  1. If "Extract Water " = True Then
    1. Loop on priorities p = 0 to n
    2. sumnPriorityG = sum of nPriority(thumbs down) (n) where p < pNode
    3. Max(0,Min(SupplyPointOrder, (UpstreamFlow- (sumnPriorityGOrder))(SupplyPointOrder/(nPriority(p)*Order))))
  2. If "Extract Water" = False Then Continue

...

  1. Pass Orders Through – simply sum the volumes at each priority level across all outlets and divide by total volume being passed up all outlets to get proportions, assume evap/seepage does not effect storage ratios

 

  1. Re-regulating the orders – Far more complex as we have a number of issues
    1. Downstream orders
    2. Storage losses
    3. Different upstream min order time
    4. Operational targets being met

...

  1. If "PassThroughOrder" = true Then
    1. sumOutletOrder = Sum the total order from all outlets
    2. Loop on priorities p = 0 to n
      1. Loop on outlets
      2. OutletOrders(p) += dsOrder(p) * OutletOrder
      3. nPriority(p) = OutletOrders(p)/ sumOutletOrder

 

  1. If "PassThroughOrder" = false Then

...

  1. If MaxOrder < dsOrder Then
    1. Loop on priorities p = 0 to n
    2. sumDSPriorityG = sum of dsPriority(thumbs down) (n) where n < p
    3. If(sumDSPriorityG*dsOrder>MaxOrder,0,Min(MaxOrder - sumDSPriorityG*dsOrder, dsPriority(p)*dsOrder/MaxOrder))
  2. If MaxOrder > dsOrder Then…. For all p nPriority(p) = dsPriority(p)

...