Пример #1
0
        public void Solve(string name, TData data, Func <double, double, double> fFunc, params IContinue[] continues)
        {
            Bundle bundle = new Bundle(name, data);

            try
            {
                bundle.BeginEdit();
                bundle.Save();

                double t      = 0;
                int    number = 0;
                var    grid   = bundle.GetGrid();
                double dt     = bundle.dt();

                while (continues.All(c => c.Continue(bundle)))
                {
                    double[] arrayValues = new double[grid.N];

                    for (int i = 0; i < grid.N; i++)
                    {
                        double x = grid[i];
                        arrayValues[i] = fFunc(x, t);
                    }
                    string layerName = GetLayerName(bundle, number);
                    bundle.AddArray(layerName, number, arrayValues);
                    t += dt;
                    number++;
                }
                OnSolved(bundle, true);
            }
            catch (Exception exception)
            {
                OnSolved(bundle, false, exception);
            }
        }
Пример #2
0
        public void Solve(string name, TData data, params Func <double, double>[] fFuncs)
        {
            Bundle bundle = new Bundle(name, data);

            try
            {
                bundle.BeginEdit();
                bundle.Save();

                int number = 0;
                var grid   = bundle.GetGrid();

                foreach (var func in fFuncs)
                {
                    double[] arrayValues = new double[grid.N];

                    for (int i = 0; i < grid.N; i++)
                    {
                        double x = grid[i];
                        arrayValues[i] = func(x);
                    }
                    string layerName = GetLayerName(bundle, number);
                    bundle.AddArray(layerName, number, arrayValues);
                    number++;
                }
                OnSolved(bundle, true);
            }
            catch (Exception exception)
            {
                OnSolved(bundle, false, exception);
            }
        }
Пример #3
0
        public void Solve(string name, PulsationAlphaData data)
        {
            using (CalculationDbContext context = new CalculationDbContext())
            {
                var bundle = context.GetBundle(data.GroupId);

                int NPeriod = bundle.PeriodN();

                var grid = bundle.GetGrid();

                var alphaGroup = new Bundle("Нахождение коэффициентов alpha", data);

                int Nt = bundle.GetCount();

                context.SaveChanges();

                try
                {
                    IIntegrator integrator = new SimpsonIntegrator();

                    var lastPeriodLayers = bundle.GetArrays(Nt - NPeriod, NPeriod);
                    int number           = 0;
                    for (int deg = 2; deg <= 3; deg++)
                    {
                        double[] alphaValues = new double[NPeriod];
                        for (int i = 0; i < NPeriod; i++)
                        {
                            alphaValues[i] = CalculateAlpha(integrator, deg, lastPeriodLayers[i], grid.Values, grid.h, NPeriod);
                        }
                        alphaGroup.AddArray(string.Format("alpha{0}", number + 1), number, alphaValues);
                        number++;
                    }
                    OnSolved(true);
                }
                catch (Exception exception)
                {
                    OnSolved(false, exception);
                }
            }
        }