Example #1
0
        public void GetWeightsTestStepInterpolator()
        {
            double[] axis = Enumerable.Range(0, 24).Select(a => (double)a).ToArray();
            WeightProviders.StepFunctionInterpolation weightsProvider = new WeightProviders.StepFunctionInterpolation();
            DoubleEpsComparer dec = new DoubleEpsComparer(0.1);

            int start, stop;

            double[] weights = weightsProvider.GetWeights(axis, 0.0, 1.0, out start, out stop, dec);
            Assert.AreEqual(1, weights.Length);
            Assert.AreEqual(0, start);
            Assert.AreEqual(0, stop);

            weights = weightsProvider.GetWeights(axis, 0.0, 2.0, out start, out stop, dec);
            Assert.AreEqual(2, weights.Length);
            Assert.AreEqual(weights[0], weights[1]);
            Assert.AreEqual(0, start);
            Assert.AreEqual(1, stop);

            weights = weightsProvider.GetWeights(axis, 3.5, 4.5, out start, out stop, dec);
            Assert.AreEqual(2, weights.Length);
            Assert.AreEqual(weights[0], weights[1]);
            Assert.AreEqual(3, start);
            Assert.AreEqual(4, stop);

            weights = weightsProvider.GetWeights(axis, 3.5, 5.5, out start, out stop, dec);
            Assert.AreEqual(3, weights.Length);
            Assert.AreEqual(weights[0], weights[2]);
            Assert.AreEqual(weights[1], 2.0 * weights[2]);
            Assert.AreEqual(3, start);
            Assert.AreEqual(5, stop);

            weights = weightsProvider.GetWeights(axis, 0.7, 0.75, out start, out stop, dec);
            Assert.AreEqual(1, weights.Length);
            Assert.AreEqual(0, start);
            Assert.AreEqual(0, stop);

            weights = weightsProvider.GetWeights(axis, 5.75, 8.75, out start, out stop, dec);
            Assert.AreEqual(4, weights.Length);
            Assert.AreEqual(weights[1], weights[2]);
            Assert.AreEqual(weights[0], 0.25 * weights[1]);
            Assert.AreEqual(weights[3], 0.75 * weights[2]);
            Assert.AreEqual(5, start);
            Assert.AreEqual(8, stop);


            //out of range
            weights = weightsProvider.GetWeights(axis, 30.0, 31.1, out start, out stop, dec);
            Assert.AreEqual(0, weights.Length);

            weights = weightsProvider.GetWeights(axis, -2.0, -1.0, out start, out stop, dec);
            Assert.AreEqual(0, weights.Length);

            weights = weightsProvider.GetWeights(axis, 10.0, 30.0, out start, out stop, dec);
            Assert.AreEqual(0, weights.Length);
        }
Example #2
0
        public double GetRTGCV(double latmin, double latmax, double lonmin, double lonmax, int daystart, int daystop, bool isLeap)
        {
            if (lonmax > 180.0)
            {
                lonmax -= 180.0;
                lonmin -= 180.0;
            }

            Tuple <double, double, double, double> areaStart = null, areaStop = null;

            foreach (var t in this.Keys)
            {
                if (latmin > t.Item1 && latmin < t.Item3 && lonmin > t.Item2 && lonmin < t.Item4)
                {
                    areaStart = t;
                }
                if (latmax > t.Item1 && latmax < t.Item3 && lonmax > t.Item2 && lonmax < t.Item4)
                {
                    areaStop = t;
                }
            }

            if (areaStart == null || areaStop == null || areaStart != areaStop)
            {
                return(unVal);
            }

            double sum = 0;

            var    p = new WeightProviders.StepFunctionInterpolation();
            double startProj = DaysOfYearConversions.ProjectFirstDay(daystart, isLeap);
            double stopProj = DaysOfYearConversions.ProjectLastDay(daystop, isLeap);
            int    startIndex, stopIndex;
            var    weights = p.GetWeights(months, startProj, stopProj, out startIndex, out stopIndex);

            var area = this[areaStart];

            for (int i = startIndex; i <= stopIndex; i++)
            {
                sum += area[i % 12] * weights[i - startIndex];
            }
            return(sum / (stopIndex - startIndex + 1));
        }
Example #3
0
        public void BoundingBoxTestStepInterpolator()
        {
            WeightProviders.StepFunctionInterpolation lwp = new WeightProviders.StepFunctionInterpolation();
            double[] grid = System.Linq.Enumerable.Range(0, 10).Select(v => (double)v).ToArray();
            var      bb   = lwp.GetBoundingBox(grid, -1.0, -0.3);

            Assert.IsTrue(bb.IsSingular);

            bb = lwp.GetBoundingBox(grid, -1.0, 0.5);
            Assert.IsTrue(bb.IsSingular);

            bb = lwp.GetBoundingBox(grid, -1.0, 0.0);
            Assert.IsTrue(bb.IsSingular);

            bb = lwp.GetBoundingBox(grid, 0.5, 0.5);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(0, bb.last);

            bb = lwp.GetBoundingBox(grid, 0.0, 0.0);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(0, bb.last);

            bb = lwp.GetBoundingBox(grid, 0.0, 0.6);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(0, bb.last);

            bb = lwp.GetBoundingBox(grid, 0.5, 0.6);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(0, bb.last);

            bb = lwp.GetBoundingBox(grid, 0.5, 1.0);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(0, bb.last);

            bb = lwp.GetBoundingBox(grid, 0.5, 1.1);
            Assert.AreEqual(0, bb.first);
            Assert.AreEqual(1, bb.last);

            bb = lwp.GetBoundingBox(grid, 8.5, 8.5);
            Assert.AreEqual(8, bb.first);
            Assert.AreEqual(8, bb.last);

            bb = lwp.GetBoundingBox(grid, 7.9, 8.5);
            Assert.AreEqual(7, bb.first);
            Assert.AreEqual(8, bb.last);

            bb = lwp.GetBoundingBox(grid, 8.5, 9.0);
            Assert.AreEqual(8, bb.first);
            Assert.AreEqual(8, bb.last);

            bb = lwp.GetBoundingBox(grid, 9.0, 9.0);
            Assert.AreEqual(9, bb.first);
            Assert.AreEqual(9, bb.last);

            bb = lwp.GetBoundingBox(grid, 9.0, 10.0);
            Assert.IsTrue(bb.IsSingular);

            bb = lwp.GetBoundingBox(grid, 8.5, 10.0);
            Assert.IsTrue(bb.IsSingular);

            bb = lwp.GetBoundingBox(grid, 9.1, 10.0);
            Assert.IsTrue(bb.IsSingular);
        }