Beispiel #1
0
        ///<summary>Computes time step to advance hydraulic simulation.</summary>
        private long TimeStep()
        {
            long tstep = net.HStep;

            long n = (Htime + net.PStart) / net.PStep + 1;
            long t = n * net.PStep - Htime;

            if (t > 0 && t < tstep)
            {
                tstep = t;
            }

            // Revise time step based on smallest time to fill or drain a tank
            t = Rtime - Htime;
            if (t > 0 && t < tstep)
            {
                tstep = t;
            }

            tstep = SimulationTank.MinimumTimeStep(_tanks, tstep);
            tstep = SimulationControl.MinimumTimeStep(net, _controls, Htime, tstep);

            if (_rules.Length > 0)
            {
                long step, htime;

                SimulationRule.MinimumTimeStep(
                    net,
                    _logger,
                    _rules,
                    _tanks,
                    Htime,
                    tstep,
                    _dsystem,
                    out step,
                    out htime);

                tstep = step;
                Htime = htime;
            }
            else
            {
                SimulationTank.StepWaterLevels(_tanks, net.FieldsMap, tstep);
            }

            return(tstep);
        }
Beispiel #2
0
 /// <summary>
 /// Remove the specified simulation rule.
 /// </summary>
 /// <param name="rule"></param>
 public void RemoveRule(SimulationRule rule)
 {
     _rules.Add(rule);
 }
Beispiel #3
0
 /// <summary>
 /// Add the specified simulation rule.
 /// </summary>
 /// <param name="rule"></param>
 public void AddRule(SimulationRule rule)
 {
     _rules.Add(rule);
 }