///<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); }