• Jason

Tony,

Thanks for posting in the forum. I developed a simple model that I think will help you with your problem and it seems useful enough in a general way that I decided to make a model example using this idea of moving a limited number of portable pumps around to a larger set of ponds using a priority system. In the below referenced model, you can change the number of ponds and pumps and also the frequency at which you move the pumps around. I like the idea of moving the pumps at a slower frequency to avoid oscillations. Please have a look and let me know if this is helpful for you.

Allocate Drain Pumps – GoldSim Help Center

-Jason

• Tony Marszalek

Jason

Thank you.  I will adapt to prioritising using the ponds with the least freeboard – I don’t think that will be too difficult but I will need to consider what to do if all  (or more than one) are full (zero freeboard).

We have the added complication that not all ponds are dewatered to the same destination (other storages).  If the destination storage is full then pumping will not occur from the given storage and the priority will shift down the list to the next one in the list that dewaters to a storage that is not full.  Hopefully that will be relatively easy to implement – any pointers would again be appreciated.

Tony

• Jason

Tony,

In regards to the issue of all ponds being full at the same time, I would trick the model by doing something different, which will probably achieve the same result. In the simple prototype I created, all the ponds have an implied upper bound of 100 m3 because the lookup table gives any reservoir at the 100 m3 level to be first priority. In your case, you could modify the lookup table to be a function of "percent full" instead of a hard-coded 100 m3. With that done, you can just reduce the upper bound a little so that drainage priority will lean to that reservoir. For example, in my case, the 1 reservoir with an upper bound set at 90 m3 instead of 100, would cause GoldSim to attempt to drain the 90m3 reservoir first even though all the reservoirs are the same size. The key for you is to have a new expression element that calculates the "percent full" for all reservoirs and then build your lookup table for that output instead of volume.

I thought about the need to control discharge to protect downstream requirements but didn't want to complicate things more than necessary so I ignored that. You can incorporate additional control beyond the percent full by modifying the expression in the Discrete Change element called "Move_Pumps" to have an If statement like this:

vector(if(downstream_ok, Volume_Priority_Table(Volume_Vector[row]), 11)

Where "downstream_ok" is a vector of conditions that you collect from outputs in your model that ask the question, Is it okay to accept water from this pond? This logic can be dependent on the volume in a downstream pond, for example.

Does that help?