Exemplo n.º 1
0
        public static PulsationSolutionItemModel ToItemModel(this Bundle bundle, PulsationData pulsationData)
        {
            var result = new PulsationSolutionItemModel(pulsationData);

            result.Id              = bundle.Id;
            result.Name            = bundle.Name;
            result.Count           = bundle.GetCount();
            result.IsTimeDependent = bundle.IsTimeDependent();
            return(result);
        }
Exemplo n.º 2
0
 public PulsationSolutionItemModel(PulsationData data)
 {
     ObjectHelper.Copy(data, this, typeof(ParameterAttribute));
     Info = JsonConvert.SerializeObject(new { data.H1, data.H2, data.H3 });
 }
Exemplo n.º 3
0
        public static void Solve(PulsationModel model)
        {
            PulsationData data = new PulsationData(model);

            IContinue timeMaxContinue             = new TimeMaxContinue(data.TimeMax);
            IContinue calculationTimeoutContinue  = new CalculationTimeoutContinue();
            IContinue periodicConvergenceContinue = new ConvergencePeriodicContinue();

            PulsationSchemeSolver       pulsationSchemeSolver       = new PulsationSchemeSolver();
            PulsationLaminarExactSolver pulsationLaminarExactSolver = new PulsationLaminarExactSolver();

            double H1      = data.H1;
            double H2      = data.H2;
            double H3      = data.H3;
            double s       = data.s;
            double Re      = data.Re;
            double epsilon = data.epsilon;
            double beta    = data.beta;

            if (!model.IsComplexMode)
            {
                H1 = s * s;
                H2 = Re * beta * beta;
                H3 = epsilon * Re;
            }

            Func <double, double, double> f = (r, t) => PulsationSolver.f(H2, H3, r, t);
            Func <double, double, double> u = (r, t) => PulsationSolver.u(Re, s, r, t);
            double a = 1 / Math.Sqrt(H1);
            var    leftBoundaryCondition = new BoundaryCondition(BoundaryConditionLocation.Left,
                                                                 BoundaryConditionType.Neumann);
            var rightBoundaryCondition = new BoundaryCondition(BoundaryConditionLocation.Right,
                                                               BoundaryConditionType.Dirichlet);

            double[] initial = new double[data.GridN];
            if (model.Exact)
            {
                data.FlowMode   = "Ћаминарный";
                data.SolverType = typeof(PulsationLaminarExactSolver).Name;
                pulsationLaminarExactSolver.Solve("ѕульсирующее ламинарное течение в трубе: точное решение", data,
                                                  u, timeMaxContinue);
            }
            if (model.Implicit)
            {
                data.FlowMode   = "Ћаминарный";
                data.SolverType = typeof(PulsationSchemeSolver).Name;
                data.SchemeType = typeof(DiffusionImplicitCylindricScheme1D).Name;
                pulsationSchemeSolver.Solve(
                    "ѕульсирующее ламинарное течение в трубе: численное решение с помощью не¤вной схемы", data,
                    new DiffusionImplicitCylindricScheme1D(a, f), initial, leftBoundaryCondition, rightBoundaryCondition, timeMaxContinue);
            }
            if (model.CrankNikolson)
            {
                data.FlowMode   = "Ћаминарный";
                data.SolverType = typeof(PulsationSchemeSolver).Name;
                data.SchemeType = typeof(DiffusionCrankNicolsonCylindricScheme1D).Name;
                pulsationSchemeSolver.Solve(
                    "ѕульсирующее ламинарное течение в трубе: численное решение с помощью схемы  ранка Ќикольсона", data,
                    new DiffusionCrankNicolsonCylindricScheme1D(a, f), initial, leftBoundaryCondition, rightBoundaryCondition, timeMaxContinue, periodicConvergenceContinue);
            }
            if (model.Explicit)
            {
                data.FlowMode   = "Ћаминарный";
                data.SolverType = typeof(PulsationSchemeSolver).Name;
                data.SchemeType = typeof(DiffusionExplicitScheme1D).Name;
                pulsationSchemeSolver.Solve(
                    "ѕульсирующее ламинарное течение в трубе: численное решение с помощью ¤вной схемы", data,
                    new DiffusionExplicitScheme1D(a, f), initial, leftBoundaryCondition, rightBoundaryCondition, timeMaxContinue);
            }
            if (model.Turbulent)
            {
                data.FlowMode   = "“урбулентный";
                data.SolverType = typeof(PulsationSchemeSolver).Name;
                data.SchemeType = typeof(DiffusionInhomogeneousImplicitCylindricScheme1D).Name;
                pulsationSchemeSolver.Solve(
                    "ѕульсирующее турбулентное течение в трубе: численное решение с помощью не¤вной схемы", data,
                    new DiffusionInhomogeneousImplicitCylindricScheme1D(PulsationSolver.k, f), initial, leftBoundaryCondition, rightBoundaryCondition, timeMaxContinue, periodicConvergenceContinue);
            }
        }