Beispiel #1
0
        public static Series HydrometRuleCurve(string curveName,Series residual)
        {
            var rval = new Series();
            rval.TimeInterval = TimeInterval.Daily;

            if (residual.Count == 0)
                return rval;

            var m_ruleCurve = new HydrometRuleCurve(curveName);

            DateTime t = residual[0].DateTime.Date;
            DateTime t2 = residual.MaxDateTime.Date;

            if (t2 > DateTime.Now.Date.AddDays(-1))
                t2 = DateTime.Now.Date.AddDays(-1);

            var req = Point.MissingValueFlag;
            string flag = "";
            while (t <= t2)
            {
                req = m_ruleCurve.LookupRequiredSpace(t, residual[t].Value, out flag);

                rval.Add(t,req);
                t = t.AddDays(1);
            }

            return rval;
        }
Beispiel #2
0
        /// <summary>
        /// Residual is forecast minus QU
        /// </summary>
        private void ComputeResidualAndRequiredSpace()
        {
            SpaceRequired.Clear();
            SpaceRequired.Name = "Space Required";
            Residual.Clear();
            Residual.Name = "Residual";
            DateTime t     = _t1;
            double   resid = 0; // 998877;

            int wy = t.Year;

            if (t.Month > 9)
            {
                wy++;
            }



            m_ruleCurve = RuleCurveFactory.Create(controlPoint, wy);

            while (t <= _t2)
            {
                if (controlPoint.FillType == FillType.Variable)
                {
                    resid = ResetResidualBasedOnForecast(t, resid);

                    if (resid != HydrometRuleCurve.MissingValue && t <= qu.MaxDateTime)
                    {
                        var quTemp = qu[t].Value;
                        if (quTemp < 0)
                        {
                            quTemp = 0;
                        }
                        resid = resid - quTemp * 1.98347;
                        if (resid < 0)
                        {
                            resid = 0;
                        }

                        Residual.Add(t, resid);
                    }
                    else
                    {
                        Residual.AddMissing(t);
                    }
                }
                else
                {
                    resid = HydrometRuleCurve.MissingValue;
                }
                var t2 = t;
                if (t.Month == 2 && t.Day == 29)
                {
                    t2 = t.AddDays(-1);
                }
                string flag = "";
                double req  = 0;

                req = m_ruleCurve.LookupRequiredSpace(t2, resid, out flag);

                if (req == HydrometRuleCurve.MissingValue)
                {
                    SpaceRequired.AddMissing(t);
                }
                else
                {
                    req = req * controlPoint.PercentSpace / 100.0;
                    if (req < 0)
                    {
                        req = 0;
                    }
                    SpaceRequired.Add(t, req);
                }
                flags.Add(flag);

                t = t.AddDays(1);
            }
        }