Fix BeamShearCalculatorLogic

This commit is contained in:
Evgeny Redikultsev
2025-05-11 22:00:22 +05:00
parent 2269b2ea07
commit b38bad251d
26 changed files with 244 additions and 58 deletions

View File

@@ -28,9 +28,9 @@ namespace StructureHelperLogics.Models.BeamShears
foreach (var calcTerm in calcTerms)
{
IForceTuple forceTuple = GetForceTuple(action, limitState, calcTerm);
BeamShearSectionLogicInputData newItem = new()
BeamShearSectionLogicInputData newItem = new(Guid.NewGuid())
{
BeamShearSection = section,
//BeamShearSection = section,
ForceTuple = forceTuple,
Stirrup = stirrup,
LimitState = limitState,

View File

@@ -1,7 +1,11 @@
using StructureHelperCommon.Models;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Forces.BeamShearActions;
using StructureHelperCommon.Models.Forces.Logics;
using StructureHelperCommon.Models.Loggers;
using StructureHelperCommon.Services.Forces;
using System.Security.Cryptography.X509Certificates;
//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
@@ -15,42 +19,82 @@ namespace StructureHelperLogics.Models.BeamShears
/// <inheritdoc/>
public IShiftTraceLogger? TraceLogger { get; set; }
public IBeamShearAxisAction AxisAction { get; private set; }
public IInclinedSection InclinedSection { get; private set; }
public IBeamShearAction AxisAction { get; set; }
public IInclinedSection InclinedSection { get; set; }
public LimitStates LimitState { get; set; }
public CalcTerms CalcTerm { get; set; }
public GetDirectShearForceLogic(
IBeamShearAxisAction axisAction,
IInclinedSection inclinedSection,
IBeamShearAction axisAction,
IInclinedSection inclinedSection,
LimitStates limitState,
CalcTerms calcTerm,
IShiftTraceLogger? traceLogger)
{
AxisAction = axisAction;
InclinedSection = inclinedSection;
LimitState = limitState;
CalcTerm = calcTerm;
TraceLogger = traceLogger;
}
public GetDirectShearForceLogic(
IBeamShearAxisAction axisAction,
IBeamShearAction axisAction,
IInclinedSection inclinedSection,
LimitStates limitState,
CalcTerms calcTerm,
IShiftTraceLogger? traceLogger,
ISumForceByShearLoadLogic summaryForceLogic)
{
this.summaryForceLogic = summaryForceLogic;
AxisAction = axisAction;
InclinedSection = inclinedSection;
LimitState = limitState;
CalcTerm = calcTerm;
TraceLogger = traceLogger;
}
/// <inheritdoc/>
public IForceTuple CalculateShearForce()
public IForceTuple CalculateShearForceTuple()
{
IForceTuple externalTuple = CalculateExternalForceTuple();
IForceTuple internalTuple = CalculateInternalForceTuple();
IForceTuple totalTuple = ForceTupleService.SumTuples(internalTuple, externalTuple);
TraceLogger?.AddMessage($"Total longitudinal force = {totalTuple.Nz}(N)");
TraceLogger?.AddMessage($"Total shear force = {totalTuple.Qy}(N)");
return totalTuple;
}
private IForceTuple CalculateExternalForceTuple()
{
var forceTupleLogic = new GetForceTupleByFactoredTupleLogic()
{
FactoredForceTuple = AxisAction.ExternalForce,
LimitState = LimitState,
CalcTerm = CalcTerm
};
IForceTuple internalForceTuple = forceTupleLogic.GetForceTuple();
return internalForceTuple;
}
private IForceTuple CalculateInternalForceTuple()
{
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
InitializeStrategies();
IForceTuple supportShearForce = AxisAction.SupportForce.ForceTuple;
TraceLogger?.AddMessage($"Shear force at support Qmax = {supportShearForce}(N)");
IBeamShearAxisAction beamShearAxisAction = AxisAction.SupportAction;
var forceTupleLogic = new GetForceTupleByFactoredTupleLogic()
{
FactoredForceTuple = beamShearAxisAction.SupportForce,
LimitState = LimitState,
CalcTerm = CalcTerm
};
IForceTuple supportShearForce= forceTupleLogic.GetForceTuple();
TraceLogger?.AddMessage($"Shear force at support Qmax = {supportShearForce.Qy}(N)");
TraceLogger?.AddMessage($"Start of inclined section a,start = {InclinedSection.StartCoord}(m)");
TraceLogger?.AddMessage($"End of inclined section a,end = {InclinedSection.EndCoord}(m)");
ForceTuple summarySpanShearForce = new (Guid.NewGuid());
foreach (var item in AxisAction.ShearLoads)
foreach (var item in beamShearAxisAction.ShearLoads)
{
IForceTuple summarySpanLoad = summaryForceLogic.GetSumShearForce(item, InclinedSection.StartCoord, InclinedSection.EndCoord);
ForceTupleService.SumTupleToTarget(summarySpanLoad, summarySpanShearForce);
@@ -65,5 +109,6 @@ namespace StructureHelperLogics.Models.BeamShears
{
summaryForceLogic ??= new SumForceByShearLoadLogic(TraceLogger);
}
}
}

View File

@@ -6,6 +6,7 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears
{
/// <inheritdoc/>
public class GetInclinedSectionListInputData : IGetInclinedSectionListInputData
{
public int StepCount { get; set; } = 50;

View File

@@ -7,7 +7,7 @@ namespace StructureHelperLogics.Models.BeamShears
{
public class GetInclinedSectionListLogic : IGetInclinedSectionListLogic
{
private readonly GetInclinedSectionListInputData inputData;
private readonly IGetInclinedSectionListInputData inputData;
private IGetInclinedSectionLogic inclinedSectionLogic;
private double depth;
private double effectiveDepth;
@@ -16,7 +16,7 @@ namespace StructureHelperLogics.Models.BeamShears
public IShiftTraceLogger? TraceLogger { get; set; }
public GetInclinedSectionListLogic(
GetInclinedSectionListInputData inputData,
IGetInclinedSectionListInputData inputData,
IShiftTraceLogger? traceLogger)
{
this.inputData = inputData;

View File

@@ -4,6 +4,7 @@ using StructureHelperCommon.Models.Shapes;
namespace StructureHelperLogics.Models.BeamShears
{
/// <inheritdoc/>
public class GetInclinedSectionLogic : IGetInclinedSectionLogic
{
private readonly IBeamShearSection beamShearSection;

View File

@@ -12,6 +12,6 @@ namespace StructureHelperLogics.Models.BeamShears
/// Returns value of shear force at the end of inclined section
/// </summary>
/// <returns>Value of shear force at the end of inclined section</returns>
IForceTuple CalculateShearForce();
IForceTuple CalculateShearForceTuple();
}
}

View File

@@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.Models.BeamShears
{
/// <summary>
/// Implement logic for obtaining of inclined section
/// Implements logic for obtaining of inclined section
/// </summary>
public interface IGetInclinedSectionLogic : ILogic
{

View File

@@ -37,7 +37,7 @@ namespace StructureHelperLogics.Models.BeamShears
TraceLogger?.AddMessage(LoggerStrings.LogicType(this), TraceLogStatuses.Service);
InitializeStrategies();
double factor = getFactorLogic.GetFactor();
IForceTuple directShearForce = getDirectShearForceLogic.CalculateShearForce();
IForceTuple directShearForce = getDirectShearForceLogic.CalculateShearForceTuple();
IForceTuple shearForce = ForceTupleService.MultiplyTupleByFactor(directShearForce,factor);
return shearForce;
}
@@ -50,7 +50,7 @@ namespace StructureHelperLogics.Models.BeamShears
LimitState = InputData.LimitState,
CalcTerm = InputData.CalcTerm
};
getDirectShearForceLogic ??= new GetDirectShearForceLogic(InputData.AxisAction, InputData.InclinedSection, TraceLogger);
//getDirectShearForceLogic ??= new GetDirectShearForceLogic(InputData.AxisAction, InputData.InclinedSection, TraceLogger);
}
}
}

View File

@@ -65,7 +65,7 @@ namespace StructureHelperLogics.Models.BeamShears
if (concentratedForce.ForceCoordinate < limitCoordinate)
{
totalLoad = ForceTupleService.MultiplyTupleByFactor(concentratedForce.ForceValue, concentratedForce.LoadRatio);
TraceLogger?.AddMessage($"Total load Q,tot = {concentratedForce.ForceValue}(N) * {concentratedForce.LoadRatio} = {totalLoad}(N)");
TraceLogger?.AddMessage($"Total load Q,tot = {concentratedForce.ForceValue.Qy}(N) * {concentratedForce.LoadRatio} = {totalLoad}(N)");
}
else
{

View File

@@ -57,7 +57,7 @@ namespace StructureHelperLogics.Models.BeamShears
TraceLogger?.AddMessage($"Total length L,tot = {loadEndCoord}(m) - {loadStartCoord}(m) = {loadLength}(m)");
double sumFactor = distributedLoad.LoadRatio * loadLength;
IForceTuple totalLoad = ForceTupleService.MultiplyTupleByFactor(distributedLoad.LoadValue, sumFactor);
TraceLogger?.AddMessage($"Total load Q,tot = {distributedLoad.LoadValue.Qy}(N/m) * {distributedLoad.LoadRatio} * {loadLength}(m) = {totalLoad}(N)");
TraceLogger?.AddMessage($"Total load Q,tot = {distributedLoad.LoadValue.Qy}(N/m) * {distributedLoad.LoadRatio} * {loadLength}(m) = {totalLoad.Qy}(N)");
return totalLoad;
}
}

View File

@@ -50,7 +50,7 @@ namespace StructureHelperLogics.Models.BeamShears
{
sumConcentratedForceLogic ??= new SumConcentratedForceLogic(TraceLogger);
IForceTuple sumForce = sumConcentratedForceLogic.GetSumShearForce(concenratedForce, startCoord, endCoord);
TraceLogger?.AddMessage($"Sum of uniformly distributed load Qud = {sumForce}(N)");
TraceLogger?.AddMessage($"Sum of concentrated force Qcf = {sumForce.Qy}(N)");
return sumForce;
}
@@ -58,7 +58,7 @@ namespace StructureHelperLogics.Models.BeamShears
{
sumDistributedLoadLogic ??= new SumDistributedLoadLogic(TraceLogger);
IForceTuple sumForce = sumDistributedLoadLogic.GetSumShearForce(distributedLoad, startCoord, endCoord);
TraceLogger?.AddMessage($"Sum of concentrated force Qcf = {sumForce}(N)");
TraceLogger?.AddMessage($"Sum of uniformly distributed load Qud = {sumForce.Qy}(N)");
return sumForce;
}