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]")); }
/// <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)); }
[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); }
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); }
[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"); }
/// <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()); }
/// <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); }
public Tester(BasicReactionSupporter brs, bool lateBound) { m_brs = brs; m_lateBound = lateBound; Reset(); }