Ejemplo n.º 1
0
        public IWaterPacket GetSourceWater(DateTime Start, TimeSpan TimeStep)
        {
            foreach (var kvp in _concentrations)
            {
                ((WaterPacket)WaterSample).SetConcentration(kvp.Key, kvp.Value.GetSiValue(Start, Start.Add(TimeStep)));
            }

            if (OverrideFlowRate.HasValue)
            {
                _currentFlowRate = OverrideFlowRate.Value;
            }
            else if (TS != null)
            {
                _currentFlowRate = TS.GetSiValue(Start, Start.Add(TimeStep));
            }

            double _routedFlow = _currentFlowRate * TimeStep.TotalSeconds;

            //Could be a point
            XYPolygon geom = ContactGeometry as XYPolygon;

            if (geom != null)
            {
                _routedFlow *= geom.GetArea();
            }

            return(WaterSample.DeepClone(_routedFlow));
        }
Ejemplo n.º 2
0
        public void AddWaterSampleComputations(WaterSample computation)
        {
            object computations = this._Computations;

            lock (computations)
            {
                this._Computations.Add(computation);
            }
        }
Ejemplo n.º 3
0
        public void RemoveWaterSampleComputations(WaterSample computation)
        {
            object computations = this._Computations;

            lock (computations)
            {
                int num = this._Computations.IndexOf(computation);
                if (num != -1)
                {
                    if (num < this._ComputationIndex)
                    {
                        this._ComputationIndex--;
                    }
                    this._Computations.RemoveAt(num);
                }
            }
        }
Ejemplo n.º 4
0
        public IWaterPacket GetSourceWater(DateTime Start, TimeSpan TimeStep)
        {
            switch (FlowType)
            {
            case GWType.Darcy:
                CurrentFlowRate = ((XYPolygon)ContactGeometry).GetArea() * HydraulicConductivity * (GroundwaterHead - Connection.WaterLevel) / Distance;
                WaterFlow.AddSiValue(Start, Start.Add(TimeStep), CurrentFlowRate);
                break;

            case GWType.Flow:
                CurrentFlowRate = WaterFlow.GetSiValue(Start, Start.Add(TimeStep));
                break;

            default:
                break;
            }

            return(WaterSample.DeepClone(CurrentFlowRate * TimeStep.TotalSeconds));
        }
Ejemplo n.º 5
0
        public void Create()
        {
            if (this._Samples != null)
            {
                this.Destroy();
            }
            Water containingWater = this._Camera._ContainingWater;

            if (containingWater != null)
            {
                Camera cameraComponent = this._Camera.CameraComponent;
                this._Samples = new List <WaterSample>();
                WaterCameraSubmersion.CreatePlanePoints(cameraComponent, this._Subdivisions, this._Points);
                for (int i = 0; i < this._Points.Count; i++)
                {
                    WaterSample waterSample = new WaterSample(containingWater, WaterSample.DisplacementMode.Height, 0.4f);
                    waterSample.Start(this._Points[i]);
                    this._Samples.Add(waterSample);
                }
            }
        }
Ejemplo n.º 6
0
 private void RunSamplingTask()
 {
     try
     {
         while (this._Run)
         {
             WaterSample waterSample  = null;
             object      computations = this._Computations;
             lock (computations)
             {
                 if (this._Computations.Count != 0)
                 {
                     if (this._ComputationIndex >= this._Computations.Count)
                     {
                         this._ComputationIndex = 0;
                     }
                     waterSample = this._Computations[this._ComputationIndex++];
                 }
             }
             if (waterSample == null)
             {
                 Thread.Sleep(2);
             }
             else
             {
                 object obj = waterSample;
                 lock (obj)
                 {
                     waterSample.ComputationStep(false);
                 }
             }
         }
     }
     catch (Exception threadException)
     {
         this._ThreadException = threadException;
     }
 }
Ejemplo n.º 7
0
 public void ReceiveSinkWater(DateTime Start, TimeSpan TimeStep, IWaterPacket Water)
 {
     WaterSample.Add(Water);
     Output.Log(WaterSample, Start, Start.Add(TimeStep));
 }
Ejemplo n.º 8
0
 public IWaterPacket GetSourceWater(DateTime Start, TimeSpan TimeStep)
 {
     MoveInTime(Start, TimeStep);
     return(WaterSample.Substract(_exchangeRate * TimeStep.TotalSeconds));
 }