Add test of rebar by density and rebar by inclined rebar
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Models.Loggers;
|
||||
using StructureHelperCommon.Services;
|
||||
using StructureHelperLogics.Models.BeamShears.Logics;
|
||||
|
||||
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
|
||||
//All rights reserved.
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
/// <inheritdoc/>
|
||||
public class StirrupByDensityStrengthLogic : IBeamShearStrenghLogic
|
||||
{
|
||||
private readonly IStirrupEffectiveness stirrupEffectiveness;
|
||||
private readonly IStirrupByDensity stirrupByDensity;
|
||||
private readonly IInclinedSection inclinedSection;
|
||||
|
||||
|
||||
public StirrupByDensityStrengthLogic(
|
||||
IStirrupEffectiveness stirrupEffectiveness,
|
||||
IStirrupByDensity stirrupByDensity,
|
||||
IInclinedSection inclinedSection,
|
||||
IShiftTraceLogger? traceLogger)
|
||||
{
|
||||
this.stirrupEffectiveness = stirrupEffectiveness;
|
||||
this.stirrupByDensity = stirrupByDensity;
|
||||
this.inclinedSection = inclinedSection;
|
||||
TraceLogger = traceLogger;
|
||||
}
|
||||
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
/// <inheritdoc/>
|
||||
public double GetShearStrength()
|
||||
{
|
||||
Check();
|
||||
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
|
||||
TraceLogger?.AddMessage("Calculation has been started", TraceLogStatuses.Debug);
|
||||
if (stirrupByDensity.EndCoordinate < inclinedSection.StartCoord)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrup end coordinate Xend = {stirrupByDensity.EndCoordinate}(m) is less than incline section start coordinate Xstart = {inclinedSection.StartCoord}(m), stirrup {stirrupByDensity.Name} has been ignored");
|
||||
return 0;
|
||||
}
|
||||
if (stirrupByDensity.StartCoordinate > inclinedSection.EndCoord)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrup start coordinate Xstart = {stirrupByDensity.StartCoordinate}(m) is bigger than incline section end coordinate Xend = {inclinedSection.EndCoord}(m), stirrup {stirrupByDensity.Name} has been ignored");
|
||||
return 0;
|
||||
}
|
||||
double crackLength = inclinedSection.EndCoord - inclinedSection.StartCoord;
|
||||
TraceLogger?.AddMessage($"Length of crack = {inclinedSection.EndCoord} - {inclinedSection.StartCoord} = {crackLength}(m)");
|
||||
double crackEndCoord = Math.Min(stirrupByDensity.EndCoordinate, inclinedSection.EndCoord);
|
||||
double crackStartCoord = Math.Max(stirrupByDensity.StartCoordinate, inclinedSection.StartCoord);
|
||||
double crackLengthViaStirrup = crackEndCoord - crackStartCoord;
|
||||
TraceLogger?.AddMessage($"Length of crack via stirrup = {crackEndCoord} - {crackStartCoord} = {crackLengthViaStirrup}(m)");
|
||||
double maxCrackLength = stirrupEffectiveness.MaxCrackLengthRatio * inclinedSection.EffectiveDepth;
|
||||
TraceLogger?.AddMessage($"Max length of crack = {stirrupEffectiveness.MaxCrackLengthRatio} * {inclinedSection.EffectiveDepth} = {maxCrackLength}(m)");
|
||||
double finalCrackLength = Math.Min(crackLengthViaStirrup, maxCrackLength);
|
||||
TraceLogger?.AddMessage($"Length of crack = Min({crackLengthViaStirrup}, {maxCrackLength}) = {finalCrackLength}(m)");
|
||||
double finalDensity = stirrupEffectiveness.StirrupShapeFactor * stirrupEffectiveness.StirrupPlacementFactor * stirrupByDensity.StirrupDensity;
|
||||
TraceLogger?.AddMessage($"Stirrups design density qsw = {stirrupEffectiveness.StirrupShapeFactor} * {stirrupEffectiveness.StirrupPlacementFactor} * {stirrupByDensity.StirrupDensity} = {finalDensity}(N/m)");
|
||||
double concreteDensity = inclinedSection.WebWidth * inclinedSection.ConcreteTensionStrength;
|
||||
double minFinalDensity = stirrupEffectiveness.MinimumStirrupRatio * concreteDensity;
|
||||
if (finalDensity < minFinalDensity)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Since stirrups design density qsw = {finalDensity}(N/m) less than qsw,min = {stirrupEffectiveness.MinimumStirrupRatio} * {concreteDensity} = {minFinalDensity}(N/m), final density is equal to zero", TraceLogStatuses.Warning);
|
||||
finalDensity = 0;
|
||||
}
|
||||
double strength = finalDensity * finalCrackLength;
|
||||
TraceLogger?.AddMessage($"Bearing capacity of stirrups V = {finalDensity} * {finalCrackLength} = {strength}(N)");
|
||||
TraceLogger?.AddMessage("Calculation has been finished successfully", TraceLogStatuses.Debug);
|
||||
return strength;
|
||||
}
|
||||
|
||||
private void Check()
|
||||
{
|
||||
CheckObject.IsNull(stirrupByDensity);
|
||||
CheckObject.IsNull(inclinedSection);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using StructureHelperCommon.Infrastructures.Enums;
|
||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Services;
|
||||
using StructureHelperLogics.Models.Materials;
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
public class StirrupByInclinedRebarStrengthLogic : IBeamShearStrenghLogic
|
||||
{
|
||||
const double stirrupEffectivenessFactor = 0.75;
|
||||
private readonly IStirrupByInclinedRebar inclinedRebar;
|
||||
private readonly IInclinedSection inclinedSection;
|
||||
private double angleInRad;
|
||||
private double rebarStartPoint;
|
||||
private double rebarHeight;
|
||||
private double rebarEndPoint;
|
||||
private double rebarTrueStartPoint;
|
||||
private double rebarTrueEndPoint;
|
||||
private IRebarSectionStrengthLogic rebarSectionStrengthLogic;
|
||||
private IInterpolateValueLogic interpolationLogic;
|
||||
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
|
||||
public StirrupByInclinedRebarStrengthLogic(
|
||||
IInclinedSection inclinedSection,
|
||||
IStirrupByInclinedRebar inclinedRebar,
|
||||
IShiftTraceLogger traceLogger) : this(
|
||||
inclinedSection,
|
||||
inclinedRebar,
|
||||
new RebarSectionStrengthLogic(),
|
||||
new InterpolateValueLogic(),
|
||||
traceLogger
|
||||
) { }
|
||||
|
||||
public StirrupByInclinedRebarStrengthLogic(
|
||||
IInclinedSection inclinedSection,
|
||||
IStirrupByInclinedRebar inclinedRebar,
|
||||
IRebarSectionStrengthLogic rebarSectionStrengthLogic,
|
||||
IInterpolateValueLogic interpolationLogic,
|
||||
IShiftTraceLogger? traceLogger)
|
||||
{
|
||||
this.inclinedSection = inclinedSection;
|
||||
this.inclinedRebar = inclinedRebar;
|
||||
this.rebarSectionStrengthLogic = rebarSectionStrengthLogic;
|
||||
this.interpolationLogic = interpolationLogic;
|
||||
TraceLogger = traceLogger;
|
||||
}
|
||||
|
||||
public double GetShearStrength()
|
||||
{
|
||||
GetGeometry();
|
||||
if (inclinedSection.StartCoord > rebarEndPoint)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Inclined section start point coordinate X = {inclinedSection.StartCoord} is greater than inclined rebar end point X = {rebarEndPoint}, inclined rebar has been ignored");
|
||||
return 0.0;
|
||||
}
|
||||
if (inclinedSection.EndCoord < rebarStartPoint)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Inclined section end point coordinate X = {inclinedSection.EndCoord} is less than inclined rebar start point X = {rebarStartPoint}, inclined rebar has been ignored");
|
||||
return 0.0;
|
||||
}
|
||||
if (inclinedSection.StartCoord > rebarTrueEndPoint & inclinedSection.StartCoord < rebarEndPoint)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Inclined section start point coordinate X = {inclinedSection.StartCoord} is in end transfer zone");
|
||||
return GetEndTransferValue();
|
||||
}
|
||||
if (inclinedSection.EndCoord > rebarStartPoint && inclinedSection.EndCoord < rebarTrueStartPoint)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Inclined section end point coordinate X = {inclinedSection.EndCoord} is in start transfer zone");
|
||||
return GetStartTransferValue();
|
||||
}
|
||||
TraceLogger?.AddMessage($"Inclined section with start point coordinate Xstart = {inclinedSection.StartCoord}(m) and end point Xend = {inclinedSection.EndCoord}(m) intersects inclined rebar in main zone with Xstart = {rebarTrueStartPoint}(m) and Xend = {rebarTrueEndPoint}(m)");
|
||||
return GetInclinedRebarStrength();
|
||||
}
|
||||
|
||||
private double GetStartTransferValue()
|
||||
{
|
||||
interpolationLogic.X1 = rebarStartPoint;
|
||||
interpolationLogic.X2 = rebarTrueStartPoint;
|
||||
interpolationLogic.Y1 = 0.0;
|
||||
interpolationLogic.Y2 = GetInclinedRebarStrength();
|
||||
interpolationLogic.KnownValueX = inclinedSection.EndCoord;
|
||||
return interpolationLogic.GetValueY();
|
||||
}
|
||||
|
||||
private double GetEndTransferValue()
|
||||
{
|
||||
interpolationLogic.X1 = rebarTrueEndPoint;
|
||||
interpolationLogic.X2 = rebarEndPoint;
|
||||
interpolationLogic.Y1 = GetInclinedRebarStrength();
|
||||
interpolationLogic.Y2 = 0.0;
|
||||
interpolationLogic.KnownValueX = inclinedSection.StartCoord;
|
||||
return interpolationLogic.GetValueY();
|
||||
}
|
||||
|
||||
private double GetInclinedRebarStrength()
|
||||
{
|
||||
rebarSectionStrengthLogic.RebarStrengthFactor = 0.8;
|
||||
rebarSectionStrengthLogic.MaxRebarStrength = 3e8;
|
||||
rebarSectionStrengthLogic.LimitState = LimitStates.ULS;
|
||||
rebarSectionStrengthLogic.CalcTerm = CalcTerms.ShortTerm;
|
||||
rebarSectionStrengthLogic.TraceLogger = TraceLogger;
|
||||
rebarSectionStrengthLogic.RebarSection = inclinedRebar.RebarSection;
|
||||
|
||||
double rebarStrength = rebarSectionStrengthLogic.GetRebarMaxTensileForce();
|
||||
double inclinedRebarStrength = stirrupEffectivenessFactor * rebarStrength * Math.Sin(angleInRad) * inclinedRebar.LegCount;
|
||||
TraceLogger?.AddMessage($"Inclined rebar Name = {inclinedRebar.Name}, start point {rebarStartPoint}(m), end point {rebarEndPoint}(m), angle of inclination {inclinedRebar.AngleOfInclination}(deg), number of legs {inclinedRebar.LegCount}");
|
||||
TraceLogger?.AddMessage($"Inclined rebar effectiveness factor fi_sw = {stirrupEffectivenessFactor}(dimensionless)");
|
||||
TraceLogger?.AddMessage($"Force in inclined rebar = fi_sw * Fsw * sin(alpha) * n = {stirrupEffectivenessFactor} * {rebarStrength}(N) * sin({inclinedRebar.AngleOfInclination}) * {inclinedRebar.LegCount} = {inclinedRebarStrength}(N)");
|
||||
return inclinedRebarStrength;
|
||||
}
|
||||
|
||||
private void GetGeometry()
|
||||
{
|
||||
double transferLength = Math.Max(inclinedRebar.TransferLength, 0.01);
|
||||
angleInRad = inclinedRebar.AngleOfInclination / 180 * Math.PI;
|
||||
rebarStartPoint = inclinedRebar.StartCoordinate;
|
||||
rebarHeight = inclinedSection.EffectiveDepth - inclinedRebar.CompressedGap;
|
||||
rebarEndPoint = rebarStartPoint + rebarHeight / Math.Tan(angleInRad);
|
||||
rebarTrueStartPoint = rebarStartPoint + transferLength;
|
||||
rebarTrueEndPoint = rebarEndPoint - transferLength;
|
||||
if (rebarTrueStartPoint >= rebarTrueEndPoint)
|
||||
{
|
||||
throw new StructureHelperException("Transfer zone in inclined rebar is too big");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
|
||||
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
|
||||
//All rights reserved.
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
public class StirrupByRebarStrengthLogic : IBeamShearStrenghLogic
|
||||
{
|
||||
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; }
|
||||
|
||||
public StirrupByRebarStrengthLogic(
|
||||
IStirrupEffectiveness stirrupEffectiveness,
|
||||
IStirrupByRebar stirrupByRebar,
|
||||
IInclinedSection inclinedSection,
|
||||
IForceTuple forceTuple,
|
||||
StirrupByDensityStrengthLogic stirrupDensityStrengthLogic,
|
||||
IConvertStrategy<IStirrupByDensity, IStirrupByRebar> convertStrategy,
|
||||
IShiftTraceLogger? traceLogger)
|
||||
{
|
||||
this.stirrupEffectiveness = stirrupEffectiveness;
|
||||
this.stirrupByRebar = stirrupByRebar;
|
||||
this.inclinedSection = inclinedSection;
|
||||
this.forceTuple = forceTuple;
|
||||
this.stirrupDensityStrengthLogic = stirrupDensityStrengthLogic;
|
||||
this.convertStrategy = convertStrategy;
|
||||
TraceLogger = traceLogger;
|
||||
}
|
||||
|
||||
public StirrupByRebarStrengthLogic(
|
||||
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();
|
||||
if (stirrupByRebar.EndCoordinate < inclinedSection.StartCoord)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrup end coordinate Xend = {stirrupByRebar.EndCoordinate}(m) is less than incline section start coordinate Xstart = {inclinedSection.StartCoord}(m), stirrup {stirrupByRebar.Name} has been ignored");
|
||||
return 0;
|
||||
}
|
||||
if (stirrupByRebar.StartCoordinate > inclinedSection.EndCoord)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrup start coordinate Xstart = {stirrupByRebar.StartCoordinate}(m) is bigger than incline section end coordinate Xend = {inclinedSection.EndCoord}(m), stirrup {stirrupByRebar.Name} has been ignored");
|
||||
return 0;
|
||||
}
|
||||
TraceLogger?.AddMessage($"Stirrup diameter d = {stirrupByRebar.Diameter}(m)");
|
||||
TraceLogger?.AddMessage($"Stirrup leg number n = {stirrupByRebar.LegCount}");
|
||||
TraceLogger?.AddMessage($"Stirrup spacing S = {stirrupByRebar.Spacing}(m)");
|
||||
double maxSpacingRatio = inclinedSection.ConcreteTensionStrength * inclinedSection.WebWidth * inclinedSection.EffectiveDepth / forceTuple.Qy;
|
||||
TraceLogger?.AddMessage($"Maximum spacing ratio due to strength beetwen hoops Sr,max = {maxSpacingRatio}(dimensionless)");
|
||||
maxSpacingRatio = Math.Min(maxSpacingRatio, 0.5);
|
||||
TraceLogger?.AddMessage($"Maximum spacing ratio Sr,max = {maxSpacingRatio}(dimensionless)");
|
||||
double maxStirrupSpacingByEffectibeDepth = maxSpacingRatio * inclinedSection.EffectiveDepth;
|
||||
TraceLogger?.AddMessage($"Maximum spacing S,max = {maxStirrupSpacingByEffectibeDepth}(m)");
|
||||
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;
|
||||
}
|
||||
|
||||
private void InitializeStrategies()
|
||||
{
|
||||
convertStrategy ??= new StirrupByRebarToDensityConvertStrategy(TraceLogger, inclinedSection);
|
||||
IStirrupByDensity stirrupByDensity = convertStrategy.Convert(stirrupByRebar);
|
||||
stirrupDensityStrengthLogic ??= new(stirrupEffectiveness, stirrupByDensity, inclinedSection, TraceLogger);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||
using StructureHelperCommon.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
internal class StirrupGroupStrengthLogic : IBeamShearStrenghLogic
|
||||
{
|
||||
private readonly IBeamShearSectionLogicInputData sourceInputData;
|
||||
private IBeamShearSectionLogicInputData localInputData;
|
||||
private IStirrupGroup stirrupGroup;
|
||||
private IUpdateStrategy<IBeamShearSectionLogicInputData> inputDataUpdateStrategy;
|
||||
|
||||
public StirrupGroupStrengthLogic(IBeamShearSectionLogicInputData inputData, IStirrupGroup stirrupGroup, IShiftTraceLogger? traceLogger)
|
||||
{
|
||||
this.sourceInputData = inputData;
|
||||
this.stirrupGroup = stirrupGroup;
|
||||
TraceLogger = traceLogger;
|
||||
}
|
||||
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
|
||||
public double GetShearStrength()
|
||||
{
|
||||
Check();
|
||||
if (!stirrupGroup.Stirrups.Any()) { return 0.0; }
|
||||
GetLocalInputData();
|
||||
double shearStrength = 0;
|
||||
foreach (var item in stirrupGroup.Stirrups)
|
||||
{
|
||||
localInputData.Stirrup = item;
|
||||
var stirrupSrengthLogic = new StirrupStrengthLogic(localInputData, TraceLogger?.GetSimilarTraceLogger(50));
|
||||
shearStrength += stirrupSrengthLogic.GetShearStrength();
|
||||
}
|
||||
TraceLogger?.AddMessage($"Total bearing capacity of group {stirrupGroup.Name} for shear Vtot = {shearStrength}(N)");
|
||||
return shearStrength;
|
||||
}
|
||||
|
||||
private void Check()
|
||||
{
|
||||
if (stirrupGroup is null)
|
||||
{
|
||||
throw new StructureHelperException(ErrorStrings.ParameterIsNull + ": Stirrup group");
|
||||
}
|
||||
if (stirrupGroup.Stirrups is null)
|
||||
{
|
||||
throw new StructureHelperException(ErrorStrings.ParameterIsNull + ": Stirrups");
|
||||
}
|
||||
}
|
||||
|
||||
private void GetLocalInputData()
|
||||
{
|
||||
localInputData = new BeamShearSectionLogicInputData(Guid.Empty);
|
||||
inputDataUpdateStrategy ??= new BeamShearSectionLogicInputDataUpdateStrategy();
|
||||
inputDataUpdateStrategy.Update(localInputData, sourceInputData);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Models.Shapes;
|
||||
|
||||
namespace StructureHelperLogics.Models.BeamShears
|
||||
{
|
||||
internal class StirrupStrengthLogic : IBeamShearStrenghLogic
|
||||
{
|
||||
private readonly IBeamShearSectionLogicInputData inputData;
|
||||
private IStirrup stirrup => inputData.Stirrup;
|
||||
private IInclinedSection inclinedSection => inputData.InclinedCrack;
|
||||
private IBeamShearStrenghLogic stirrupByDensityStrengthLogic;
|
||||
private IBeamShearStrenghLogic stirrupGroupStrengthLogic;
|
||||
private IBeamShearStrenghLogic stirrupByInclinedRebarStrengthLogic;
|
||||
private IStirrupEffectiveness stirrupEffectiveness;
|
||||
|
||||
public StirrupStrengthLogic(IBeamShearSectionLogicInputData inputData, IShiftTraceLogger? traceLogger)
|
||||
{
|
||||
this.inputData = inputData;
|
||||
TraceLogger = traceLogger;
|
||||
}
|
||||
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
|
||||
public double GetShearStrength()
|
||||
{
|
||||
GetStirrupEffectiveness();
|
||||
if (stirrup is IStirrupByRebar stirrupByRebar)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrups type is stirrup by rebar Name = {stirrupByRebar.Name}");
|
||||
stirrupByDensityStrengthLogic = new StirrupByRebarStrengthLogic(stirrupEffectiveness, stirrupByRebar, inclinedSection, inputData.ForceTuple, TraceLogger);
|
||||
return stirrupByDensityStrengthLogic.GetShearStrength();
|
||||
}
|
||||
else if (stirrup is IStirrupGroup stirrupGroup)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrups type is stirrup group Name = {stirrupGroup.Name}");
|
||||
stirrupGroupStrengthLogic ??= new StirrupGroupStrengthLogic(inputData, stirrupGroup, TraceLogger);
|
||||
return stirrupGroupStrengthLogic.GetShearStrength();
|
||||
}
|
||||
else if (stirrup is IStirrupByDensity stirrupByDensity)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrups type is stirrup by density Name = {stirrupByDensity.Name}");
|
||||
stirrupByDensityStrengthLogic = new StirrupByDensityStrengthLogic(stirrupEffectiveness, stirrupByDensity, inclinedSection, TraceLogger);
|
||||
return stirrupByDensityStrengthLogic.GetShearStrength();
|
||||
}
|
||||
else if (stirrup is IStirrupByInclinedRebar inclinedRebar)
|
||||
{
|
||||
TraceLogger?.AddMessage($"Stirrups type is inclined rebar Name = {inclinedRebar.Name}");
|
||||
stirrupByInclinedRebarStrengthLogic ??= new StirrupByInclinedRebarStrengthLogic(inclinedSection, inclinedRebar, TraceLogger);
|
||||
return stirrupByInclinedRebarStrengthLogic.GetShearStrength();
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(stirrup));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void GetStirrupEffectiveness()
|
||||
{
|
||||
if (inclinedSection.BeamShearSection.Shape is IRectangleShape)
|
||||
{
|
||||
stirrupEffectiveness = StirrupEffectivenessFactory.GetEffectiveness(BeamShearSectionType.Rectangle);
|
||||
}
|
||||
else if (inclinedSection.BeamShearSection.Shape is ICircleShape)
|
||||
{
|
||||
stirrupEffectiveness = StirrupEffectivenessFactory.GetEffectiveness(BeamShearSectionType.Circle);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user