Пример #1
0
    public void RadonTest()
    {
      WaterPacket w = new WaterPacket(12);
      Chemical C =ChemicalFactory.Instance.GetChemical(ChemicalNames.Radon);
      Chemical cl = ChemicalFactory.Instance.GetChemical(ChemicalNames.Cl);

      //Checks old evaporation
      C.IsFirstOrderDegradable = false;

      w.AddChemical(C, 5);
      w.AddChemical(cl, 5);

      Assert.AreEqual(0.4167, w.GetConcentration(C),0.001);

      w.MoveInTime(TimeSpan.FromDays(1), 6);
      Assert.AreEqual(0.3846, w.GetConcentration(C),0.001);

      w.MoveInTime(TimeSpan.FromDays(1), 6);
      Assert.AreEqual(0.355, w.GetConcentration(C),0.001);

      //Checks new Reactions

      double d = w.GetConcentration(C);

      w.MoveInTime(TimeSpan.FromDays(3.8), ChemicalFactory.Instance.LakeReactions,0);
      Assert.AreEqual(d/2, w.GetConcentration(C), 0.01);
      Assert.AreEqual(5.0 / 12, w.GetConcentration(cl), 0.01);

    }
Пример #2
0
        /// <summary>
        /// Logs chemical
        /// </summary>
        /// <param name="Water"></param>
        /// <param name="Start"></param>
        /// <param name="End"></param>
        public void Log(IWaterPacket Water, DateTime Start, DateTime End)
        {
            WaterPacket wc = Water as WaterPacket;

            //Log chemicals if the water is based on WaterPacket
            if (wc != null)
            {
                if (LogAllChemicals)
                {
                    foreach (var c in wc.Chemicals.Keys)
                    {
                        TimestampSeries ts;
                        if (!ChemicalsToLog.TryGetValue(c, out ts))
                        {
                            ts = CreateChemicalSeries(c);
                        }
                        ts.AddSiValue(End, wc.GetConcentration(c));
                    }
                }
                else
                {
                    foreach (KeyValuePair <Chemical, TimestampSeries> ct in ChemicalsToLog)
                    {
                        ct.Value.AddSiValue(End, ((WaterPacket)Water).GetConcentration(ct.Key));
                    }
                }
            }

            //Log the water composition
            if (LogComposition)
            {
                foreach (var id in Water.Composition)
                {
                    TimestampSeries ts;
                    if (!CompositionLog.TryGetValue(id.Key, out ts))
                    {
                        ts = CreateCompositionTimeSeries(id.Key);
                    }
                    ts.AddValue(End, id.Value);
                }
            }
        }
Пример #3
0
    public void RoutingOfChemical()
    {
      Stream_Accessor s = new Stream_Accessor("s", 100, 1, 1);

      s.SetState("Initial", DateTime.Now, new WaterPacket(100));

      SinkSourceBoundary fb = new SinkSourceBoundary(50);
      s.Sources.Add(fb);
      WaterPacket Wcc = new WaterPacket(50);
      Chemical c = ChemicalFactory.Instance.GetChemical(ChemicalNames.Cl);
      Wcc.AddChemical(c, 1);

      fb.WaterSample = Wcc.DeepClone();

      double conc = Wcc.GetConcentration(c);
      Assert.AreEqual(1.0 / 50.0, conc, 0.000001);

      TimeSpan ts = new TimeSpan(0, 0, 1);

      s.Output.LogChemicalConcentration(c);

      s.AddWaterPacket(DateTime.Now, DateTime.Now.AddDays(1), Wcc.DeepClone());
      s.Update(s.CurrentTime.Add(ts));

      WaterPacket WccNew = (WaterPacket)s._waterInStream.Last();
      Assert.AreEqual(64.8721, WccNew.Volume, 0.0001);
      Assert.AreEqual(TimeSpan.FromSeconds(0.5), WccNew.WaterAge);
      Assert.AreEqual(conc, WccNew.GetConcentration(c));

      s.AddWaterPacket(DateTime.Now, DateTime.Now.AddDays(1), Wcc);
      s.Update(s.CurrentTime.Add(TimeSpan.FromDays(1)));

      Assert.AreEqual(0.0042, s.Output.ChemicalsToLog[c].Items[0].Value,1e-4);
      Assert.AreEqual(0.0078, s.Output.ChemicalsToLog[c].Items[1].Value, 1e-4);
      Assert.AreEqual(conc, s.Output.ChemicalsToLog[c].Items[2].Value);


    }