Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            PulsationModel model = new PulsationModel
            {
                CrankNikolson = true,
                Turbulent     = false,
                Implicit      = false,
                Exact         = false,
                IsComplexMode = true
            };
            int    min = -2;
            int    max = 2;
            double o   = 10;

            for (int degH1 = min; degH1 <= max; degH1++)
            {
                model.H1 = Math.Pow(o, degH1);
                for (int degH2 = min; degH2 <= max; degH2++)
                {
                    model.H2 = Math.Pow(o, degH2);
                    for (int degH3 = min; degH3 <= max; degH3++)
                    {
                        model.H3 = Math.Pow(o, degH3);
                        PulsationSolver.Solve(model);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public PulsationLaminarView()
        {
            Model     = new PulsationModel();
            Presenter = new PulsationPresenter(this);

            InitializeComponent();

            Load           += Initialized;
            btnSolve.Click += SolveClicked;
        }
Ejemplo 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);
            }
        }