public override void RefreshProperties(SolidMechanicsModel model) { SolidMechanicsModel2D m = model as SolidMechanicsModel2D; if (m != null) { VerticalElements = m.VerticalElements; } HorizontalElements = model.HorizontalElements; }
public void Solve() { Rectangle rectangle = solidMechanicsModel.Model.Shape as Rectangle; if (rectangle != null) { SolidMechanicsModel2D smm = solidMechanicsModel as SolidMechanicsModel2D; if (smm != null) { RectangularMesh mesh = new RectangularMesh(rectangle, smm.VerticalElements, smm.HorizontalElements); pointsForGrid = mesh.GetPointsForResult(); IEnumerable <INumericalResult> results = null; Stopwatch sw = new Stopwatch(); sw.Start(); Task taskSolver = Task.Factory.StartNew(() => { //Solver solver = new FreeVibrationsLinearSolver(solidMechanicsModel.Model, mesh, error, solidMechanicsModel.MaxAmplitude); Solver solver = new FreeVibrationsLinearSolver(smm.Model, mesh, error, smm.MaxAmplitude); /*Solver initSolver = new FreeVibrationsLinearSolver(_solidMechanicsModel.Model, mesh, _error); * IEnumerable<INumericalResult> initResults = initSolver.Solve(1); * EigenValuesNumericalResult res = initResults.First() as EigenValuesNumericalResult;*/ //Solver solver = new FreeVibrationsNonLinearSolver2(_solidMechanicsModel.Model, mesh, _error, res.U, 2, 50); //Solver solver = new NewmarkVibrationNonLinearSolver(_solidMechanicsModel.Model, mesh, _error, res.U, 5, 50); //Solver solver = new StationaryNonlinear2DSolver(_solidMechanicsModel.Model, mesh, _error, 20); //IResult analiticalResult = new AnaliticalResultRectangleWithOneSideFixed(_solidMechanicsModel.Model); results = solver.Solve(maxResults); }); sw.Stop(); TimeElapsed = sw.Elapsed; Task.WaitAll(taskSolver); Application.Current.Dispatcher.BeginInvoke(new Action(() => { Results.Clear(); foreach (INumericalResult result in results) { Results.Add(result); } })); } } }