Ejemplo n.º 1
0
        public void TestMVTrackerWithNullMixtures()
        {
            Highpoint.Sage.SimCore.Model model = new Highpoint.Sage.SimCore.Model("MVTTracker model");
            BasicReactionSupporter       brs   = new BasicReactionSupporter();

            InitializeForTesting(brs);

            Mixture current = new Mixture(model, "current", Guid.NewGuid());

            current.AddMaterial(brs.MyMaterialCatalog["Water"].CreateMass(150, 30));
            current.AddMaterial(brs.MyMaterialCatalog["Aluminum Hydroxide"].CreateMass(200, 35));

            MassVolumeTracker cmvt = new MassVolumeTracker(brs.MyReactionProcessor);

            cmvt.SetInitialMixture(null);
            cmvt.SetInflowMixture(null);
            cmvt.SetOutflowMixture(null);
            cmvt.SetVesselCapacity(1000);

            cmvt.Process();

            //_Debug.WriteLine("Temperatures: " + cmvt.TemperatureHistory.ToString());
            _Debug.WriteLine("Masses      : " + cmvt.MassHistory.ToString());
            _Debug.WriteLine("Volumes     : " + cmvt.VolumeHistory.ToString());

            _Debug.Assert(cmvt.MassHistory.ToString().Equals("[0/0/0/0]"));
            _Debug.Assert(cmvt.VolumeHistory.ToString().Equals("[0/0/0/0]"));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Loads the reaction processor in the model with sample reactions.
        /// </summary>
        /// <param name="brs">The instance of ISupportsReactions that we will load..</param>
        private static void LoadSampleReactions(BasicReactionSupporter brs)
        {
            Reaction r1 = new Reaction(null, "Reaction 1", Guid.NewGuid());

            r1.AddReactant(brs.MyMaterialCatalog["Caustic Soda"], 0.5231);
            r1.AddReactant(brs.MyMaterialCatalog["Hydrochloric Acid"], 0.4769);
            r1.AddProduct(brs.MyMaterialCatalog["Water"], 0.2356);
            r1.AddProduct(brs.MyMaterialCatalog["Sodium Chloride"], 0.7644);
            brs.MyReactionProcessor.AddReaction(r1);

            Reaction r2 = new Reaction(null, "Reaction 2", Guid.NewGuid());

            r2.AddReactant(brs.MyMaterialCatalog["Sulfuric Acid"], 0.533622);
            r2.AddReactant(brs.MyMaterialCatalog["Potassium Hydroxide"], 0.466378);
            r2.AddProduct(brs.MyMaterialCatalog["Water"], 0.171333);
            r2.AddProduct(brs.MyMaterialCatalog["Potassium Sulfate"], 0.828667);
            brs.MyReactionProcessor.AddReaction(r2);

            Reaction r3 = new Reaction(null, "Reaction 3", Guid.NewGuid());

            r3.AddReactant(brs.MyMaterialCatalog["Caustic Soda"], 0.459681368);
            r3.AddReactant(brs.MyMaterialCatalog["Nitrous Acid"], 0.540318632);
            r3.AddProduct(brs.MyMaterialCatalog["Water"], 0.207047552);
            r3.AddProduct(brs.MyMaterialCatalog["Sodium Nitrite"], 0.792952448);
            brs.MyReactionProcessor.AddReaction(r3);

            Reaction r4 = new Reaction(null, "Reaction 4", Guid.NewGuid());

            r4.AddReactant(brs.MyMaterialCatalog["Potassium Hydroxide"], 0.544102);
            r4.AddReactant(brs.MyMaterialCatalog["Nitrous Acid"], 0.455898);
            r4.AddProduct(brs.MyMaterialCatalog["Water"], 0.174698);
            r4.AddProduct(brs.MyMaterialCatalog["Potassium Nitrite"], 0.825302);
            brs.MyReactionProcessor.AddReaction(r4);
        }
            public TCTestJig(double tSrc, double tMix, double tAmb, double tSet, double rampRatePerMinute, double err, TemperatureControllerMode tcMode, bool tcEnabled)
            {
                BasicReactionSupporter brs = new BasicReactionSupporter();

                Initialize(brs);
                m_mixture = new Mixture(null, "Test Mixture");
                brs.MyReactionProcessor.Watch(m_mixture);
                Container container = new Container(1000, m_mixture);                // Container full volume is 1000 liters.

                m_tempController = new TemperatureController(container);

                m_mixture.AddMaterial(brs.MyMaterialCatalog["Water"].CreateMass(250, tMix));          // Add 250 kg.
                m_mixture.AddMaterial(brs.MyMaterialCatalog["Sodium Nitrite"].CreateMass(100, tMix)); // Add 100 kg NaNO2.

                m_tempController.AmbientTemperature = tAmb;                                           // degreeC

                // Error band functionality has been obsoleted.
                //m_tempController.ErrorBand = err;         // +/- err degreeC dead band.
                m_err = err;                                             // Used for acceptability of non-precise results.

                m_tempController.SetAmbientThermalConductance(.30, .25); // .25 W/degreeC
                m_tempController.SetAmbientThermalConductance(.60, .50); // .50 W/degreeC
                m_tempController.SetAmbientThermalConductance(.90, .75); // .75 W/degreeC
                m_tempController.SetThermalConductance(.30, .40);        // .4 W/degreeC
                m_tempController.SetThermalConductance(.60, .80);        // .8 W/degreeC
                m_tempController.SetThermalConductance(.90, .120);       // 1.2 W/degreeC

                m_tempController.TCEnabled             = tcEnabled;      // Temperature control system is on.
                m_tempController.TCMode                = tcMode;         // Temperature control system maintains a constant deltaT, or a constant tSrc.
                m_tempController.TCSetpoint            = tSet;
                m_tempController.TCSrcTemperature      = tSrc;           // Syltherm (e.g.) temperature.
                m_tempController.TCSrcDelta            = tSrc;           // To be used if/when the system is in constant delta mode.
                m_tempController.TCTemperatureRampRate = new TemperatureRampRate(5.0, TimeSpan.FromMinutes(1));
            }
Ejemplo n.º 4
0
        [TestMethod] public void TestPersistenceChemistryStorage()
        {
            BasicReactionSupporter brs = new BasicReactionSupporter();

            Initialize(brs);
            XmlSerializationContext xsc = new XmlSerializationContext();

            xsc.StoreObject("Chemistry", brs);

            xsc.Save(Highpoint.Sage.Utility.DirectoryOperations.GetAppDataDir() + "chemistry.xml");
        }
            private void Initialize(BasicReactionSupporter brs)
            {
                MaterialCatalog   mcat = brs.MyMaterialCatalog;
                ReactionProcessor rp   = brs.MyReactionProcessor;

                //                        Model  Name    Guid           SpecGrav SpecHeat
                mcat.Add(new MaterialType(null, "Water", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Hydrochloric Acid", Guid.NewGuid(), 1.1890, 2.5500, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Caustic Soda", Guid.NewGuid(), 2.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Sodium Chloride", Guid.NewGuid(), 2.1650, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Sulfuric Acid 98%", Guid.NewGuid(), 1.8420, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Potassium Hydroxide", Guid.NewGuid(), 1.3000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Potassium Sulfate", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Nitrous Acid", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Sodium Nitrite", Guid.NewGuid(), 2.3800, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Potassium Nitrite", Guid.NewGuid(), 1.9150, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Aluminum Hydroxide", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Ammonia", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Ammonium Hydroxide", Guid.NewGuid(), 1.0000, 4.1800, MaterialState.Liquid));
                mcat.Add(new MaterialType(null, "Bromine", Guid.NewGuid(), 3.1200, 4.1800, MaterialState.Liquid));

                Reaction r1 = new Reaction(null, "Reaction 1", Guid.NewGuid());

                r1.AddReactant(mcat["Caustic Soda"], 0.5231);
                r1.AddReactant(mcat["Hydrochloric Acid"], 0.4769);
                r1.AddProduct(mcat["Water"], 0.2356);
                r1.AddProduct(mcat["Sodium Chloride"], 0.7644);
                rp.AddReaction(r1);

                Reaction r2 = new Reaction(null, "Reaction 2", Guid.NewGuid());

                r2.AddReactant(mcat["Sulfuric Acid 98%"], 0.533622);
                r2.AddReactant(mcat["Potassium Hydroxide"], 0.466378);
                r2.AddProduct(mcat["Water"], 0.171333);
                r2.AddProduct(mcat["Potassium Sulfate"], 0.828667);
                rp.AddReaction(r2);

                Reaction r3 = new Reaction(null, "Reaction 3", Guid.NewGuid());

                r3.AddReactant(mcat["Caustic Soda"], 0.459681368);
                r3.AddReactant(mcat["Nitrous Acid"], 0.540318632);
                r3.AddProduct(mcat["Water"], 0.207047552);
                r3.AddProduct(mcat["Sodium Nitrite"], 0.792952448);
                rp.AddReaction(r3);

                Reaction r4 = new Reaction(null, "Reaction 4", Guid.NewGuid());

                r4.AddReactant(mcat["Potassium Hydroxide"], 0.544102);
                r4.AddReactant(mcat["Nitrous Acid"], 0.455898);
                r4.AddProduct(mcat["Water"], 0.174698);
                r4.AddProduct(mcat["Potassium Nitrite"], 0.825302);
                rp.AddReaction(r4);
            }
Ejemplo n.º 6
0
        public void Init()
        {
            m_brs = new BasicReactionSupporter();
            m_computedVaporPressureIn = new Hashtable();

            string testDataDir = (Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? ".") + @"\TestData\";

            _propertiesFile = testDataDir + @"\PureComponentProperties.csv";
            Assert.IsTrue(File.Exists(_propertiesFile), "Properties data file not found - " + _propertiesFile);

            _testDataFile = testDataDir + @"\emissionTest_12345-10.xml";
            Assert.IsTrue(File.Exists(_testDataFile), "Test data file not found - " + _testDataFile);


            string[][] data = Load(_propertiesFile);

            foreach (string[] row in data)
            {
                string name                = row[0];
                string chemAbstractNum     = row[1];
                string classification      = row[2];
                double densityGramPerLiter = double.Parse(row[3]);
                double densityLbsPerGal    = double.Parse(row[4]);
                double molWt               = double.Parse(row[5]);
                //double diffusivityInAir = double.Parse(row[6]);
                string henrysLawConstant = row[7];
                string antoineA          = row[8];
                string antoineB          = row[9];
                string antoineC          = row[10];
                double calcVPmmhg        = double.Parse(row[11]);
                double calcVP_psi        = double.Parse(row[12]);

                double       specGrav = densityGramPerLiter / 1000.0;           // kg/liter equiv to SpecGrav.
                MaterialType mt       = new MaterialType(null, name, Guid.NewGuid(), specGrav, 1.0, MaterialState.Liquid, molWt, 1.0);
                if (antoineA != "" && antoineB != "" && antoineC != "")
                {
                    mt.SetAntoinesCoefficients3(double.Parse(antoineA), double.Parse(antoineB), double.Parse(antoineC), PressureUnits.mmHg, TemperatureUnits.Celsius);
                }

                if (mt.Name.Equals("Hydrazine"))
                {
                    mt.SetAntoinesCoefficientsExt(76.858, -7245.2, 0, 0, -8.22, .0061557, 1, double.NaN, double.NaN);
                }
                m_brs.MyMaterialCatalog.Add(mt);
                m_computedVaporPressureIn.Add(mt.Name, calcVPmmhg);
            }

            MaterialType mt2 = new MaterialType(null, "Unknown", Guid.NewGuid(), 1.0, 1.0, MaterialState.Liquid, 196.0, 1.0);

            m_brs.MyMaterialCatalog.Add(mt2);
        }
Ejemplo n.º 7
0
        [TestMethod] public void TestPersistenceWaterStorage()
        {
            MaterialType mt = new MaterialType(null, "Water", Guid.NewGuid(), 1.234, 4.05, MaterialState.Liquid, 18.0, 1034);

            BasicReactionSupporter brs = new BasicReactionSupporter();

            brs.MyMaterialCatalog.Add(mt);

            IMaterial water = mt.CreateMass(1500, 35);

            XmlSerializationContext xsc = new XmlSerializationContext();

            xsc.StoreObject("Water", water);

            xsc.Save(Highpoint.Sage.Utility.DirectoryOperations.GetAppDataDir() + "water.xml");

            xsc.Reset();

            xsc.StoreObject("MC", brs.MyMaterialCatalog);

            xsc.Save(Highpoint.Sage.Utility.DirectoryOperations.GetAppDataDir() + "mc.xml");
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Exercises an MVTTracker.
        /// </summary>
        [TestMethod] public void TestMVTTracker()
        {
            Highpoint.Sage.SimCore.Model model = new Highpoint.Sage.SimCore.Model("MVTTracker model");
            BasicReactionSupporter       brs   = new BasicReactionSupporter();

            InitializeForTesting(brs);

            Mixture current = new Mixture(model, "current", Guid.NewGuid());

            current.AddMaterial(brs.MyMaterialCatalog["Water"].CreateMass(150, 30));
            current.AddMaterial(brs.MyMaterialCatalog["Aluminum Hydroxide"].CreateMass(200, 35));

            Mixture inflow = new Mixture(model, "inflow", Guid.NewGuid());

            inflow.AddMaterial(brs.MyMaterialCatalog["Acetone"].CreateMass(1500, 70));
            inflow.AddMaterial(brs.MyMaterialCatalog["Hexane"].CreateMass(2000, 90));

            Mixture outflow = new Mixture(model, "inflow", Guid.NewGuid());

            outflow.AddMaterial(brs.MyMaterialCatalog["Acetone"].CreateMass(1400, 17));
            outflow.AddMaterial(brs.MyMaterialCatalog["Hexane"].CreateMass(1900, 17));
            outflow.AddMaterial(brs.MyMaterialCatalog["Aluminum Hydroxide"].CreateMass(200, 17));

            MassVolumeTracker cmvt = new MassVolumeTracker(brs.MyReactionProcessor);

            cmvt.SetInitialMixture(current);
            cmvt.SetInflowMixture(inflow);
            cmvt.SetOutflowMixture(outflow);
            cmvt.SetVesselCapacity(1000);

            cmvt.Process();

            //_Debug.WriteLine("Temperatures: " + cmvt.TemperatureHistory.ToString());
            _Debug.WriteLine("Masses      : " + cmvt.MassHistory.ToString());
            _Debug.WriteLine("Volumes     : " + cmvt.VolumeHistory.ToString());
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Initializes the specified model by populating the material catalog and reaction
 /// processor with sample material types and reactions.
 /// </summary>
 /// <param name="brs">The instance of ISupportsReactions that we will load..</param>
 private static void InitializeForTesting(BasicReactionSupporter brs)
 {
     LoadSampleCatalog(brs.MyMaterialCatalog);
     LoadSampleReactions(brs);
 }
Ejemplo n.º 10
0
 public Tester(BasicReactionSupporter brs, bool lateBound)
 {
     m_brs       = brs;
     m_lateBound = lateBound;
     Reset();
 }