Ejemplo n.º 1
0
        /// <summary>
        /// Moves the water in time. The surface area is needed because of gas exchange
        /// </summary>
        /// <param name="TimeStep"></param>
        /// <param name="SurfaceArea"></param>
        public virtual void MoveInTime(TimeSpan TimeStep, double SurfaceArea)
        {
            if (Log)
            {
                LogString.AppendLine("MovedInTime " + TimeStep);
            }

            double GasExchangeConstant = 0.16 / 86400; // [m/s] Gleeson et al p.4

            foreach (var c in Chemicals.ToList())
            {
                double FirstOrderDegradationRate = 0;
                if (c.Key.IsVolatile)
                {
                    FirstOrderDegradationRate += -GasExchangeConstant * SurfaceArea / Volume;
                }
                if (c.Key.IsFirstOrderDegradable)
                {
                    FirstOrderDegradationRate += -c.Key.FirstOrderDegradationRate;
                }
                Chemicals[c.Key] = Math.Exp(FirstOrderDegradationRate * TimeStep.TotalSeconds) * c.Value;
            }

            WaterAge        += TimeStep;
            RelativeTimeTag += TimeStep;
        }