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); } } } }
public PulsationLaminarView() { Model = new PulsationModel(); Presenter = new PulsationPresenter(this); InitializeComponent(); Load += Initialized; btnSolve.Click += SolveClicked; }
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); } }