Beispiel #1
0
        public void ReCalcNodeSRDH_Test()
        {
            int    numWD = 16;
            string DB_Load_LC_Before_Met = testingFolder + "\\Test_Load_LC_Before_Met.cfm";
            string DB_Load_LC_After_Met  = testingFolder + "\\Test_Load_LC_After_Met.cfm";

            NodeCollection  nodeList   = new NodeCollection();
            BinaryFormatter bin        = new BinaryFormatter();
            string          connBefore = nodeList.GetDB_ConnectionString(DB_Load_LC_Before_Met);
            string          connAfter  = nodeList.GetDB_ConnectionString(DB_Load_LC_After_Met);

            Nodes[] LC_Load_Before_Met = new Nodes[0]; // array of Nodes with SRDH calcs from model where Land Cover was loaded before the met import and map generation
            Nodes[] LC_Load_After_Met  = new Nodes[0]; // same as above but from model where Land Cover was loaded after the met import and map generation

            // Grab all Nodes with SRDH calcs from 'LC Load Before' model
            using (var context = new Continuum_EDMContainer(connBefore))
            {
                var node_db = from N in context.Node_table.Include("expo") select N;

                foreach (var N in node_db)
                {
                    int numRadii = N.expo.Count;

                    for (int i = 0; i < numRadii; i++)
                    {
                        if (N.expo.ElementAt(i).SR_Array != null)
                        {
                            int numNodes = LC_Load_Before_Met.Length;
                            Array.Resize(ref LC_Load_Before_Met, numNodes + 1);
                            LC_Load_Before_Met[numNodes]      = new Nodes();
                            LC_Load_Before_Met[numNodes].UTMX = N.UTMX;
                            LC_Load_Before_Met[numNodes].UTMY = N.UTMY;
                            LC_Load_Before_Met[numNodes].elev = N.elev;

                            MemoryStream MS3 = new MemoryStream(N.expo.ElementAt(i).SR_Array);
                            LC_Load_Before_Met[numNodes].AddExposure(N.expo.ElementAt(i).radius, N.expo.ElementAt(i).exponent, 1, numWD);
                            LC_Load_Before_Met[numNodes].expo[0].SR = new double[numWD];
                            LC_Load_Before_Met[numNodes].expo[0].SR = (double[])bin.Deserialize(MS3);

                            MS3 = new MemoryStream(N.expo.ElementAt(i).DH_Array);
                            LC_Load_Before_Met[numNodes].expo[0].dispH = new double[numWD];
                            LC_Load_Before_Met[numNodes].expo[0].dispH = (double[])bin.Deserialize(MS3);
                        }
                    }
                }
            }

            // Grab all Nodes with SRDH calcs from 'LC Load After' model
            using (var context = new Continuum_EDMContainer(connAfter))
            {
                var node_db = from N in context.Node_table.Include("expo") select N;

                foreach (var N in node_db)
                {
                    int numRadii = N.expo.Count;

                    for (int i = 0; i < numRadii; i++)
                    {
                        if (N.expo.ElementAt(i).SR_Array != null)
                        {
                            int numNodes = LC_Load_After_Met.Length;
                            Array.Resize(ref LC_Load_After_Met, numNodes + 1);
                            LC_Load_After_Met[numNodes]      = new Nodes();
                            LC_Load_After_Met[numNodes].UTMX = N.UTMX;
                            LC_Load_After_Met[numNodes].UTMY = N.UTMY;
                            LC_Load_After_Met[numNodes].elev = N.elev;

                            MemoryStream MS3 = new MemoryStream(N.expo.ElementAt(i).SR_Array);
                            LC_Load_After_Met[numNodes].AddExposure(N.expo.ElementAt(i).radius, N.expo.ElementAt(i).exponent, 1, numWD);
                            LC_Load_After_Met[numNodes].expo[0].SR = new double[numWD];
                            LC_Load_After_Met[numNodes].expo[0].SR = (double[])bin.Deserialize(MS3);

                            MS3 = new MemoryStream(N.expo.ElementAt(i).DH_Array);
                            LC_Load_After_Met[numNodes].expo[0].dispH = new double[numWD];
                            LC_Load_After_Met[numNodes].expo[0].dispH = (double[])bin.Deserialize(MS3);
                        }
                    }
                }
            }

            // Loop through nodes LC_Load_Before_Met and find same coords in LC_Load_After_Met and compare SR/DH
            for (int i = 0; i < LC_Load_Before_Met.Length; i++)
            {
                for (int j = 0; j < LC_Load_After_Met.Length; j++)
                {
                    if (LC_Load_Before_Met[i].UTMX == LC_Load_After_Met[j].UTMX && LC_Load_Before_Met[i].UTMY == LC_Load_After_Met[j].UTMY && LC_Load_Before_Met[i].expo[0].radius == LC_Load_After_Met[j].expo[0].radius)
                    {
                        for (int k = 0; k < numWD; k++)
                        {
                            Assert.AreEqual(LC_Load_Before_Met[i].expo[0].SR[k], LC_Load_After_Met[j].expo[0].SR[k], 0.00001, "Different SR" + LC_Load_Before_Met[i].UTMX.ToString() + "," + LC_Load_Before_Met[i].UTMY.ToString());
                            Assert.AreEqual(LC_Load_Before_Met[i].expo[0].dispH[k], LC_Load_After_Met[j].expo[0].dispH[k], 0.00001, "Different SR" + LC_Load_Before_Met[i].UTMX.ToString() + "," + LC_Load_Before_Met[i].UTMY.ToString());
                        }
                        break;
                    }
                }
            }
        }
        public void LCKeyOK_Test()
        {
            // Tests changing LC key after a met has been imported and a map has been created

            string DB_Change_LC_Before_Met = "Test_Change_LCKey_Before_Met.cfm";
            string DB_Change_LC_After_Met  = "Test_Change_LCKey_After_Met.cfm";

            NodeCollection  nodeList   = new NodeCollection();
            BinaryFormatter bin        = new BinaryFormatter();
            string          connBefore = nodeList.GetDB_ConnectionString(testingFolder + "\\" + DB_Change_LC_Before_Met);
            string          connAfter  = nodeList.GetDB_ConnectionString(testingFolder + "\\" + DB_Change_LC_After_Met);

            Nodes[] LC_Change_Before_Met = new Nodes[0]; // array of Nodes with SRDH calcs from model where Land Cover key was changed before the met import and map generation
            Nodes[] LC_Change_After_Met  = new Nodes[0]; // same as above but from model where Land Cover key was changed after the met import and map generation

            // Grab all Nodes with SRDH calcs from 'LC Key Change Before' model
            using (var context = new Continuum_EDMContainer(connBefore))
            {
                var node_db = from N in context.Node_table.Include("expo") select N;

                foreach (var N in node_db)
                {
                    int numRadii = N.expo.Count;

                    for (int i = 0; i < numRadii; i++)
                    {
                        if (N.expo.ElementAt(i).SR_Array != null)
                        {
                            int numNodes = LC_Change_Before_Met.Length;
                            Array.Resize(ref LC_Change_Before_Met, numNodes + 1);
                            LC_Change_Before_Met[numNodes]      = new Nodes();
                            LC_Change_Before_Met[numNodes].UTMX = N.UTMX;
                            LC_Change_Before_Met[numNodes].UTMY = N.UTMY;
                            LC_Change_Before_Met[numNodes].elev = N.elev;

                            MemoryStream MS3 = new MemoryStream(N.expo.ElementAt(i).SR_Array);
                            LC_Change_Before_Met[numNodes].AddExposure(N.expo.ElementAt(i).radius, N.expo.ElementAt(i).exponent, 1, 24);
                            LC_Change_Before_Met[numNodes].expo[0].SR = new double[24];
                            LC_Change_Before_Met[numNodes].expo[0].SR = (double[])bin.Deserialize(MS3);

                            MS3 = new MemoryStream(N.expo.ElementAt(i).DH_Array);
                            LC_Change_Before_Met[numNodes].expo[0].dispH = new double[24];
                            LC_Change_Before_Met[numNodes].expo[0].dispH = (double[])bin.Deserialize(MS3);
                        }
                    }
                }
            }

            // Grab all Nodes with SRDH calcs from 'LC Key Change After' model
            using (var context = new Continuum_EDMContainer(connAfter))
            {
                var node_db = from N in context.Node_table.Include("expo") select N;

                foreach (var N in node_db)
                {
                    int numRadii = N.expo.Count;

                    for (int i = 0; i < numRadii; i++)
                    {
                        if (N.expo.ElementAt(i).SR_Array != null)
                        {
                            int numNodes = LC_Change_After_Met.Length;
                            Array.Resize(ref LC_Change_After_Met, numNodes + 1);
                            LC_Change_After_Met[numNodes]      = new Nodes();
                            LC_Change_After_Met[numNodes].UTMX = N.UTMX;
                            LC_Change_After_Met[numNodes].UTMY = N.UTMY;
                            LC_Change_After_Met[numNodes].elev = N.elev;

                            MemoryStream MS3 = new MemoryStream(N.expo.ElementAt(i).SR_Array);
                            LC_Change_After_Met[numNodes].AddExposure(N.expo.ElementAt(i).radius, N.expo.ElementAt(i).exponent, 1, 24);
                            LC_Change_After_Met[numNodes].expo[0].SR = new double[24];
                            LC_Change_After_Met[numNodes].expo[0].SR = (double[])bin.Deserialize(MS3);

                            MS3 = new MemoryStream(N.expo.ElementAt(i).DH_Array);
                            LC_Change_After_Met[numNodes].expo[0].dispH = new double[24];
                            LC_Change_After_Met[numNodes].expo[0].dispH = (double[])bin.Deserialize(MS3);
                        }
                    }
                }
            }

            // Loop through nodes LC_Change_Before_Met and find same coords in LC_Change_After_Met and compare SR/DH
            for (int i = 0; i < LC_Change_Before_Met.Length; i++)
            {
                for (int j = 0; j < LC_Change_After_Met.Length; j++)
                {
                    if (LC_Change_Before_Met[i].UTMX == LC_Change_After_Met[j].UTMX && LC_Change_Before_Met[i].UTMY == LC_Change_After_Met[j].UTMY && LC_Change_Before_Met[i].expo[0].radius == LC_Change_After_Met[j].expo[0].radius)
                    {
                        for (int k = 0; k < 24; k++)
                        {
                            Assert.AreEqual(LC_Change_Before_Met[i].expo[0].SR[k], LC_Change_After_Met[j].expo[0].SR[k], 0.00001, "Different SR" + LC_Change_Before_Met[i].UTMX.ToString() + "," + LC_Change_Before_Met[i].UTMY.ToString());
                            Assert.AreEqual(LC_Change_Before_Met[i].expo[0].dispH[k], LC_Change_After_Met[j].expo[0].dispH[k], 0.00001, "Different SR" + LC_Change_Before_Met[i].UTMX.ToString() + "," + LC_Change_Before_Met[i].UTMY.ToString());
                        }
                        break;
                    }
                }
            }

            string    filename_before = testingFolder + "\\Test_Change_LCKey_Before_Met.cfm";
            string    filename_after  = testingFolder + "\\Test_Change_LCKey_After_Met.cfm";
            Continuum thisInstBefore  = new Continuum("");
            Continuum thisInstAfter   = new Continuum("");

            thisInstBefore.Open(filename_before);
            thisInstAfter.Open(filename_after);
            // Loop through met and turbine sites and compare SR/DH
            Met metBefore = thisInstBefore.metList.metItem[0];
            Met metAfter  = thisInstAfter.metList.metItem[0];

            for (int k = 0; k < 24; k++)
            {
                Assert.AreEqual(metBefore.expo[0].SR[k], metAfter.expo[0].SR[k], 0.00001, "Different SR");
                Assert.AreEqual(metBefore.expo[0].dispH[k], metAfter.expo[0].dispH[k], 0.00001, "Different displacement height");
            }

            for (int i = 0; i < thisInstAfter.turbineList.TurbineCount; i++)
            {
                Turbine turbineBefore = thisInstBefore.turbineList.turbineEsts[i];
                Turbine turbineAfter  = thisInstAfter.turbineList.turbineEsts[i];

                for (int k = 0; k < 24; k++)
                {
                    Assert.AreEqual(turbineBefore.expo[0].SR[k], turbineAfter.expo[0].SR[k], 0.00001, "Different SR");
                    Assert.AreEqual(turbineBefore.expo[0].dispH[k], turbineAfter.expo[0].dispH[k], 0.00001, "Different displacement height");
                }
            }
        }