private void Computing(GeometryOptions model) { prevOldArray = new double[param.finalArray.GetLength(0), param.finalArray.GetLength(1)]; //для проверки на зацикливание param.tempOldArray = new double[param.finalArray.GetLength(0), param.finalArray.GetLength(1)]; param.sameNodeSimplexCount = new double[param.finalArray.GetLength(0), param.finalArray.GetLength(1)]; param.oldArray = new double[param.finalArray.GetLength(0), param.finalArray.GetLength(1)]; int kForNodes = 1; while (param.Step > param.getEps()) { if (check.CheckArrayPoints(param.finalArray) == true) { param.oldArray = prevOldArray; break; } var newRow = new NewRow(); int counterStart = newRow.CheckNewRow(param.finalArray, param.oldArray, param); var listOfComputedPoints = new ListOfComputedPoints(); param.indexOfRestrictions = listOfComputedPoints .getListOfComputedPoints(param) .ToDictionary(k => k.Key, v => new Restrictions(v.Value.Filling, v.Value.Force)); for (int i = counterStart; i < param.finalArray.GetLength(0); i++) { var mainFunction = new MainFunction(model, material, add, file, finalReport, genReport, rout, cmd, filesForVolume); //выполнение главной функции mainFunction.Compute(param.finalArray, i, kForNodes); param.indexOfRestrictions.Add(i, new Restrictions(model.pctOfDieFilling, model.reactionForceToBlank)); kForNodes++; } var checker = new Checker(); if (checker.CheckRestrictions(param, funcParam) == false) { break; } //если в новая точка оказалась плохой, то возвращаемся к старому массиву //и данынм о заполняемости с индексам точек var checkNewCoord = new CheckNewCoordinate(); if (param.arrayStatus == true && funcParam.Index == funcParam.getFactorsCount()) { checkNewCoord.CheckingNewCoordinate(param, funcParam); } else { param.badPointsList.Clear(); param.badPointsList.Add(funcParam.Index, new Restrictions(funcParam.IndexFilling, funcParam.IndexForce)); } #region Копия старого симплекса с плохой точкой prevOldArray = param.oldArray; param.oldIndexOfRestrictions = param.indexOfRestrictions.ToDictionary(k => k.Key, v => new Restrictions(v.Value.Filling, v.Value.Force)); param.oldArray = param.finalArray; #endregion var rewrire = new RewriteArray(); rewrire.makeRewriteArray(param, funcParam, model); param.arrayStatus = true; param.Step = 0; } genReport.folderName = finalReport.finalReportFolder; finalReport.makeFinalReport(param.oldArray); var charts = new Charts(genReport); charts.DrawFrictionChart(); charts.DrawRadiusChart(); MessageBox.Show("Computing is complete!"); }