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); }
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(); }