예제 #1
0
        public void AddStructureReachGetter(IEnumerable <string> reaches, string quantity = "Discharge")
        {
            var engineReachesToAdd = Simulator.EngineNet.Reaches.Where(r => reaches.Contains(r.LocationSpan.ID) && r.IsStructureReach);

            foreach (var engineReach in engineReachesToAdd)
            {
                var getterKey = engineReach.LocationSpan.ID + quantity;

                for (var gridPointIndex = 0; gridPointIndex < engineReach.GridPoints.Count; gridPointIndex++)
                {
                    //var gridPoint = engineReach.GridPoints[gridPointIndex];
                    //var getter = M1DEngine.Getter(engineReach, 1, ParseQuantity(quantity));
                    IDoubleGetter reachGetter = M1DEngine.Getter(engineReach, gridPointIndex, ParseQuantity(quantity));
                    if (reachGetter != null)
                    {
                        _reachStructureGetters[getterKey] = reachGetter;
                    }
                }

                if (!_reachStructureGetters.ContainsKey(getterKey))
                {
                    throw new Exception("Structure reach " + engineReach.LocationSpan.ID + " has no " + quantity + ".");
                }
            }

            ValidateAdd(_reachStructureGetters.Keys, reaches, quantity);
        }
예제 #2
0
        /// <summary>
        /// In PostTimeStepEvent event, update the weir coefficient
        /// Note that this could even be made time dependent.
        /// </summary>
        private void UpdateWeirCoefficients(DateTime time)
        {
            for (int i = 0; i < _weirCoefficients.Count; i++)
            {
                HonmaWeir     weir   = _weirCoefficients[i].Weir;
                XYTable       table  = _weirCoefficients[i].Coefficient;
                IDoubleGetter getter = _weirCoefficients[i].Getter;

                // Update weir coefficient
                if (getter != null)
                {
                    double upstreamWaterLevel = getter.GetValue();
                    double depthOverCrest     = upstreamWaterLevel - weir.CrestLevel;
                    weir.WeirCoefficient = table.YFromX(depthOverCrest, ExtrapolationTypes.Nearest);
                }
            }
        }