示例#1
0
文件: Model.cs 项目: saegeoff/BFE.Net
        /// <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);
        }
示例#2
0
        /// <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");
            }
        }
示例#3
0
        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");
            }
        }
示例#4
0
 /// <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);
        }