Fix max spacing of stirrups

This commit is contained in:
Evgeny Redikultsev
2025-05-25 20:51:30 +05:00
parent add2ed8777
commit 4a6127d7fd
11 changed files with 175 additions and 19 deletions

View File

@@ -1,5 +1,6 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
@@ -11,6 +12,7 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
private IStirrupEffectiveness stirrupEffectiveness;
private IStirrupByRebar stirrupByRebar;
private IInclinedSection inclinedSection;
private readonly IForceTuple forceTuple;
private StirrupByDensityStrengthLogic stirrupDensityStrengthLogic;
private IConvertStrategy<IStirrupByDensity, IStirrupByRebar> convertStrategy;
public IShiftTraceLogger? TraceLogger { get; set; }
@@ -19,6 +21,7 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
IStirrupEffectiveness stirrupEffectiveness,
IStirrupByRebar stirrupByRebar,
IInclinedSection inclinedSection,
IForceTuple forceTuple,
StirrupByDensityStrengthLogic stirrupDensityStrengthLogic,
IConvertStrategy<IStirrupByDensity, IStirrupByRebar> convertStrategy,
IShiftTraceLogger? traceLogger)
@@ -26,6 +29,7 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
this.stirrupEffectiveness = stirrupEffectiveness;
this.stirrupByRebar = stirrupByRebar;
this.inclinedSection = inclinedSection;
this.forceTuple = forceTuple;
this.stirrupDensityStrengthLogic = stirrupDensityStrengthLogic;
this.convertStrategy = convertStrategy;
TraceLogger = traceLogger;
@@ -35,17 +39,27 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
IStirrupEffectiveness stirrupEffectiveness,
IStirrupByRebar stirrupByRebar,
IInclinedSection inclinedSection,
IForceTuple forceTuple,
IShiftTraceLogger? traceLogger)
{
this.stirrupEffectiveness = stirrupEffectiveness;
this.stirrupByRebar = stirrupByRebar;
this.inclinedSection = inclinedSection;
this.forceTuple = forceTuple;
TraceLogger = traceLogger;
}
public double GetShearStrength()
{
InitializeStrategies();
double maxSpacingRatio = inclinedSection.ConcreteTensionStrength * inclinedSection.WebWidth * inclinedSection.EffectiveDepth / forceTuple.Qy;
maxSpacingRatio = Math.Min(maxSpacingRatio, 0.5);
double maxStirrupSpacingByEffectibeDepth = maxSpacingRatio * inclinedSection.EffectiveDepth;
if (stirrupByRebar.Spacing > maxStirrupSpacingByEffectibeDepth)
{
TraceLogger?.AddMessage($"Stirrup spacing S = {stirrupByRebar.Spacing}(m) is greater than max stirrup spacing Smax = {maxStirrupSpacingByEffectibeDepth}(m), stirrups are ignored", TraceLogStatuses.Warning);
return 0;
}
double shearStrength = stirrupDensityStrengthLogic.GetShearStrength();
return shearStrength;
}

View File

@@ -10,14 +10,14 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
{
internal class StirrupStrengthLogic : IBeamShearStrenghLogic
{
private IStirrup stirrup;
private IInclinedSection inclinedSection;
private readonly IBeamShearSectionLogicInputData inputData;
private IStirrup stirrup => inputData.Stirrup;
private IInclinedSection inclinedSection => inputData.InclinedSection;
private IBeamShearStrenghLogic stirrupDensityStrengthLogic;
public StirrupStrengthLogic(IStirrup stirrup, IInclinedSection inclinedSection, IShiftTraceLogger? traceLogger)
public StirrupStrengthLogic(IBeamShearSectionLogicInputData inputData, IShiftTraceLogger? traceLogger)
{
this.stirrup = stirrup;
this.inclinedSection = inclinedSection;
this.inputData = inputData;
TraceLogger = traceLogger;
}
@@ -35,7 +35,7 @@ namespace StructureHelperLogics.Models.BeamShears.Logics
else if (stirrup is IStirrupByRebar stirrupByRebar)
{
TraceLogger?.AddMessage("Stirrups type is stirrup by rebar");
stirrupDensityStrengthLogic = new StirrupByRebarStrengthLogic(stirrupEffectiveness, stirrupByRebar, inclinedSection, TraceLogger);
stirrupDensityStrengthLogic = new StirrupByRebarStrengthLogic(stirrupEffectiveness, stirrupByRebar, inclinedSection, inputData.ForceTuple, TraceLogger);
return stirrupDensityStrengthLogic.GetShearStrength();
}
else