/// <summary> /// Solves the instance with specified <see cref="solverType" /> and assuming linear behavior (both geometric and material) and for default load case. /// </summary> /// <param name="solverType">The solver type.</param> public void Solve(BuiltInSolverType solverType) { var gen = new Func <CompressedColumnStorage, ISolver>(i => { var sl = CalcUtil.CreateBuiltInSolver(solverType); sl.A = i; return(sl); }); Solve(gen); }
/// <summary> /// Creates a built in solver appropriated with <see cref="tp"/>. /// </summary> /// <param name="type">The solver type.</param> /// <returns></returns> public static ISolver CreateBuiltInSolver(BuiltInSolverType type) { switch (type) { case BuiltInSolverType.CholeskyDecomposition: return(new CholeskySolver()); break; case BuiltInSolverType.ConjugateGradient: return(new PCG(new SSOR())); break; default: throw new ArgumentOutOfRangeException("type"); } }
private static ISolver CreateInternalSolver(BuiltInSolverType type, CompressedColumnStorage ccs) { switch (type) { case BuiltInSolverType.CholeskyDecomposition: return(new CholeskySolver(ccs)); break; case BuiltInSolverType.ConjugateGradient: return(new PCG(new SSOR()) { A = ccs }); break; default: throw new ArgumentOutOfRangeException("type"); } }
/// <summary> /// Solves the instance with specified <see cref="solverType" /> and assuming linear behavior (both geometric and material) and for default load case. /// </summary> /// <param name="solverType">The solver type.</param> public void Solve(BuiltInSolverType solverType) { Solve(CalcUtil.CreateBuiltInSolverFactory(solverType)); }
private static void Main(string[] args) { //Note: Before executing this benchmark set the Configuration to Release and use 'DEBUG>Start Without Debugging' or 'Ctrl+F5' to get the highest possible performance var logger = new TextLogger(); logger.Log("###############################################################################"); logger.Log( "**Performance benchmark for BriefFiniteElement.NET library \navailable via http://brieffiniteelmentnet.codeplex.com"); logger.Log("-------------------------------------------------------------------------------"); logger.Log("Environment Info:"); bool isDebug; #if DEBUG isDebug = true; #else isDebug = false; #endif logger.Log("\tOS: {0}", Environment.OSVersion); //Log("\tIs OS 64bit: {0}", Environment.Is64BitOperatingSystem); logger.Log("\tDebugger is Attached: {0}", Debugger.IsAttached); logger.Log("\tMode: {0}", isDebug ? "Debug" : "Release"); logger.Log("-------------------------------------------------------------------------------"); logger.Log("System Info:"); var sysInfo = GetSystemInfo(); logger.Log("\tCPU Model: {0}", sysInfo[0]); logger.Log("\tCPU clock: {0} MHz", sysInfo[1]); logger.Log("\tTotal RAM: {0:0.00} GB", double.Parse(sysInfo[2], CultureInfo.CurrentCulture) / (1024.0 * 1024.0)); logger.Log("###############################################################################"); logger.Log(""); //Log("Benchmarks:"); var solvers = new BuiltInSolverType[] { BuiltInSolverType.CholeskyDecomposition, BuiltInSolverType.ConjugateGradient }; //Enum.GetValues(typeof (BuiltInSolverType)); var sw = System.Diagnostics.Stopwatch.StartNew(); var nums = new int[] { 10, 11, 12, 13, 14, 15 }; var cnt = 0; var case1 = new LoadCase("c1", LoadType.Other); var case2 = new LoadCase("c2", LoadType.Other); var benchs = new IBenchmarkCase[] { //new Benchmark1() {Logger = logger}, //new Benchmark2() {Logger = logger}, new Benchmark3() { Logger = logger } }; //var bnchTypes = new Type[] {typeof(Benchmark1), typeof(Benchmark2)};// IBenchmarkCase[] { new Benchmark1() { Logger = logger }, new Benchmark2() { Logger = logger } }; var cnt1 = 1; //foreach (var bnchTp in bnchTypes) foreach (var bnch in benchs) { //var bnch = (IBenchmarkCase)Activator.CreateInstance(bnchTp); bnch.Logger = logger; logger.Log(""); logger.Log("========="); logger.Log("Benchmark #{0}: {1}", cnt1++, bnch.GetBenchmarkInfo()); logger.Log(""); cnt = 0; foreach (var nm in nums) { bnch.Dimension = nm; var model = bnch.GetCaseModel(); var paramerts = new string[] { String.Format(CultureInfo.CurrentCulture, "Benchamrk Dimension: {0}", nm), String.Format(CultureInfo.CurrentCulture, "{0} elements", model.Elements.Count), String.Format(CultureInfo.CurrentCulture, "{0} nodes", model.Nodes.Count), String.Format(CultureInfo.CurrentCulture, "{0} free DoFs", Util.GetFreeDofsCount(model)) }; logger.Log("Try # {0}", cnt++); logger.Log(string.Join(", ", paramerts)); foreach (BuiltInSolverType solverType in solvers) { //Benchmark1.DoIt(nm, solverType); bnch.SolverType = solverType; bnch.DoTheBenchmark(); GC.Collect(); } } } Console.WriteLine(); Console.WriteLine("----------------------------------------------------------------------------"); Console.WriteLine("Done, Write result to file? [y/n]"); var inf = Console.ReadKey(); if (inf.KeyChar == 'y' || inf.KeyChar == 'Y') { var fileName = "BFEbenchmark.txt"; System.IO.File.WriteAllText(fileName, logger.GetAllLog()); System.Diagnostics.Process.Start(fileName); } Console.WriteLine("Done, press any key to exit..."); Environment.Exit(0); }