Exemplo n.º 1
0
        static public MuSpline FromFile(string filename)
        {
            string[] data;
            try
            {
                data = File.ReadAllLines(filename);
            }
            catch
            {
                Console.WriteLine($"ERROR! Failed to open file {filename}");
                return(null);
            }

            MuSpline spline = new MuSpline();

            int count = int.Parse(data[0], NumberStyles.Any);

            spline.count       = count;
            spline.args        = new double[count];
            spline.values      = new double[count];
            spline.derivatives = new double[count];

            for (int i = 0; i < count; i++)
            {
                string[] tokens = data[i + 1].Split(' ', StringSplitOptions.RemoveEmptyEntries);

                double arg   = double.Parse(tokens[1], NumberStyles.Any, CultureInfo.InvariantCulture);
                double value = double.Parse(tokens[0], NumberStyles.Any, CultureInfo.InvariantCulture);

                spline.args[i]   = arg;
                spline.values[i] = value;
            }

            spline.CalculateDerivatives();

            return(spline);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            Area linearArea    = Area.FromFile(@"C:\repos\NumericalMethods\ElectromagneticProblem\ElectromagneticProblem\input\linGrid.txt");
            Area nonlinearArea = Area.FromFile(@"C:\repos\NumericalMethods\ElectromagneticProblem\ElectromagneticProblem\input\nonlinGrid.txt");

            if (linearArea != null && nonlinearArea != null)
            {
                MuSpline spline = MuSpline.FromFile(@"C:\repos\NumericalMethods\ElectromagneticProblem\ElectromagneticProblem\input\mu.txt");
                nonlinearArea.SetSplinesForMaterials(spline);

                Mesh linearMesh    = new Mesh();
                Mesh nonlinearMesh = new Mesh();
                linearArea.BuildMesh(linearMesh);
                nonlinearArea.BuildMesh(nonlinearMesh);

                NonlinearProblemInfo info = new NonlinearProblemInfo
                {
                    LinearMesh     = linearMesh,
                    NonlinearMesh  = linearMesh,
                    SolverType     = SolverTypes.CGMLLT,
                    Eps            = 0.01,
                    Delta          = 1.0e-20,
                    MaxIters       = 100,
                    DoOptimization = true
                };

                NonlinearProblem problem = new NonlinearProblem(info);
                problem.Solve();

                Console.WriteLine();
                Console.WriteLine("Az: " + problem.GetValueA(new Point(-1.53E-02, 3.50E-03)));
                Console.WriteLine("Az: " + problem.GetValueA(new Point(0.0044, 0.0015)));
            }

            Console.ReadKey();
        }