public static IEnumerable <WP.Paragraph> CalculateForceMoment(Bar bar, float Ry) { var report = new List <WP.Paragraph>(); var section = bar.Section; var ecc = bar.ActualMoment / Math.Abs(bar.ActualForce) * 100; report.Add(FormulaCreator.GenerateParagraphWithText($"Эксцентриситет:")); report.Add(FormulaCreator.EccentricityParagraph(bar, ecc)); var m = ecc * section.Area / section.SectionModulusX; report.Add(FormulaCreator.GenerateParagraphWithText($"Относительный эксцентриситет:")); report.Add(FormulaCreator.ReffEccentricityParagraph(bar, ecc, m)); var lambda_x = bar.Length / section.RadiusOfGyrationX / 10; report.Add(FormulaCreator.GenerateParagraphWithText("Гибкость стержня: ")); report.Add(FormulaCreator.LambdaParagraph(bar, lambda_x)); var lambda_x_ref = lambda_x * (float)Math.Sqrt(Ry / E); report.Add(FormulaCreator.GenerateParagraphWithText("Условная гибкость стержня: ")); report.Add(FormulaCreator.LambdaRefParagraph(lambda_x, lambda_x_ref, Ry, E)); var af_aw = section.Width / 2F / section.Height; report.Add(FormulaCreator.GenerateParagraphWithText("Коэффициент η определяем по таблице 73 в зависимости от относительного эксцентриситета m, условной гибкости стержня и отношении площади полок к площади стенок сечения:")); report.Add(FormulaCreator.AreaFractionParagraph(bar, af_aw)); var etta = Etta(af_aw, lambda_x_ref, m, bar); report.Add(FormulaCreator.GenerateParagraphWithText($"η = {etta}")); var mef = m * etta; report.Add(FormulaCreator.GenerateParagraphWithText("Приведенный относительный коэффициент: ")); report.Add(FormulaCreator.MefParagraph(m, etta, mef)); var fie = GetFie(lambda_x_ref, mef); report.Add(FormulaCreator.GenerateParagraphWithText($"По таблице 74 СНиП II-23-81* определяем коэффициент φe: {fie}")); bar.CalcResult = Math.Abs(bar.ActualForce) / bar.Section.Area / Ry * 100 / fie; report.Add(FormulaCreator.GenerateParagraphWithText($"Проверка стержня на потерю устойчивости в плоскости:")); report.Add(FormulaCreator.GenerateParagraphWithAxialCompressionFormula(bar, Ry, fie, true)); bar.CalcType = "расчет на в/ц сжатие"; return(report); }
public static float Etta(float af_aw, float lambda_ref, float m, Bar bar) { if (lambda_ref <= 5 && lambda_ref >= 0) { if (m <= 5 && m >= 0.1) { var af_aw_025 = (1.45F - 0.05F * m) - 0.01F * (5 - m) * lambda_ref; var af_aw_05 = (1.75F - 0.1F * m) - 0.02F * (5 - m) * lambda_ref; var af_aw_10 = (1.9F - 0.1F * m) - 0.02F * (6 - m) * lambda_ref; float k, b; if (af_aw <= 0.5) { GetCoefficients(0.25F, af_aw_025, 0.5F, af_aw_05, out k, out b); return(k * af_aw + b); } GetCoefficients(0.5F, af_aw_05, 1F, af_aw_10, out k, out b); return(k * af_aw + b); } if (m > 5 && m <= 20) { var af_aw_025 = 1.2F; var af_aw_05 = 1.25F; var af_aw_10 = 1.4F - 0.02F * lambda_ref; float k, b; if (af_aw <= 0.5) { GetCoefficients(0.25F, af_aw_025, 0.5F, af_aw_05, out k, out b); return(k * af_aw + b); } GetCoefficients(0.5F, af_aw_05, 1F, af_aw_10, out k, out b); return(k * af_aw + b); } throw new ArithmeticException($"m coefficient is suspicious (m = {m} in bar {bar.BarNumber}). Change initial data"); } if (lambda_ref > 5) { var af_aw_025 = 1.2F; var af_aw_05 = 1.25F; var af_aw_10 = 1.3F; float k, b; if (af_aw <= 0.5) { GetCoefficients(0.25F, af_aw_025, 0.5F, af_aw_05, out k, out b); return(k * af_aw + b); } GetCoefficients(0.5F, af_aw_05, 1F, af_aw_10, out k, out b); return(k * af_aw + b); } throw new ArithmeticException($"Incorrect Labmda refference coefficient (l_ref = {lambda_ref}). Change initial data"); }
public static IEnumerable <WP.Paragraph> CalculateForce(Bar bar, float Ry) { var report = new List <WP.Paragraph>(); var lambda = bar.Length / bar.Section.RadiusOfGyrationX / 10; report.Add(FormulaCreator.GenerateParagraphWithText("Гибкость стержня: ")); report.Add(FormulaCreator.LambdaParagraph(bar, lambda)); var lambdaRef = lambda * (float)Math.Sqrt(Ry / E); report.Add(FormulaCreator.GenerateParagraphWithText("Условная гибкость стержня: ")); report.Add(FormulaCreator.LambdaRefParagraph(lambda, lambdaRef, Ry, E)); float fi; if (lambdaRef > 0 && lambdaRef <= 2.5) { fi = (float)(1 - (0.073 - 5.53 * Ry / E) * (float)Math.Pow(lambdaRef, 1.5)); } else if (lambdaRef > 2.5 && lambdaRef <= 4.5) { fi = (float)(1.47 - 13 * Ry / E - (0.371 - 27.3 * Ry / E) * lambdaRef + (0.0275 - 5.53 * Ry / E) * lambdaRef * lambdaRef); } else if (lambdaRef > 4.5) { fi = 332 / (lambdaRef * lambdaRef * (51 - lambdaRef)); } else { throw new ArgumentException($"Incorrect lambda ref coefficient = {lambdaRef} in bar {bar.ElementType} - {bar.BarNumber}"); } report.Add(FormulaCreator.GenerateParagraphWithText($"По таблице 72 СНиП II-23-81* определяем коэффициент φ: {fi}")); report.Add(FormulaCreator.GenerateParagraphWithText($"Проверка стержня на потерю устойчивости:")); bar.CalcResult = Math.Abs(Math.Abs(bar.ActualForce) / bar.Section.Area / fi / Ry * 100); report.Add(FormulaCreator.GenerateParagraphWithAxialCompressionFormula(bar, Ry, fi, false)); bar.CalcType = "расчет на сжатие"; return(report); }