예제 #1
0
        public EquationParameters DeleteParams(int ParId)
        {
            EquationParameters dbEntry = context.EquationParameters.Find(ParId);

            if (dbEntry != null)
            {
                context.EquationParameters.Remove(dbEntry);
                context.SaveChanges();
            }
            return(dbEntry);
        }
예제 #2
0
        public IActionResult Index()
        {
            EquationParameters equationParameters = new EquationParameters()
            {
                Number1  = 1,
                Number2  = 2,
                Operator = System.Linq.Expressions.ExpressionType.Add
            };

            ViewBag.SupportedOperators = SupportedOperators.GetSupportedOperatorsAsListItems();

            return(View(equationParameters));
        }
예제 #3
0
        public static double [] InitialConditionsSetter(EquationParameters parames, int dataLength)
        {
            Type MyType = typeof(EquationInitializeConditions);

            MethodInfo[] methods = MyType.GetMethods();
            double[]     data    = new double [dataLength];
            foreach (MethodInfo method in methods)
            {
                if (method.Name == parames.InitialConditions)
                {
                    data = (double[])method.Invoke(null, new object[] { dataLength });
                }
            }
            return(data);
        }
예제 #4
0
        public IActionResult Index([FromForm] EquationParameters equationParameters)
        {
            ViewBag.EquationResult = equationParameters.Operator switch
            {
                ExpressionType.Add => Add(equationParameters.Number1, equationParameters.Number2),
                ExpressionType.Subtract => Subtract(equationParameters.Number1, equationParameters.Number2),
                ExpressionType.Multiply => Multiply(equationParameters.Number1, equationParameters.Number2),
                ExpressionType.Divide => Divide(equationParameters.Number1, equationParameters.Number2),
                _ => throw new NotSupportedException()
            };

            ViewBag.SupportedOperators = SupportedOperators.GetSupportedOperatorsAsListItems();

            return(View(equationParameters));
        }
예제 #5
0
        public ActionResult Delete(int ExperId)
        {
            ExperimentsDB      deletedProduct = Expers.DeleteExperiment(ExperId);
            EquationParameters deletedParams  = EquParams.DeleteParams(ExperId);

            if (deletedProduct != null)
            {
                TempData["Message"] = string.Format("{0} equation was deleted", deletedParams.EquationName);
            }
            else
            {
                TempData["FailMessage"] = string.Format("The equation might have already been deleted");
            }
            return(RedirectToAction("List", Expers.Experiments.Select(x => x)));
        }
예제 #6
0
        public static string FileWriter(double [] data, EquationParameters parames, int time)
        {
            //StreamWriter wrt = new StreamWriter(stream);
            //wrt.WriteLine(time==0 ? "[":"");
            StringBuilder wrt = new StringBuilder();

            wrt.AppendLine(time == 0 ? "[" : "");
            for (int j = 0; j < data.Length; j++)
            {
                double val = j * parames.VarStep;
                wrt.AppendLine("{\"x\":" + val.ToString("0.00") + ",");
                wrt.AppendLine("\"t\":" + (time).ToString() + ",");
                wrt.AppendLine("\"val\":" + data[j].ToString("0.00") + (time == (int)(parames.MaxTime / parames.TimeStep) - 1 && j == (data.Length - 1) ? "}]" : "},"));
            }
            return(wrt.ToString());
        }
예제 #7
0
        public static string SemiLagrangeScheme(EquationParameters parameters)
        {
            StringBuilder result = new StringBuilder();

            double[] data = new double[(int)(parameters.MaxVar / parameters.VarStep)];
            data = EquationMethods.InitialConditionsSetter(parameters, data.Length);
            for (int i = 0; i < (int)(parameters.MaxTime / parameters.TimeStep); i++)
            {
                double[] reservoir = new double[data.Length];
                double[] res       = new double[data.Length];
                int      approx;
                int      secondapprox;
                for (int j = 0; j < reservoir.Length; j++)
                {
                    reservoir[j] = j - parameters.Coeffitient * parameters.TimeStep / parameters.VarStep;
                    res[j]       = data[j];
                }
                for (int j = 1; j < reservoir.Length; j++)
                {
                    if (reservoir[j] > 0)
                    {
                        approx = (int)reservoir[j];
                        if (approx > reservoir[j])
                        {
                            secondapprox = approx - 1;
                        }
                        else if (approx < reservoir[j])
                        {
                            secondapprox = approx + 1;
                        }
                        else
                        {
                            secondapprox = approx;
                        }
                        data[j] = Math.Abs(approx - reservoir[j]) * res[approx] + Math.Abs(secondapprox - reservoir[j]) * res[secondapprox];
                    }
                    else
                    {
                        data[j] = data[0];
                    }
                }
                data[0] = res[reservoir.Length - 1];
                result.Append(EquationMethods.FileWriter(data, parameters, i));
            }
            return(result.ToString());
        }
예제 #8
0
 public ActionResult Save(EquationParameters data, string graph)
 {
     if (ModelState.IsValid)
     {
         ExperimentsDB experiment = new ExperimentsDB();
         experiment.Gif      = Encoding.Default.GetBytes(graph);
         experiment.MimeType = "json";
         EquParams.SaveParams(data);
         experiment.User = HttpContext.User.Identity.Name;
         Expers.SaveExperiment(experiment);
         TempData["Message"] = string.Format("{0} equation has been saved", data.EquationName);
         return(RedirectToAction("Equation", "Home", new { EquationType = data.EquationName }));
     }
     else
     {
         TempData["FailMessage"] = string.Format("Not all necessary data was provided");
         return(View("List", Expers.Experiments));
     }
 }
예제 #9
0
 public ActionResult Equation(EquationParameters parames)
 {
     if (ModelState.IsValid)
     {
         string       result  = "";
         Type         EqType  = typeof(EquationMethods).Assembly.GetType(parames.EquationName, true);
         MethodInfo[] methods = EqType.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
         foreach (MethodInfo method in methods)
         {
             if (method.Name == parames.NumericalMethods)
             {
                 result = (string)method.Invoke(null, new object[] { parames });
             }
         }
         Session["result"]       = result;
         Session["TempEquation"] = parames;
         Session["Image"]        = true;
     }
     return(View(parames));
 }
예제 #10
0
        public ActionResult Equation(string EquationType)
        {
            Type MyType = typeof(EquationInitializeConditions);

            MethodInfo[]  methodes    = MyType.GetMethods();
            List <string> InitialCond = new List <string>();

            foreach (MethodInfo method in methodes)
            {
                if (method.ReturnType == typeof(double[]))
                {
                    InitialCond.Add(method.Name);
                }
            }
            Session["InitialConditions"] = new SelectList(InitialCond);
            List <string> MethodsNames = new List <string>();

            if (EquationType != "None")
            {
                Type         EqType  = typeof(EquationMethods).Assembly.GetType(EquationType);
                MethodInfo[] methods = EqType.GetMethods(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
                foreach (MethodInfo method in methods)
                {
                    MethodsNames.Add(method.Name);
                }
            }
            Session["NumericalMethods"] = new SelectList(MethodsNames);

            EquationParameters Temporary = (EquationParameters)Session["TempEquation"];

            if (Temporary == null || Temporary.EquationName != EquationType)
            {
                Session["Image"]        = false;
                Session["TempEquation"] = null;
                return(View(new EquationParameters {
                    EquationName = EquationType
                }));
            }
            return(View(Temporary));
        }
예제 #11
0
        public static string UpwindScheme(EquationParameters parameters)
        {
            double[] data = new double[(int)(parameters.MaxVar / parameters.VarStep)];
            data = EquationMethods.InitialConditionsSetter(parameters, data.Length);
            StringBuilder result = new StringBuilder();

            for (int i = 0; i < (int)(parameters.MaxTime / parameters.TimeStep); i++)
            {
                double[] reservoir = new double[data.Length];
                for (int j = 0; j < reservoir.Length; j++)
                {
                    reservoir[j] = data[j];
                }
                for (int j = 1; j < reservoir.Length; j++)
                {
                    data[j] = reservoir[j] - parameters.TimeStep * parameters.Coeffitient * (reservoir[j] - reservoir[j - 1]) / parameters.VarStep;
                }
                data[0] = reservoir[reservoir.Length - 1];
                result.Append(EquationMethods.FileWriter(data, parameters, i));
            }
            return(result.ToString());
        }
예제 #12
0
        public static string CentralDifferences(EquationParameters parameters)
        {
            double[] data = new double[(int)(parameters.MaxVar / parameters.VarStep)];
            data = EquationMethods.InitialConditionsSetter(parameters, data.Length);
            StringBuilder result = new StringBuilder();

            //FileStream stream = new FileStream("C:/Users/mm/Documents/Visual Studio 2017/Projects/EquationsSolver/WebGUI/DataStorage/data.json", FileMode.Create, FileAccess.Write);
            for (int i = 0; i < (int)(parameters.MaxTime / parameters.TimeStep); i++)
            {
                double[] reservoir = new double[data.Length];
                for (int j = 0; j < reservoir.Length; j++)
                {
                    reservoir[j] = data[j];
                }
                for (int j = 1; j < reservoir.Length - 1; j++)
                {
                    data[j] = reservoir[j] + parameters.TimeStep * parameters.Coeffitient * (reservoir[j + 1] - 2.0 * reservoir[j] + reservoir[j - 1]) / (parameters.VarStep * parameters.VarStep);
                }
                result.Append(EquationMethods.FileWriter(data, parameters, i));
            }
            return(result.ToString());
            //stream.Close();
        }
예제 #13
0
 public void SaveParams(EquationParameters equparams)
 {
     context.EquationParameters.Add(equparams);
     context.SaveChanges();
 }