From b38bad251df8d32de1b4032e5259e72ba1d720bc Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 11 May 2025 22:00:22 +0500 Subject: [PATCH] Fix BeamShearCalculatorLogic --- .../Models/Forces/ForceFactoredList.cs | 2 +- ...=> GetCombinationsByFactoredTupleLogic.cs} | 8 +- .../GetFactorByFactoredCombinationProperty.cs | 3 +- .../GetForceTupleByFactoredTupleLogic.cs | 42 +++++++++++ ...> IGetCombinationsByFactoredTupleLogic.cs} | 12 +-- .../IGetForceTupleByFactoredTupleLogic.cs | 11 +++ .../Forces/Logics/IGetForceTupleLogic.cs | 18 +++++ .../Models/Forces/Logics/IGetLoadFactor.cs | 4 + .../Models/BeamShears/BeamShearCalculator.cs | 2 +- .../BeamShears/BeamShearCalculatorLogic.cs | 75 ++++++++++++++----- .../BeamShearSectionLogicInputData.cs | 9 ++- .../Models/BeamShears/IBeamShearSection.cs | 2 +- .../IBeamShearSectionLogicInputData.cs | 19 ++++- ...lculatorToLogicInputDataConvertStrategy.cs | 4 +- .../Logics/GetDirectShearForceLogic.cs | 65 +++++++++++++--- .../Logics/GetInclinedSectionListInputData.cs | 1 + .../Logics/GetInclinedSectionListLogic.cs | 4 +- .../Logics/GetInclinedSectionLogic.cs | 1 + .../Logics/IGetDirectShearForceLogic.cs | 2 +- .../IGetInclinedSectionBySectionLogic.cs | 2 +- .../BeamShears/Logics/ShearForceLogic.cs | 4 +- .../Logics/SumConcentratedForceLogic.cs | 2 +- .../Logics/SumDistributedLoadLogic.cs | 2 +- .../Logics/SumForceByShearLoadLogic.cs | 4 +- .../GetDirectShearForceLogicTests.cs | 2 +- .../BeamShearTests/GetShearForceLogicTests.cs | 2 +- 26 files changed, 244 insertions(+), 58 deletions(-) rename StructureHelperCommon/Models/Forces/Logics/{GetCombinationByFactoredTupleLogic.cs => GetCombinationsByFactoredTupleLogic.cs} (92%) create mode 100644 StructureHelperCommon/Models/Forces/Logics/GetForceTupleByFactoredTupleLogic.cs rename StructureHelperCommon/Models/Forces/Logics/{IGetCombinationByFactoredTupleLogic.cs => IGetCombinationsByFactoredTupleLogic.cs} (69%) create mode 100644 StructureHelperCommon/Models/Forces/Logics/IGetForceTupleByFactoredTupleLogic.cs create mode 100644 StructureHelperCommon/Models/Forces/Logics/IGetForceTupleLogic.cs diff --git a/StructureHelperCommon/Models/Forces/ForceFactoredList.cs b/StructureHelperCommon/Models/Forces/ForceFactoredList.cs index 45cdcad..d004e55 100644 --- a/StructureHelperCommon/Models/Forces/ForceFactoredList.cs +++ b/StructureHelperCommon/Models/Forces/ForceFactoredList.cs @@ -11,7 +11,7 @@ namespace StructureHelperCommon.Models.Forces { readonly IUpdateStrategy updateStrategy = new ForceFactoredListUpdateStrategy(); private List result; - private IGetCombinationByFactoredTupleLogic getCombinationLogic = new GetCombinationByFactoredTupleLogic(); + private IGetCombinationsByFactoredTupleLogic getCombinationLogic = new GetCombinationsByFactoredTupleLogic(); /// public Guid Id { get; } diff --git a/StructureHelperCommon/Models/Forces/Logics/GetCombinationByFactoredTupleLogic.cs b/StructureHelperCommon/Models/Forces/Logics/GetCombinationsByFactoredTupleLogic.cs similarity index 92% rename from StructureHelperCommon/Models/Forces/Logics/GetCombinationByFactoredTupleLogic.cs rename to StructureHelperCommon/Models/Forces/Logics/GetCombinationsByFactoredTupleLogic.cs index efcfed8..46c4a6b 100644 --- a/StructureHelperCommon/Models/Forces/Logics/GetCombinationByFactoredTupleLogic.cs +++ b/StructureHelperCommon/Models/Forces/Logics/GetCombinationsByFactoredTupleLogic.cs @@ -2,6 +2,7 @@ using StructureHelperCommon.Infrastructures.Exceptions; using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Models.Shapes; using StructureHelperCommon.Services.Forces; using System; using System.Collections.Generic; @@ -9,9 +10,12 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +//Copyright (c) 2025 Redikultsev Evgeny, Ekaterinburg, Russia +//All rights reserved. + namespace StructureHelperCommon.Models.Forces.Logics { - public class GetCombinationByFactoredTupleLogic : IGetCombinationByFactoredTupleLogic + public class GetCombinationsByFactoredTupleLogic : IGetCombinationsByFactoredTupleLogic { private ForceCombinationList? result; private IForceTuple? fullSLSTuple; @@ -20,7 +24,7 @@ namespace StructureHelperCommon.Models.Forces.Logics public IForceTuple? SourceForceTuple { get; set; } public IFactoredCombinationProperty? CombinationProperty { get; set; } - public IForceActionProperty? ForceActionProperty { get; set; } + public IForceActionProperty? ForceActionProperty { get; set; } = new ForceActionProperty() { ForcePoint = new Point2D(), SetInGravityCenter = false }; public IForceCombinationList GetCombinationList() { Check(); diff --git a/StructureHelperCommon/Models/Forces/Logics/GetFactorByFactoredCombinationProperty.cs b/StructureHelperCommon/Models/Forces/Logics/GetFactorByFactoredCombinationProperty.cs index 06d4e61..c6b3d84 100644 --- a/StructureHelperCommon/Models/Forces/Logics/GetFactorByFactoredCombinationProperty.cs +++ b/StructureHelperCommon/Models/Forces/Logics/GetFactorByFactoredCombinationProperty.cs @@ -5,6 +5,7 @@ namespace StructureHelperCommon.Models.Forces.Logics { + /// public class GetFactorByFactoredCombinationProperty : IGetLoadFactor { private const double defaultSLSfactor = 1d; @@ -13,7 +14,7 @@ namespace StructureHelperCommon.Models.Forces.Logics public IFactoredCombinationProperty CombinationProperty { get; set; } public LimitStates LimitState { get; set; } public CalcTerms CalcTerm { get; set; } - + /// public double GetFactor() { double stateFactor = CombinationProperty.LimitState is LimitStates.SLS ? defaultSLSfactor : (1d / CombinationProperty.ULSFactor); diff --git a/StructureHelperCommon/Models/Forces/Logics/GetForceTupleByFactoredTupleLogic.cs b/StructureHelperCommon/Models/Forces/Logics/GetForceTupleByFactoredTupleLogic.cs new file mode 100644 index 0000000..689e614 --- /dev/null +++ b/StructureHelperCommon/Models/Forces/Logics/GetForceTupleByFactoredTupleLogic.cs @@ -0,0 +1,42 @@ +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Models.Calculators; +using StructureHelperCommon.Services.Forces; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Forces.Logics +{ + public class GetForceTupleByFactoredTupleLogic : IGetForceTupleByFactoredTupleLogic + { + private IGetLoadFactor getFactorLogic; + + public GetForceTupleByFactoredTupleLogic(IGetLoadFactor getFactorLogic) + { + this.getFactorLogic = getFactorLogic; + } + + public GetForceTupleByFactoredTupleLogic() + { + + } + + public IFactoredForceTuple FactoredForceTuple { get; set; } + public LimitStates LimitState { get; set; } + public CalcTerms CalcTerm { get; set; } + + public IForceTuple GetForceTuple() + { + getFactorLogic ??= new GetFactorByFactoredCombinationProperty() + { + CombinationProperty = FactoredForceTuple.CombinationProperty, + LimitState = LimitState, + CalcTerm = CalcTerm + }; + double factor = getFactorLogic.GetFactor(); + return ForceTupleService.MultiplyTupleByFactor(FactoredForceTuple.ForceTuple, factor); + } + } +} diff --git a/StructureHelperCommon/Models/Forces/Logics/IGetCombinationByFactoredTupleLogic.cs b/StructureHelperCommon/Models/Forces/Logics/IGetCombinationsByFactoredTupleLogic.cs similarity index 69% rename from StructureHelperCommon/Models/Forces/Logics/IGetCombinationByFactoredTupleLogic.cs rename to StructureHelperCommon/Models/Forces/Logics/IGetCombinationsByFactoredTupleLogic.cs index b007fe5..62d1623 100644 --- a/StructureHelperCommon/Models/Forces/Logics/IGetCombinationByFactoredTupleLogic.cs +++ b/StructureHelperCommon/Models/Forces/Logics/IGetCombinationsByFactoredTupleLogic.cs @@ -1,16 +1,18 @@ namespace StructureHelperCommon.Models.Forces.Logics { /// - /// Return combinations for source combination and properties + /// Returns combinations for source combination and properties /// - public interface IGetCombinationByFactoredTupleLogic - { - /// + public interface IGetCombinationsByFactoredTupleLogic + { /// /// Source combination of forces /// IForceTuple? SourceForceTuple { get; set; } - /// + /// + /// Properties of combination for source combination of force + /// IFactoredCombinationProperty? CombinationProperty { get; set; } + /// IForceActionProperty? ForceActionProperty { get; set; } /// diff --git a/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleByFactoredTupleLogic.cs b/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleByFactoredTupleLogic.cs new file mode 100644 index 0000000..bf40bfc --- /dev/null +++ b/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleByFactoredTupleLogic.cs @@ -0,0 +1,11 @@ +using StructureHelperCommon.Infrastructures.Enums; + +namespace StructureHelperCommon.Models.Forces.Logics +{ + public interface IGetForceTupleByFactoredTupleLogic : IGetForceTupleLogic + { + IFactoredForceTuple FactoredForceTuple { get; set; } + LimitStates LimitState { get; set; } + CalcTerms CalcTerm { get; set; } + } +} \ No newline at end of file diff --git a/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleLogic.cs b/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleLogic.cs new file mode 100644 index 0000000..2ec82c4 --- /dev/null +++ b/StructureHelperCommon/Models/Forces/Logics/IGetForceTupleLogic.cs @@ -0,0 +1,18 @@ +using StructureHelperCommon.Infrastructures.Enums; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace StructureHelperCommon.Models.Forces.Logics +{ + public interface IGetForceTupleLogic + { + /// + /// Calculates force tuple + /// + /// + IForceTuple GetForceTuple(); + } +} diff --git a/StructureHelperCommon/Models/Forces/Logics/IGetLoadFactor.cs b/StructureHelperCommon/Models/Forces/Logics/IGetLoadFactor.cs index 3b776b3..f0113ff 100644 --- a/StructureHelperCommon/Models/Forces/Logics/IGetLoadFactor.cs +++ b/StructureHelperCommon/Models/Forces/Logics/IGetLoadFactor.cs @@ -8,6 +8,10 @@ namespace StructureHelperCommon.Models.Forces /// public interface IGetLoadFactor { + /// + /// Returns factor for load + /// + /// Factor for load double GetFactor(); } } diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearCalculator.cs b/StructureHelperLogics/Models/BeamShears/BeamShearCalculator.cs index fb6566b..0033407 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShearCalculator.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShearCalculator.cs @@ -35,7 +35,7 @@ namespace StructureHelperLogics.Models.BeamShears public void Run() { PrepareNewResult(); - PrepareInputData(); + //PrepareInputData(); try { InitializeStrategies(); diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearCalculatorLogic.cs b/StructureHelperLogics/Models/BeamShears/BeamShearCalculatorLogic.cs index 0376425..66185fd 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShearCalculatorLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShearCalculatorLogic.cs @@ -1,5 +1,7 @@ -using StructureHelperCommon.Infrastructures.Interfaces; +using StructureHelperCommon.Infrastructures.Enums; +using StructureHelperCommon.Infrastructures.Interfaces; using StructureHelperCommon.Models; +using StructureHelperCommon.Models.Forces; using System; using System.Collections.Generic; using System.Linq; @@ -10,9 +12,13 @@ namespace StructureHelperLogics.Models.BeamShears { public class BeamShearCalculatorLogic : IGetResultByInputDataLogic { + private const LimitStates CollapsLimitState = LimitStates.ULS; private IBeamShearCalculatorResult result; private IBeamShearSectionLogic beamShearSectionLogic; private List sectionInputDatas; + private IBeamShearCalculatorInputData inputData; + private List calcTerms = new() { CalcTerms.LongTerm, CalcTerms.ShortTerm }; + public IShiftTraceLogger? TraceLogger { get; set; } public BeamShearCalculatorLogic(IShiftTraceLogger? traceLogger) @@ -23,11 +29,12 @@ namespace StructureHelperLogics.Models.BeamShears public IBeamShearCalculatorResult GetResultByInputData(IBeamShearCalculatorInputData inputData) { + this.inputData = inputData; PrepareNewResult(); InitializeStrategies(); try { - GetSectionInputDatas(inputData); + GetSectionInputDatas(); CalculateResult(); } catch (Exception ex) @@ -64,25 +71,53 @@ namespace StructureHelperLogics.Models.BeamShears }; } - private void GetSectionInputDatas(IBeamShearCalculatorInputData inputData) + private void GetSectionInputDatas() { - //sectionInputDatas = new(); - //foreach (var beamShearSection in inputData.Sections) - //{ - // foreach (var stirrup in inputData.Stirrups) - // { - // foreach (var beamShearAction in inputData.Actions) - // { - // BeamShearSectionLogicInputData newInputData = new(Guid.NewGuid()) - // { - // BeamShearSection = beamShearSection, - // Stirrup = stirrup, - // BeamShearAction = beamShearAction - // }; - // sectionInputDatas.Add(newInputData); - // } - // } - //} + sectionInputDatas = new(); + foreach (var beamShearSection in inputData.Sections) + { + List inclinedSections = GetInclinedSections(beamShearSection); + foreach (var inclinedSection in inclinedSections) + { + GetSections(inclinedSection); + } + } + } + + private void GetSections(IInclinedSection inclinedSection) + { + foreach (var stirrup in inputData.Stirrups) + { + foreach (var beamShearAction in inputData.Actions) + { + foreach (var calcTerm in calcTerms) + { + IForceTuple forceTuple = GetForceTupleByShearAction(beamShearAction, inclinedSection, CollapsLimitState, calcTerm); + BeamShearSectionLogicInputData newInputData = new(Guid.NewGuid()) + { + InclinedSection = inclinedSection, + Stirrup = stirrup, + ForceTuple = forceTuple, + LimitState = CollapsLimitState, + CalcTerm = calcTerm + }; + sectionInputDatas.Add(newInputData); + } + } + } + } + + private List GetInclinedSections(IBeamShearSection beamShearSection) + { + IGetInclinedSectionListInputData inclinedSectionInputDataLogic = new GetInclinedSectionListInputData(beamShearSection); + IGetInclinedSectionListLogic getInclinedSectionListLogic = new GetInclinedSectionListLogic(inclinedSectionInputDataLogic, TraceLogger); + return getInclinedSectionListLogic.GetInclinedSections(); + } + + private IForceTuple GetForceTupleByShearAction(IBeamShearAction beamShearAction, IInclinedSection inclinedSection, LimitStates limitState, CalcTerms calcTerm) + { + IGetDirectShearForceLogic getDirectShearForceLogic = new GetDirectShearForceLogic(beamShearAction, inclinedSection, limitState, calcTerm, TraceLogger); + return getDirectShearForceLogic.CalculateShearForceTuple(); } } } diff --git a/StructureHelperLogics/Models/BeamShears/BeamShearSectionLogicInputData.cs b/StructureHelperLogics/Models/BeamShears/BeamShearSectionLogicInputData.cs index 35738ee..f871658 100644 --- a/StructureHelperLogics/Models/BeamShears/BeamShearSectionLogicInputData.cs +++ b/StructureHelperLogics/Models/BeamShears/BeamShearSectionLogicInputData.cs @@ -10,7 +10,9 @@ namespace StructureHelperLogics.Models.BeamShears public class BeamShearSectionLogicInputData : IBeamShearSectionLogicInputData { /// - public IBeamShearSection BeamShearSection { get; set; } + public Guid Id { get; } + /// + public IInclinedSection InclinedSection { get; set; } /// public IStirrup Stirrup { get; set; } /// @@ -20,5 +22,10 @@ namespace StructureHelperLogics.Models.BeamShears /// public IForceTuple ForceTuple { get; set; } + public BeamShearSectionLogicInputData(Guid id) + { + Id = id; + } + } } diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShearSection.cs b/StructureHelperLogics/Models/BeamShears/IBeamShearSection.cs index 2e7725d..70dd918 100644 --- a/StructureHelperLogics/Models/BeamShears/IBeamShearSection.cs +++ b/StructureHelperLogics/Models/BeamShears/IBeamShearSection.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace StructureHelperLogics.Models.BeamShears { /// - /// Properties of concrete cross-section for shear strength of beam + /// Properties of RC cross-section for shear strength of beam /// public interface IBeamShearSection : ISaveable, ICloneable { diff --git a/StructureHelperLogics/Models/BeamShears/IBeamShearSectionLogicInputData.cs b/StructureHelperLogics/Models/BeamShears/IBeamShearSectionLogicInputData.cs index 981e7d5..cfc7a66 100644 --- a/StructureHelperLogics/Models/BeamShears/IBeamShearSectionLogicInputData.cs +++ b/StructureHelperLogics/Models/BeamShears/IBeamShearSectionLogicInputData.cs @@ -11,12 +11,27 @@ namespace StructureHelperLogics.Models.BeamShears /// /// Implements input data for calculating bearing capacity of cross-section of RC member for shear /// - public interface IBeamShearSectionLogicInputData : IInputData + public interface IBeamShearSectionLogicInputData : IInputData, ISaveable { - IBeamShearSection BeamShearSection { get; set; } + /// + /// Properties of RC cross-section + /// + IInclinedSection InclinedSection { get; set; } + /// + /// Properties of stirrups in cross-section + /// IStirrup Stirrup { get; set; } + /// + /// Limit state for calculating + /// LimitStates LimitState { get; set; } + /// + /// Term (Duration) for calculation + /// CalcTerms CalcTerm { get; set; } + /// + /// Force tuple for calculation + /// IForceTuple ForceTuple { get; set; } } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearCalculatorToLogicInputDataConvertStrategy.cs b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearCalculatorToLogicInputDataConvertStrategy.cs index db23855..123a7fb 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/BeamShearCalculatorToLogicInputDataConvertStrategy.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/BeamShearCalculatorToLogicInputDataConvertStrategy.cs @@ -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, diff --git a/StructureHelperLogics/Models/BeamShears/Logics/GetDirectShearForceLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/GetDirectShearForceLogic.cs index 9f7b2d4..68f7ea2 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/GetDirectShearForceLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/GetDirectShearForceLogic.cs @@ -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 /// 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; } /// - 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); } + } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListInputData.cs b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListInputData.cs index 529a56b..8d6ece5 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListInputData.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListInputData.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; namespace StructureHelperLogics.Models.BeamShears { + /// public class GetInclinedSectionListInputData : IGetInclinedSectionListInputData { public int StepCount { get; set; } = 50; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs index 63dbbe5..6319eba 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionListLogic.cs @@ -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; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionLogic.cs index c6f6ca9..cf1ad34 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/GetInclinedSectionLogic.cs @@ -4,6 +4,7 @@ using StructureHelperCommon.Models.Shapes; namespace StructureHelperLogics.Models.BeamShears { + /// public class GetInclinedSectionLogic : IGetInclinedSectionLogic { private readonly IBeamShearSection beamShearSection; diff --git a/StructureHelperLogics/Models/BeamShears/Logics/IGetDirectShearForceLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/IGetDirectShearForceLogic.cs index 23e8e3e..cd7473f 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/IGetDirectShearForceLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/IGetDirectShearForceLogic.cs @@ -12,6 +12,6 @@ namespace StructureHelperLogics.Models.BeamShears /// Returns value of shear force at the end of inclined section /// /// Value of shear force at the end of inclined section - IForceTuple CalculateShearForce(); + IForceTuple CalculateShearForceTuple(); } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/IGetInclinedSectionBySectionLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/IGetInclinedSectionBySectionLogic.cs index b8ab143..6bf0512 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/IGetInclinedSectionBySectionLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/IGetInclinedSectionBySectionLogic.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace StructureHelperLogics.Models.BeamShears { /// - /// Implement logic for obtaining of inclined section + /// Implements logic for obtaining of inclined section /// public interface IGetInclinedSectionLogic : ILogic { diff --git a/StructureHelperLogics/Models/BeamShears/Logics/ShearForceLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/ShearForceLogic.cs index 515ec67..9e6275b 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/ShearForceLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/ShearForceLogic.cs @@ -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); } } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/SumConcentratedForceLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/SumConcentratedForceLogic.cs index 79c8b43..a17e8c5 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/SumConcentratedForceLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/SumConcentratedForceLogic.cs @@ -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 { diff --git a/StructureHelperLogics/Models/BeamShears/Logics/SumDistributedLoadLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/SumDistributedLoadLogic.cs index 1dda1a0..9a148cf 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/SumDistributedLoadLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/SumDistributedLoadLogic.cs @@ -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; } } diff --git a/StructureHelperLogics/Models/BeamShears/Logics/SumForceByShearLoadLogic.cs b/StructureHelperLogics/Models/BeamShears/Logics/SumForceByShearLoadLogic.cs index ebe3c38..0a5dda9 100644 --- a/StructureHelperLogics/Models/BeamShears/Logics/SumForceByShearLoadLogic.cs +++ b/StructureHelperLogics/Models/BeamShears/Logics/SumForceByShearLoadLogic.cs @@ -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; } diff --git a/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs b/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs index 2ae2c26..e4530c4 100644 --- a/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs +++ b/StructureHelperTests/UnitTests/BeamShearTests/GetDirectShearForceLogicTests.cs @@ -43,7 +43,7 @@ namespace StructureHelperTests.UnitTests.BeamShearTests // Arrange // Act - double result = _logic.CalculateShearForce().Qy; + double result = _logic.CalculateShearForceTuple().Qy; // Assert Assert.That(result, Is.EqualTo(150.0)); diff --git a/StructureHelperTests/UnitTests/BeamShearTests/GetShearForceLogicTests.cs b/StructureHelperTests/UnitTests/BeamShearTests/GetShearForceLogicTests.cs index 6bc2a36..e32bfb6 100644 --- a/StructureHelperTests/UnitTests/BeamShearTests/GetShearForceLogicTests.cs +++ b/StructureHelperTests/UnitTests/BeamShearTests/GetShearForceLogicTests.cs @@ -35,7 +35,7 @@ namespace StructureHelperTests.UnitTests.BeamShearTests { // Arrange _mockGetFactorLogic.Setup(f => f.GetFactor()).Returns(1.5); - _mockGetDirectShearForceLogic.Setup(d => d.CalculateShearForce()).Returns(new ForceTuple() { Qy = 100.0 }); + _mockGetDirectShearForceLogic.Setup(d => d.CalculateShearForceTuple()).Returns(new ForceTuple() { Qy = 100.0 }); // Act double result = _logic.GetShearForce().Qy;