Esempio n. 1
0
        public void TestACM_BFBCap_Defaults()
        {
            IDictionary <string, object> output;
            IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer();

            Assert.IsFalse(run.IsEngineRunning);
            Assert.IsFalse(run.IsSimulationInitializing);
            Assert.IsFalse(run.IsSimulationOpened);
            ((InMemorySinterConsumer)run).job = new InMemoryJobACM_BFBCap();
            try
            {
                Assert.IsTrue(run.Run());
                Assert.IsTrue(run.IsSimulationOpened);

                IJobConsumerContract job = ((InMemorySinterConsumer)run).job;
                Assert.IsTrue(job.IsSuccess());
                output = job.Process.Output;
                Assert.IsNotNull(output);

                foreach (KeyValuePair <string, object> kv in output)
                {
                    Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value));
                }
            }
            finally
            {
                Debug.WriteLine("Attempt Cleanup");
                run.CleanUp();
            }

            Object d;

            output.TryGetValue("status", out d);
            JObject statusD = (JObject)d;
            JToken  status  = statusD.GetValue("value");

            Assert.AreEqual <int>(status.Value <int>(), 0);
        }
Esempio n. 2
0
        public void TestACM_BFBCap_Inputs()
        {
            IDictionary <string, object> output;
            IConsumerRun run = (IConsumerRun) new InMemorySinterConsumer();

            Assert.IsFalse(run.IsEngineRunning);
            Assert.IsFalse(run.IsSimulationInitializing);
            Assert.IsFalse(run.IsSimulationOpened);
            ((InMemorySinterConsumer)run).job = new InMemoryJobACM_BFBCap();
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_nv"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["rgndx"]             = 0.0225;
            ((InMemorySinterConsumer)run).job.Process.Input["BFBadsT.Lb"]        = 4.2;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_A3"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_A2"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_A1"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["GHXfg.A_exch"]      = 5749.66;
            ((InMemorySinterConsumer)run).job.Process.Input["BFBrgnB.Lb"]        = 4.2;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_E3"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_E2"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_E1"]             = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_fg_flow"]        = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["rgnDt"]             = 12.0;
            ((InMemorySinterConsumer)run).job.Process.Input["CW_SHXlean.A_exch"] = 400.0;
            ((InMemorySinterConsumer)run).job.Process.Input["BFBadsM.Lb"]        = 4.2;
            ((InMemorySinterConsumer)run).job.Process.Input["adsN"]              = 15.0;
            ((InMemorySinterConsumer)run).job.Process.Input["rgnN"]              = 15.0;
            ((InMemorySinterConsumer)run).job.Process.Input["adsdx"]             = 0.0275;
            ((InMemorySinterConsumer)run).job.Process.Input["LR_SHXlean.A_exch"] = 7000.0;
            ((InMemorySinterConsumer)run).job.Process.Input["BFBrgnT.Lb"]        = 4.2;
            ((InMemorySinterConsumer)run).job.Process.Input["adsDt"]             = 15.0;
            ((InMemorySinterConsumer)run).job.Process.Input["rgnlhx"]            = 0.08;
            ((InMemorySinterConsumer)run).job.Process.Input["adslhx"]            = 0.4;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS1"]            = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS2"]            = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dS3"]            = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["BFBadsB.Lb"]        = 4.2;
            ((InMemorySinterConsumer)run).job.Process.Input["LR_SHXrich.A_exch"] = 5000.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH1"]            = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH3"]            = 1.0;
            ((InMemorySinterConsumer)run).job.Process.Input["UQ_dH2"]            = 1.0;

            try
            {
                Assert.IsTrue(run.Run());
                Assert.IsTrue(run.IsSimulationOpened);

                IJobConsumerContract job = ((InMemorySinterConsumer)run).job;
                Assert.IsTrue(job.IsSuccess());
                output = job.Process.Output;
                Assert.IsNotNull(output);

                foreach (KeyValuePair <string, object> kv in output)
                {
                    Debug.WriteLine(String.Format("{0} : {1}", kv.Key, kv.Value));
                }
            }
            finally
            {
                Debug.WriteLine("Attempt Cleanup");
                run.CleanUp();
            }

            Object d;

            output.TryGetValue("status", out d);
            JObject statusD = (JObject)d;
            JToken  status  = statusD.GetValue("value");

            Assert.AreEqual <int>(status.Value <int>(), 0);
        }
        /// <summary>
        /// Run pops a job descriptor off the queue and manages the underlying AspenSinter
        /// </summary>
        /// <returns></returns>
        public bool Run()
        {
            // RESET ALL instance variables except sim
            bool prevJobIsTerminated = isTerminated;

            isSetup      = false;
            isTerminated = false;
            running      = false;
            var job = GetNextJob();

            this.job = job;

            if (job == null)
            {
                Debug.WriteLine(DateTime.Now.ToString() + " - No submitted jobs in queue",
                                "SinterConsumer.Run");
                return(false);
            }

            visible = job.Visible;

            IProcess process = null;

            if (job.Reset == false && sim != null && prevJobIsTerminated == false &&
                RunNoReset(job))
            {
                Debug.WriteLine(String.Format("{0} - Found JOB(noreset): {1}", DateTime.Now.ToString(), job.Id),
                                "SinterConsumer.Run");
                return(true);
            }

            Debug.WriteLine(String.Format("{0} - Found JOB(reset): {1}", DateTime.Now.ToString(), job.Id),
                            "SinterConsumer.Run");
            CleanUp();
            sim = null;

            Debug.WriteLine(String.Format("Setup Sinter Process {0}", job.Id),
                            "SinterConsumer.Run");
            process = DoSetup(job);

            var maxAttemptsReadSetup = 5;

            DoConfigure(job, process, maxAttemptsReadSetup);
            Debug.WriteLine(String.Format("Move Job {0} to state Running", job.Id),
                            "SinterConsumer.Run");

            job.Running();

            IDictionary <String, Object> inputDict = null;
            String  data     = null;
            JObject defaults = null;
            JObject inputs   = null;

            // NOTE: Quick Fix. Serializing Dicts into string json
            // and back to JObject because of API change to sinter.
            // Better to refactor interfaces, etc to hand back strings
            try
            {
                inputDict = process.Input;
                data      = JsonConvert.SerializeObject(inputDict);
                inputs    = JObject.Parse(data);
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Debug.WriteLine("SqlException: " + ex.Message, "SinterConsumer.Run");
                Debug.WriteLine(ex.StackTrace, "SinterConsumer.Run");
                sim.closeSim();
                sim = null;
                throw;
            }
            catch (Exception ex)
            {
                sim.closeSim();
                job.Error("Failed to Create Inputs to Simulation (Bad Simulation defaults or Job inputs)");
                job.Message(ex.StackTrace.ToString());
                throw;
            }

            Debug.WriteLine("Initialize", "SinterConsumer.Run");
            try
            {
                DoInitialize(job, sim, defaults);
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Debug.WriteLine("SqlException: " + ex.Message, "SinterConsumer.Run");
                Debug.WriteLine(ex.StackTrace, "SinterConsumer.Run");
                sim.closeSim();
                sim = null;
                throw;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("DoInitialize Exception Close: " + ex.Message, "SinterConsumer.Run");
                sim.closeSim();
                sim = null;
                throw;
            }

            Debug.WriteLine("Run", "SinterConsumer.Run");
            try
            {
                DoRun(job, sim, defaults, inputs);
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Debug.WriteLine("SqlException: " + ex.Message, "SinterConsumer.Run");
                Debug.WriteLine(ex.StackTrace, "SinterConsumer.Run");
                sim.closeSim();
                sim = null;
                throw;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("DoRun Exception Close", "SinterConsumer.Run");
                job.Error("Exception: " + ex.Message);
                sim.closeSim();
                sim = null;
                throw;
            }

            Debug.WriteLine("Finalize", "SinterConsumer.Run");
            try
            {
                DoFinalize(sim, job, process);
                last_simulation_name    = job.SimulationId;
                last_simulation_success = job.IsSuccess();
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                Debug.WriteLine("SqlException: " + ex.Message, "SinterConsumer.Run");
                Debug.WriteLine(ex.StackTrace, "SinterConsumer.Run");
                sim.closeSim();
                sim = null;
                throw;
            }
            catch (Exception ex)
            {
                Debug.WriteLine("DoFinalize Exception Close", "SinterConsumerRun.Run");
                Debug.WriteLine(ex.Message, "SinterConsumerRun.Run");
                Debug.WriteLine(ex.StackTrace, "SinterConsumerRun.Run");
                job.Error("Exception: " + ex.Message);
                sim.closeSim();
                sim = null;
                throw;
            }

            return(true);
        }