public double GetVolumeByFriction(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport) { model.friction = Math.Round(model.startFriction, 2); FrictionChart(model); x = Math.Round(x, 2); model.friction = x; string abaqusOutputFolder = "b" + Convert.ToString(model.stampAngle) + "a" + Convert.ToString(model.friction) + "f"; file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder); if (!Directory.Exists(file.outputFolder)) { Directory.CreateDirectory(file.outputFolder); } file.caeFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae"); file.caeFolder = file.caeFolder.Replace(@"\", "/"); file.stampFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS"); file.stampFolder = file.stampFolder.Replace(@"\", "/"); file.blankFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS"); file.blankFolder = file.blankFolder.Replace(@"\", "/"); file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS"); file.platformFolder = file.platformFolder.Replace(@"\", "/"); solid.UseSolid(file, model); rout.workingDirectory = file.outputFolder; rout.pathOut = rout.workingDirectory + @"\abaqusMacros.py"; change.Output(rout, model, material, add, file); //Form1._Form1.runAbaqus(file); //Form1._Form1.GetHistoryregionName(file); //Processing(model, file); genReport.folderName = Convert.ToString(model.blankRadius); //report.ReportReactionForce(model, genReport, file); //rpr.ReportVolume(model, genReport, file); FrictionChart(model); finalReport.AddData(model); //FReport.setMaxVolume.Add( // new VariablesForReport(model.blankRadius, model.blankRadius, // model.friction, model.blankVolume, model.setRectionForceToBlank) // ); return(model.pctOfDieFilling); }
public double GetVolumeByRadius(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport) { model.stampAngle = model.startAngle; model.stampAngle = Math.Round(model.stampAngle); model.friction = model.startFriction; model.friction = Math.Round(model.startFriction, 2); #region "+" будут обозначены строки, котоыре необходимы в методе вычесления угла матрицы, заключенніе в регион //10 - верхний радиус model.dieRadius = (Math.Tan(model.stampAngle * Math.PI / 180) * 57) + 10; model.dieRadius = Math.Round(model.dieRadius, 1); //объем цилиндрического выреза в матрице // double tempVolume = Math.PI * Math.Pow(model.dieRadius, 2) * 4; //объём усеченного конуса (верхний радиус 10, нижний может меняться) model.dieVolume = (Math.PI * 57 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3; // model.dieVolume = model.dieVolume + tempVolume; model.dieVolume = Math.Round(model.dieVolume, 2); #endregion //ЗАМЕНИТЬ НА Х ОБРАТНО model.blankRadius = x; model.blankRadius = Math.Round(model.blankRadius, 2); #region "+" model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2); model.blankPosition = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3; model.blankPosition = Math.Round(model.blankPosition, 2); //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра) double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2; double blankVolume = model.dieVolume + (abstractRadiusVolume - model.blankPosition); //объём зазора между матрицей и площадкой //double tempVolume = Math.Pow((model.dieRadius + 10), 2) * 3; double tempVolume = blankVolume * 10; tempVolume /= 100; blankVolume += tempVolume; model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2)); model.blankHeight = Math.Round(model.blankHeight, 2); model.blankPosition = model.blankHeight * ((model.dieRadius - model.blankRadius) / (model.dieRadius - 10)); model.blankPosition = Math.Round(model.blankPosition, 1); model.blankPosition += 2; //задаем перемещение матрицы model.stampDisplacement = model.blankPosition; model.stampDisplacement -= 3; #endregion #region Создание общей папки с название радиуса заготовки genReport.folderName = Convert.ToString(model.blankRadius); if (!Directory.Exists(genReport.folderName)) { Directory.CreateDirectory(genReport.folderName); } #endregion string abaqusOutputFolder = "b" + Convert.ToString(model.blankRadius) + "r" + Convert.ToString(model.stampAngle) + "a"; file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder); if (!Directory.Exists(file.outputFolder)) { Directory.CreateDirectory(file.outputFolder); } file.caeFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae"); file.caeFolder = file.caeFolder.Replace(@"\", "/"); file.stampFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS"); file.stampFolder = file.stampFolder.Replace(@"\", "/"); file.blankFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS"); file.blankFolder = file.blankFolder.Replace(@"\", "/"); file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS"); file.platformFolder = file.platformFolder.Replace(@"\", "/"); solid.UseSolid(file, model); rout.pathIn = "abaqusMacros.py"; // old rout.setWorkingDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); rout.workingDirectory = file.outputFolder; rout.pathOut = rout.workingDirectory + @"\abaqusMacros.py"; change.Output(rout, model, material, add, file); //Form1._Form1.runAbaqus(file); //Form1._Form1.GetHistoryregionName(file); //Form1._Form1.Processing(model, file); //report.ReportReactionForce(model, genReport, file); //rpr.ReportVolume(model, genReport, file); finalReport.AddData(model); //FReport.setMaxVolume.Add( // new VariablesForReport(model.blankRadius, model.blankRadius, // model.friction, model.blankVolume, model.setRectionForceToBlank) // ); return(model.pctOfDieFilling); }
public double GetVolumeByAngle(double x, GeometryOptions model, FileName file, MaterialsOptions material, AdditionallyOptions add, CommonReport finalReport) { //добавляем здесь, так как прошло изменение радиуса //после изменения радиуса, добавляем последние значения в постройку графика //округляем высоту заготовки, иначе после работы алгоритма добавит как новую высоту, //из-за точности знаков после запятой и моего костыля :) model.stampAngle = Math.Round(model.startAngle); AngleChart(model); model.friction = model.startFriction; model.friction = Math.Round(model.startFriction, 2); x = Math.Round(x); #region "+" будут обозначены строки, котоыре необходимы в методе вычесления угла матрицы, заключенніе в регион model.dieRadius = (Math.Tan(x * Math.PI / 180) * 57) + 10; model.dieRadius = Math.Round(model.dieRadius, 1); //объём усеченного конуса (верхний радиус 10, нижний может меняться) model.dieVolume = (Math.PI * 57 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3; model.dieVolume = Math.Round(model.dieVolume, 2); #endregion #region "+" model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2); model.blankPosition = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3; model.blankPosition = Math.Round(model.blankPosition, 2); //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра) double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2; double blankVolume = model.dieVolume + (abstractRadiusVolume - model.blankPosition); double tempVolume = blankVolume * 10; tempVolume /= 100; blankVolume += tempVolume; model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2)); model.blankHeight = Math.Round(model.blankHeight, 2); model.blankPosition = model.blankHeight * ((model.dieRadius - model.blankRadius) / (model.dieRadius - 10)); model.blankPosition = Math.Round(model.blankPosition, 1); model.blankPosition += 2; //задаем перемещение матрицы model.stampDisplacement = model.blankPosition; model.stampDisplacement -= 3; #endregion model.stampAngle = x; string abaqusOutputFolder = "b" + Convert.ToString(model.blankRadius) + "r" + Convert.ToString(model.stampAngle) + "a"; file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder); if (!Directory.Exists(file.outputFolder)) { Directory.CreateDirectory(file.outputFolder); } file.caeFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae"); file.caeFolder = file.caeFolder.Replace(@"\", "/"); file.stampFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Stamp.IGS"); file.stampFolder = file.stampFolder.Replace(@"\", "/"); file.blankFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Blank.IGS"); file.blankFolder = file.blankFolder.Replace(@"\", "/"); file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, "Platform.IGS"); file.platformFolder = file.platformFolder.Replace(@"\", "/"); solid.UseSolid(file, model); rout.workingDirectory = file.outputFolder; rout.pathOut = rout.workingDirectory + @"\abaqusMacros.py"; change.Output(rout, model, material, add, file); //Form1._Form1.runAbaqus(file); //Form1._Form1.GetHistoryregionName(file); //Form1._Form1.Processing(model, file); genReport.folderName = Convert.ToString(model.blankRadius); //report.ReportReactionForce(model, genReport, file); //rpr.ReportVolume(model, genReport, file); AngleChart(model); //просчёт с изменением силы трения //CalculateFriction(model, material, add, file, finalReport); finalReport.AddData(model); //FReport.setMaxVolume.Add( // new VariablesForReport(model.blankRadius, model.blankRadius, // model.friction, model.pctOfDieFilling, model.setRectionForceToBlank) // ); return(model.pctOfDieFilling); }
//MAIN FUNCTION public void Compute(double[,] array, int counterStart, int kForNodes) { //model.stampAngle = array[i, 0]; //model.stampAngle = Math.Round(model.stampAngle); model.stampAngle = model.startAngle; model.blankRadius = array[counterStart, 0]; model.blankRadius = Math.Round(model.blankRadius, 2); model.friction = array[counterStart, 1]; model.friction = Math.Round(model.friction, 2); model.dieRadius = (Math.Tan(model.stampAngle * Math.PI / 180) * 60) + 10; model.dieRadius = Math.Round(model.dieRadius, 1); //объём усеченного конуса (верхний радиус 10, нижний может меняться) 60 - высота усеченного конуса model.dieVolume = (Math.PI * 60 * (Math.Pow(model.dieRadius, 2) + model.dieRadius * 10 + Math.Pow(10, 2))) / 3; #region необходимо для вычесления облоя //3 - радиус скругления, 90 - градус double filletLength = Math.Tan((180 - (((90 + model.stampAngle) / 2) + 90)) * Math.PI / 180) * 3; double upperRadius = model.dieRadius + filletLength + 10; double angle30X = upperRadius - 5; double lowerVolume = Math.Pow((angle30X - 5), 2) * Math.PI * 1; model.dieVolume += lowerVolume; double shave = Math.Pow(angle30X, 2) * Math.PI * 1; shave -= lowerVolume; model.dieVolume = Math.Round(model.dieVolume, 1); #endregion model.blankUpperRadius = model.blankRadius - (Math.Tan(model.stampAngle * Math.PI / 180) * 2); model.blankPosition = (Math.PI * 2 * (Math.Pow(model.blankRadius, 2) + model.blankRadius * (model.blankUpperRadius) + Math.Pow((model.blankUpperRadius), 2))) / 3; model.blankPosition = Math.Round(model.blankPosition, 2); //объем цилиндра, не считая фаску (как будто её нет,а заготовка имеет форму просто цилиндра) double abstractRadiusVolume = Math.PI * Math.Pow(model.blankRadius, 2) * 2; double blankVolume = model.dieVolume + (abstractRadiusVolume - model.blankPosition); //объём зазора между матрицей и площадкой blankVolume += shave; model.blankHeight = blankVolume / (Math.PI * Math.Pow(model.blankRadius, 2)); model.blankHeight = Math.Round(model.blankHeight, 2); double radiusAfterLowerFillet = angle30X - 5; double radiusHeightInStamp; radiusHeightInStamp = 60 * ((radiusAfterLowerFillet - model.blankRadius) / (radiusAfterLowerFillet - 10)); //необходимо для вычесления объёма от пуансона до конца матрицы model.lowerFilletRadius = radiusAfterLowerFillet; if (model.blankRadius > 10) { model.blankPosition = model.blankHeight - radiusHeightInStamp; model.blankPosition = Math.Round(model.blankPosition, 1); model.blankPosition += 5; } else { double tempHeight = model.blankHeight - 60; model.blankPosition = tempHeight * ((model.dieRadius - 10) / (model.dieRadius - 10)); model.blankPosition = Math.Round(model.blankPosition, 1); //допуск +2мм на всякий пожарный случай model.blankPosition += 2; } model.stampDisplacement = model.blankPosition; //оставляем зазор 1мм model.stampDisplacement -= 1; #region Создание общей папки с название радиуса заготовки genReport.folderName = Convert.ToString(model.blankRadius); if (!Directory.Exists(genReport.folderName)) { Directory.CreateDirectory(genReport.folderName); } #endregion string abaqusOutputFolder = Convert.ToString(model.blankRadius) + "r" + Convert.ToString(model.friction) + "f"; file.outputFolder = Path.Combine(genReport.folderName, abaqusOutputFolder); if (!Directory.Exists(file.outputFolder)) { Directory.CreateDirectory(file.outputFolder); } #region Пути для солида file.caeFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, add.jobName + ".cae"); file.caeFolder = file.caeFolder.Replace(@"\", "/"); file.stampFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.stampName); file.stampFolder = file.stampFolder.Replace(@"\", "/"); file.blankFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.blankName); file.blankFolder = file.blankFolder.Replace(@"\", "/"); file.platformFolder = Path.Combine(Environment.CurrentDirectory, file.outputFolder, file.platformName); file.platformFolder = file.platformFolder.Replace(@"\", "/"); #endregion var solid = new CAD(); solid.UseSolid(file, model); rout.pathIn = "abaqusMacros.py"; rout.workingDirectory = file.outputFolder; rout.pathOut = rout.workingDirectory + @"\abaqusMacros.py"; var change = new Change(); change.Output(rout, model, material, add, file); var abaqus = new CAE(); abaqus.runAbaqus(rout, cmd); var processData = new ProcessData(rout, cmd); processData.Processing(model, file, filesForVolume, genReport); finalReport.AddData(model); genReport.AddFrictionToChart(model); genReport.AddRadiusToChart(model); #region проверка симплекса string fileName = "SimplexNodes"; var str = new StringBuilder(); str.Append(kForNodes); str.Append(";"); str.Append(model.blankRadius); str.Append(";"); str.Append(model.friction); str.Append(";"); str.Append(model.pctOfDieFilling); str.Append(";"); str.Append((model.reactionForceToBlank * Math.Pow(10, -6))); str.Append(";"); str.Append(Environment.NewLine); var fileCreate = new FileCreation(); fileCreate.CreateFile("", fileName, ".csv", str.ToString()); #endregion }