コード例 #1
0
 public BedResistanceFormulaBase(EngineNet engineNet) : base(engineNet)
 {
     CoefficientA      = 0.0;
     CoefficientB      = 1.0;
     MinimumResistance = 0.0;
     MaximumResistance = Double.MaxValue;
 }
コード例 #2
0
 public void UpdatePostHDValues()
 {
     {
         double    sum       = 0;
         EngineNet engineNet = _engineNet;
         for (int i = 0; i < engineNet.Nodes.Count; i++)
         {
             //if (NodesData[i] == null) continue;
             var engineNodeSewer = engineNet.Nodes[i] as EngineNodeVolume;
             if (engineNodeSewer == null)
             {
                 continue;
             }
             IHDNode hdNode = _hdModule.GetNode(engineNodeSewer);
             if (hdNode == null)
             {
                 continue;
             }
             double volume = engineNodeSewer.GetVolume(hdNode.WaterLevelNp1);
             _volPostHd.NodesData[i].Value = volume;
             sum += volume;
         }
         for (int i = 0; i < engineNet.Reaches.Count; i++)
         {
             IEngineDataReach <double> reachData = _volPostHd.ReachesData[i];
             if (reachData == null)
             {
                 continue;
             }
             IHDReach hdReach = _hdModule.GetReach(engineNet.Reaches[i]);
             if (hdReach == null)
             {
                 continue;
             }
             for (int j = 0; j < reachData.IndexList.Length; j++)
             {
                 int           jgp = reachData.IndexList[j];
                 IHDHGridPoint hgp = hdReach.GridPoints[jgp] as IHDHGridPoint;
                 if (hgp == null)
                 {
                     reachData[j] = 0;
                 }
                 else
                 {
                     reachData[j] = hgp.WaterVolumeNp1;
                     sum         += hgp.WaterLevelNp1;
                 }
             }
         }
         // Store total
         GenericData[0] = sum;
     }
 }
コード例 #3
0
        ///<summary>
        /// Create helper class for calculating total inflow to a reach
        ///</summary>
        ///<param name="engineNet"></param>
        public static DAWaterVolumeChangeCalculator Create(EngineNet engineNet)
        {
            DAWaterVolumeChangeCalculator res = new DAWaterVolumeChangeCalculator(engineNet, QuantVolChangeDa);

            res.SetupDataForNodes(engineNet);
            res.SetupDataForReaches(engineNet, (gp) => (gp is HGridPoint));
            res.GenericData = new EngineDataGeneric <double>()
            {
                Values = new double[1]
            };

            return(res);
        }
コード例 #4
0
        private void ControllerOnControllerEvent(object sender, ControllerEventArgs e)
        {
            if (e.State != ControllerState.Prepared)
            {
                return;
            }

            var controller = (IMike1DController)sender;

            _engineNet = controller.EngineNet;

            CreateBedResistanceCalculators();
            InitializeBedResistanceCalculators();

            _engineNet.PostTimeStepEvent += ChangeBedResistance;
        }
コード例 #5
0
        internal DAWaterVolumeChangeCalculator(EngineNet engineNet, IQuantity quantity)
            : base(engineNet, quantity)
        {
            _hdModule = engineNet.HDModule;

            _volPostHd = new EngineDataItemAll <double>(engineNet, new Quantity());
            _volPostHd.SetupDataForNodes(engineNet);
            _volPostHd.SetupDataForReaches(engineNet, (gp) => (gp is HGridPoint));
            _volPostHd.GenericData = new EngineDataGeneric <double>()
            {
                Values = new double[1]
            };

            _volAccumulated = new EngineDataItemAll <double>(engineNet, QuantAccVolChangeDA);
            _volAccumulated.SetupDataForNodes(engineNet);
            _volAccumulated.SetupDataForReaches(engineNet, (gp) => (gp is HGridPoint));
            _volAccumulated.GenericData = new EngineDataGeneric <double>()
            {
                Values = new double[1]
            };
            engineNet.DataModule.AddDataItem(_volAccumulated);
        }
コード例 #6
0
        private void ControllerOnControllerEvent(object sender, ControllerEventArgs e)
        {
            if (e.State == ControllerState.Initialized)
            {
                _mike1dController = (Mike1DController)sender;
                _mike1dController.Mike1DData.ResultSpecifications[0].WhatAddUnique(DAWaterVolumeChangeCalculator.QuantVolChangeDa);
                _mike1dController.Mike1DData.ResultSpecifications[0].WhatAddUnique(DAWaterVolumeChangeCalculator.QuantAccVolChangeDA);
            }

            if (e.State == ControllerState.Preparing)
            {
                _engineNet = _mike1dController.EngineNet;
                CreateVolCalculator(_engineNet);
                _engineNet.EvaluateHDImplicitSourcesEvent += PostHDTimeStepEvent;
            }

            if (e.State == ControllerState.Finalizing)
            {
                string totalAddedWater = _daWaterVolumeChangeCalculator.GetAccumulatedAddedVolume().ToString();
                _mike1dController.DiagnosticsHandler.NewMessage(DiagnosticsHandler.MessageType.Info, "DA - Total added water volume: " + totalAddedWater + " m3");
            }
        }
コード例 #7
0
 public TableBedResistance(EngineNet engineNet) : base(engineNet)
 {
 }
コード例 #8
0
 public FormulaVelocity(EngineNet engineNet) : base(engineNet)
 {
 }
コード例 #9
0
 public FormulaHydraulicDepth(EngineNet engineNet) : base(engineNet)
 {
 }
コード例 #10
0
 public FormulaVelocityHydraulicRadius(EngineNet engineNet) : base(engineNet)
 {
 }
コード例 #11
0
 public BedResistanceCalculatorBase(EngineNet engineNet)
 {
     _engineNet = engineNet;
 }
コード例 #12
0
 public void CreateVolCalculator(EngineNet engineNet)
 {
     _daWaterVolumeChangeCalculator = DAWaterVolumeChangeCalculator.Create(engineNet);
     engineNet.DataModule.AddDataItem(_daWaterVolumeChangeCalculator);
 }
コード例 #13
0
 /// <inheritdoc />
 public override void UpdateValues()
 {
     // if pull version, values are extracted when requested, and no action is required here.
     // If not pull, this needs to update the data and store it.
     {
         double    sum       = 0;
         EngineNet engineNet = _engineNet;
         for (int i = 0; i < engineNet.Nodes.Count; i++)
         {
             //if (NodesData[i] == null) continue;
             var engineNodeSewer = engineNet.Nodes[i] as EngineNodeVolume;
             if (engineNodeSewer == null)
             {
                 continue;
             }
             IHDNode hdNode = _hdModule.GetNode(engineNodeSewer);
             if (hdNode == null)
             {
                 continue;
             }
             double volumeN      = _volPostHd.NodesData[i].Value;
             double volumeNp1    = engineNodeSewer.GetVolume(hdNode.WaterLevelNp1);
             double volumechange = volumeNp1 - volumeN;
             sum         += volumechange;
             NodesData[i] = volumechange;
             _volAccumulated.NodesData[i].Value += volumechange;
         }
         for (int i = 0; i < engineNet.Reaches.Count; i++)
         {
             IEngineDataReach <double> reachDataPostHD = _volPostHd.ReachesData[i];
             IEngineDataReach <double> reachDataAcc    = _volAccumulated.ReachesData[i];
             IEngineDataReach <double> reachData       = ReachesData[i];
             if (reachData == null)
             {
                 continue;
             }
             IHDReach hdReach = _hdModule.GetReach(engineNet.Reaches[i]);
             if (hdReach == null)
             {
                 continue;
             }
             for (int j = 0; j < reachData.IndexList.Length; j++)
             {
                 int           jgp = reachData.IndexList[j];
                 IHDHGridPoint hgp = hdReach.GridPoints[jgp] as IHDHGridPoint;
                 if (hgp == null)
                 {
                     reachData[j] = 0;
                 }
                 else
                 {
                     double volumeN      = reachDataPostHD[j];
                     double volumeNp1    = hgp.WaterVolumeNp1;
                     double volumeChange = volumeNp1 - volumeN;
                     sum             += volumeChange;
                     reachData[j]     = volumeChange;
                     reachDataAcc[j] += volumeChange;
                 }
             }
         }
         // Store total
         GenericData[0] = sum;
         _volAccumulated.GenericData[0] += sum;
     }
 }