From 0913ca85b797d0c444cfca6bcd087ff78fe7fc09 Mon Sep 17 00:00:00 2001 From: Evgeny Redikultsev Date: Sun, 26 May 2024 14:05:02 +0500 Subject: [PATCH] View of tuple crack result was changed --- .../Libraries/LoaderCalculator.dll | Bin 88576 -> 88576 bytes .../ResultViewers/CrackResultFuncFactory.cs | 14 +++++++ .../ResultViewers/ForceResultFuncFactory.cs | 2 +- .../Cracks/TupleCrackResultView.xaml | 16 +++++++- .../Cracks/TupleCrackResultViewModel.cs | 1 + .../AnalysisViewModelLogic.cs | 2 +- .../CrossSections/CalculatorLogic.cs | 4 +- .../Cracking/CrackCalculator.cs | 12 +++--- .../Cracking/CrackWidthLogicSP63.cs | 18 ++++----- .../Cracking/RebarCrackCalculator.cs | 6 ++- .../Cracking/TensileConcreteAreaLogicSP63.cs | 2 +- ...ogicTest.cs => CrackWidthLogicSP63Test.cs} | 2 +- .../Cracks/EquivalentDiameterLogicTest.cs | 36 ++++++++++++++++++ 13 files changed, 92 insertions(+), 23 deletions(-) rename StructureHelperTests/UnitTests/Ndms/Cracks/{CrackWidthLogicTest.cs => CrackWidthLogicSP63Test.cs} (96%) create mode 100644 StructureHelperTests/UnitTests/Ndms/Cracks/EquivalentDiameterLogicTest.cs diff --git a/StructureHelper/Libraries/LoaderCalculator.dll b/StructureHelper/Libraries/LoaderCalculator.dll index 09353ee4d75505194a175b31bba85d68f24d0c9d..fd7ba77b6e79046c913cff9b4f40c6eee696c556 100644 GIT binary patch delta 13486 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 diff --git a/StructureHelper/Services/ResultViewers/CrackResultFuncFactory.cs b/StructureHelper/Services/ResultViewers/CrackResultFuncFactory.cs index 9b3fbab..47b4799 100644 --- a/StructureHelper/Services/ResultViewers/CrackResultFuncFactory.cs +++ b/StructureHelper/Services/ResultViewers/CrackResultFuncFactory.cs @@ -34,6 +34,20 @@ namespace StructureHelper.Services.ResultViewers UnitName = unitLength.Name }, new() + { + Name = "Long softening factor", + ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.SofteningFactor, + UnitFactor = unitLength.Multiplyer, + UnitName = unitLength.Name + }, + new() + { + Name = "Short softening factor", + ResultFunction = (RebarCrackResult rebar) => rebar.ShortTermResult.SofteningFactor, + UnitFactor = unitLength.Multiplyer, + UnitName = unitLength.Name + }, + new() { Name = "Long rebar stress", ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.RebarStress, diff --git a/StructureHelper/Services/ResultViewers/ForceResultFuncFactory.cs b/StructureHelper/Services/ResultViewers/ForceResultFuncFactory.cs index 3935460..b39eec5 100644 --- a/StructureHelper/Services/ResultViewers/ForceResultFuncFactory.cs +++ b/StructureHelper/Services/ResultViewers/ForceResultFuncFactory.cs @@ -57,7 +57,7 @@ namespace StructureHelper.Services.ResultViewers { List resultFuncs = new (); resultFuncs.Add(new ForceResultFunc() { Name = "Section Strain", ResultFunction = stressLogic.GetSectionStrain }); - resultFuncs.Add(new ForceResultFunc() { Name = "Total Strain", ResultFunction = stressLogic.GetTotalStrainWithPrestrain }); + resultFuncs.Add(new ForceResultFunc() { Name = "Total Strain", ResultFunction = stressLogic.GetTotalStrain }); resultFuncs.Add(new ForceResultFunc() { Name = "Prestrain", ResultFunction = stressLogic.GetPrestrain }); resultFuncs.Add(new ForceResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain }); resultFuncs.Add(new ForceResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain }); diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultView.xaml b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultView.xaml index bdcb244..529033a 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultView.xaml +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultView.xaml @@ -6,7 +6,7 @@ xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews" d:DataContext="{d:DesignInstance local:TupleCrackResultViewModel}" mc:Ignorable="d" - Title="TupleCrackResultView" Height="450" Width="800" MinHeight="300" MinWidth="500" MaxHeight="1000" MaxWidth="1200" WindowStartupLocation="CenterScreen"> + Title="{Binding WindowName}" Height="450" Width="1000" MinHeight="300" MinWidth="500" MaxHeight="1000" MaxWidth="1200" WindowStartupLocation="CenterScreen"> @@ -51,6 +51,20 @@ + + + + + + + + + + + + + + diff --git a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultViewModel.cs b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultViewModel.cs index cbb3f51..e2dbf3c 100644 --- a/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultViewModel.cs +++ b/StructureHelper/Windows/CalculationWindows/CalculatorsViews/Cracks/TupleCrackResultViewModel.cs @@ -27,6 +27,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews public TupleCrackResult CrackResult => crackResult; public List RebarResults => crackResult.RebarResults; public RebarCrackResult SelectedResult { get; set; } + public string WindowName => "Result of calculation of cracks for action " + crackResult.InputData.TupleName; public ICommand ShowIsoFieldCommand { get diff --git a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs index b4c206f..41e100a 100644 --- a/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs +++ b/StructureHelper/Windows/ViewModels/NdmCrossSections/AnalysisViewModelLogic.cs @@ -60,7 +60,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections private void AddCrackCalculator() { var inputData = new CrackInputData(); - var calculator = new CrackCalculator(inputData) + var calculator = new CrackCalculator(inputData, new CheckCrackCalculatorInputDataLogic(inputData)) { Name = "New crack calculator", TraceLogger = new ShiftTraceLogger(), diff --git a/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs b/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs index 01e25bb..7f5d3d6 100644 --- a/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs +++ b/StructureHelperLogics/Models/Templates/CrossSections/CalculatorLogic.cs @@ -16,7 +16,9 @@ namespace StructureHelperLogics.Models.Templates.CrossSections TraceLogger = new ShiftTraceLogger() }; calculators.Add(forceCalculator); - var crackCalculator = new CrackCalculator(new CrackInputData()) + CrackInputData newInputData = new CrackInputData(); + var checkLogic = new CheckCrackCalculatorInputDataLogic(newInputData); + var crackCalculator = new CrackCalculator(newInputData, checkLogic) { Name = "New Crack Calculator", TraceLogger = new ShiftTraceLogger() diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculator.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculator.cs index b1d416f..3ff8f64 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackCalculator.cs @@ -30,14 +30,17 @@ namespace StructureHelperLogics.NdmCalculations.Cracking public IResult Result => result; public IShiftTraceLogger? TraceLogger { get; set; } - public CrackCalculator(CrackInputData inputData) + public CrackCalculator(CrackInputData inputData, ICheckInputDataLogic checkInputDataLogic) { InputData = inputData; + this.checkInputDataLogic = checkInputDataLogic; } public object Clone() { - var newItem = new CrackCalculator(new CrackInputData()); + CrackInputData crackInputData = new CrackInputData(); + var checkDataLogic = new CheckCrackCalculatorInputDataLogic(InputData); + var newItem = new CrackCalculator(crackInputData, checkDataLogic); updateStrategy.Update(newItem, this); return newItem; } @@ -62,10 +65,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking private void CheckInputData() { - checkInputDataLogic = new CheckCrackCalculatorInputDataLogic(InputData) - { - TraceLogger = TraceLogger?.GetSimilarTraceLogger(50) - }; + checkInputDataLogic.TraceLogger = TraceLogger?.GetSimilarTraceLogger(50); if (checkInputDataLogic.Check() == false) { result.IsValid = false; diff --git a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs index 3e00cb6..8cf70a9 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/CrackWidthLogicSP63.cs @@ -20,10 +20,10 @@ namespace StructureHelperLogics.NdmCalculations.Cracking TraceLogger?.AddMessage(LoggerStrings.CalculatorType(this), TraceLogStatuses.Service); TraceLogger?.AddMessage("Method of crack width calculation based on SP 63.13330.2018"); CheckOptions(); - TraceLogger?.AddMessage($"Term factor fi1= {inputData.TermFactor}", TraceLogStatuses.Service); - TraceLogger?.AddMessage($"Bond factor fi2= {inputData.BondFactor}", TraceLogStatuses.Service); - TraceLogger?.AddMessage($"Stress state factor fi3= {inputData.StressStateFactor}", TraceLogStatuses.Service); - TraceLogger?.AddMessage($"PsiS factor PsiS= {inputData.PsiSFactor}", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"Term factor fi1 = {inputData.TermFactor}", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"Bond factor fi2 = {inputData.BondFactor}", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"Stress state factor fi3 = {inputData.StressStateFactor}", TraceLogStatuses.Service); + TraceLogger?.AddMessage($"PsiS factor PsiS = {inputData.PsiSFactor}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"Length between cracks Ls = {inputData.Length}", TraceLogStatuses.Service); //check if strain of concrete greater than strain of rebar double rebarElongation = inputData.RebarStrain - inputData.ConcreteStrain; @@ -49,26 +49,26 @@ namespace StructureHelperLogics.NdmCalculations.Cracking inputData = InputData as CrackWidthLogicInputDataSP63; if (inputData.Length <=0d) { - errorString = ErrorStrings.DataIsInCorrect + $": length between cracks Ls={inputData.Length} must be greate than zero"; + errorString = ErrorStrings.DataIsInCorrect + $": length between cracks Lcrc={inputData.Length} must be greater than zero"; } if (inputData.TermFactor <= 0d) { - errorString = ErrorStrings.DataIsInCorrect + $": Term factor fi1 {inputData.TermFactor} must be greate than zero"; + errorString = ErrorStrings.DataIsInCorrect + $": Term factor fi1 {inputData.TermFactor} must be greater than zero"; } if (inputData.BondFactor <= 0d) { - errorString = ErrorStrings.DataIsInCorrect + $": Bond factor fi2 {inputData.BondFactor} must be greate than zero"; + errorString = ErrorStrings.DataIsInCorrect + $": Bond factor fi2 {inputData.BondFactor} must be greater than zero"; } if (inputData.StressStateFactor <= 0d) { - errorString = ErrorStrings.DataIsInCorrect + $": Stress factor fi3 factor {inputData.StressStateFactor} must be greate than zero"; + errorString = ErrorStrings.DataIsInCorrect + $": Stress factor fi3 factor {inputData.StressStateFactor} must be greater than zero"; } if (inputData.PsiSFactor <= 0d) { - errorString = ErrorStrings.DataIsInCorrect + $": PsiS factor {inputData.PsiSFactor} must be greate than zero"; + errorString = ErrorStrings.DataIsInCorrect + $": PsiS factor {inputData.PsiSFactor} must be greater than zero"; } if (errorString != string.Empty) { diff --git a/StructureHelperLogics/NdmCalculations/Cracking/RebarCrackCalculator.cs b/StructureHelperLogics/NdmCalculations/Cracking/RebarCrackCalculator.cs index b69dc5f..b23aacc 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/RebarCrackCalculator.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/RebarCrackCalculator.cs @@ -47,7 +47,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { CrackWidth = acrc1, UltimateCrackWidth = InputData.UserCrackInputData.UltimateLongCrackWidth, - RebarStressResult = rebarStressResult + RebarStressResult = rebarStressResult, + SofteningFactor = crackSofteningLogic.GetSofteningFactor() }; TraceLogger?.AddMessage($"Long crack width acrc = acrc,1 = {acrc1}(m)"); TraceLogger?.AddMessage($"Ultimate long crack width acrc,ult = {longRebarResult.UltimateCrackWidth}(m)"); @@ -69,7 +70,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking { CrackWidth = acrcShort, UltimateCrackWidth = InputData.UserCrackInputData.UltimateShortCrackWidth, - RebarStressResult = rebarStressResult + RebarStressResult = rebarStressResult, + SofteningFactor = crackSofteningLogic.GetSofteningFactor() }; TraceCrackResult(shortRebarResult); result.LongTermResult = longRebarResult; diff --git a/StructureHelperLogics/NdmCalculations/Cracking/TensileConcreteAreaLogicSP63.cs b/StructureHelperLogics/NdmCalculations/Cracking/TensileConcreteAreaLogicSP63.cs index f5a6533..72996f3 100644 --- a/StructureHelperLogics/NdmCalculations/Cracking/TensileConcreteAreaLogicSP63.cs +++ b/StructureHelperLogics/NdmCalculations/Cracking/TensileConcreteAreaLogicSP63.cs @@ -39,7 +39,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking .Sum(x => x.Area * x.StressScale); TraceLogger?.AddMessage($"Concrete area Ac = {concreteArea}"); var concreteTensileArea = concreteCollection - .Where(x => stressLogic.GetTotalStrainWithPrestrain(StrainMatrix, x) > 0d) + .Where(x => stressLogic.GetTotalStrain(StrainMatrix, x) > 0d) .Sum(x => x.Area * x.StressScale); TraceLogger?.AddMessage($"Concrete tensile area Ac,t = {concreteTensileArea}"); diff --git a/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs b/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicSP63Test.cs similarity index 96% rename from StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs rename to StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicSP63Test.cs index 8aaec8c..4a52d15 100644 --- a/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicTest.cs +++ b/StructureHelperTests/UnitTests/Ndms/Cracks/CrackWidthLogicSP63Test.cs @@ -8,7 +8,7 @@ using StructureHelperLogics.NdmCalculations.Cracking; namespace StructureHelperTests.UnitTests.Ndms.Cracks { - public class CrackWidthLogicTest + public class CrackWidthLogicSP63Test { [TestCase(1.4d, 0.001d, 0d, 0.3d, 0.00020999999999999998d)] [TestCase(1.4d, 0.001d, 0.001d, 0.3d, 0d)] diff --git a/StructureHelperTests/UnitTests/Ndms/Cracks/EquivalentDiameterLogicTest.cs b/StructureHelperTests/UnitTests/Ndms/Cracks/EquivalentDiameterLogicTest.cs new file mode 100644 index 0000000..f710f8b --- /dev/null +++ b/StructureHelperTests/UnitTests/Ndms/Cracks/EquivalentDiameterLogicTest.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using LoaderCalculator.Data.Ndms; +using NUnit.Framework; +using StructureHelperLogics.NdmCalculations.Cracking; + +namespace StructureHelperTests.UnitTests.Ndms.Cracks +{ + public class EquivalentDiameterLogicTest + { + [TestCase(0.025d, 2, 0.025d, 2, 0.025d)] + [TestCase(0.032d, 2, 0.025d, 1, 0.029842055910607741d)] + [TestCase(0.032d, 1, 0.025d, 2, 0.027524820186583671d)] + public void Run_ShouldPass(double fstDiameter, int fstCount, double sndDiameter, int sndCount, double expectedDiameter) + { + //Arrange + List rebar = new(); + for (int i = 0; i < fstCount; i++) + { + rebar.Add(new RebarNdm() { Area = 0.785d * fstDiameter * fstDiameter }); + } + for (int i = 0; i < sndCount; i++) + { + rebar.Add(new RebarNdm() { Area = 0.785d * sndDiameter * sndDiameter }); + } + var logic = new EquivalentDiameterLogic() { Rebars = rebar }; + //Act + var eqDiametr = logic.GetAverageDiameter(); + //Assert + Assert.AreEqual(expectedDiameter, eqDiametr, 0.0001d); + } + } +}