View of tuple crack result was changed

This commit is contained in:
Evgeny Redikultsev
2024-05-26 14:05:02 +05:00
parent d13304fe06
commit 0913ca85b7
13 changed files with 92 additions and 23 deletions

View File

@@ -34,6 +34,20 @@ namespace StructureHelper.Services.ResultViewers
UnitName = unitLength.Name UnitName = unitLength.Name
}, },
new() 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", Name = "Long rebar stress",
ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.RebarStress, ResultFunction = (RebarCrackResult rebar) => rebar.LongTermResult.RebarStressResult.RebarStress,

View File

@@ -57,7 +57,7 @@ namespace StructureHelper.Services.ResultViewers
{ {
List<ForceResultFunc> resultFuncs = new (); List<ForceResultFunc> resultFuncs = new ();
resultFuncs.Add(new ForceResultFunc() { Name = "Section Strain", ResultFunction = stressLogic.GetSectionStrain }); 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 = "Prestrain", ResultFunction = stressLogic.GetPrestrain });
resultFuncs.Add(new ForceResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain }); resultFuncs.Add(new ForceResultFunc() { Name = "Elastic Strain", ResultFunction = stressLogic.GetElasticStrain });
resultFuncs.Add(new ForceResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain }); resultFuncs.Add(new ForceResultFunc() { Name = "Plastic Strain", ResultFunction = stressLogic.GetPlasticStrain });

View File

@@ -6,7 +6,7 @@
xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews" xmlns:local="clr-namespace:StructureHelper.Windows.CalculationWindows.CalculatorsViews"
d:DataContext="{d:DesignInstance local:TupleCrackResultViewModel}" d:DataContext="{d:DesignInstance local:TupleCrackResultViewModel}"
mc:Ignorable="d" 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">
<Window.Resources> <Window.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
@@ -51,6 +51,20 @@
</DataTemplate> </DataTemplate>
</DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> </DataGridTemplateColumn>
<DataGridTemplateColumn Header="Softening factor" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Text="{Binding LongTermResult.SofteningFactor, Converter={StaticResource PlainDouble}}" />
<TextBlock Grid.Row="1" Text="{Binding ShortTermResult.SofteningFactor, Converter={StaticResource PlainDouble}}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Rebar stress" Width="120"> <DataGridTemplateColumn Header="Rebar stress" Width="120">
<DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellTemplate>
<DataTemplate> <DataTemplate>

View File

@@ -27,6 +27,7 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews
public TupleCrackResult CrackResult => crackResult; public TupleCrackResult CrackResult => crackResult;
public List<RebarCrackResult> RebarResults => crackResult.RebarResults; public List<RebarCrackResult> RebarResults => crackResult.RebarResults;
public RebarCrackResult SelectedResult { get; set; } public RebarCrackResult SelectedResult { get; set; }
public string WindowName => "Result of calculation of cracks for action " + crackResult.InputData.TupleName;
public ICommand ShowIsoFieldCommand public ICommand ShowIsoFieldCommand
{ {
get get

View File

@@ -60,7 +60,7 @@ namespace StructureHelper.Windows.ViewModels.NdmCrossSections
private void AddCrackCalculator() private void AddCrackCalculator()
{ {
var inputData = new CrackInputData(); var inputData = new CrackInputData();
var calculator = new CrackCalculator(inputData) var calculator = new CrackCalculator(inputData, new CheckCrackCalculatorInputDataLogic(inputData))
{ {
Name = "New crack calculator", Name = "New crack calculator",
TraceLogger = new ShiftTraceLogger(), TraceLogger = new ShiftTraceLogger(),

View File

@@ -16,7 +16,9 @@ namespace StructureHelperLogics.Models.Templates.CrossSections
TraceLogger = new ShiftTraceLogger() TraceLogger = new ShiftTraceLogger()
}; };
calculators.Add(forceCalculator); 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", Name = "New Crack Calculator",
TraceLogger = new ShiftTraceLogger() TraceLogger = new ShiftTraceLogger()

View File

@@ -30,14 +30,17 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
public IResult Result => result; public IResult Result => result;
public IShiftTraceLogger? TraceLogger { get; set; } public IShiftTraceLogger? TraceLogger { get; set; }
public CrackCalculator(CrackInputData inputData) public CrackCalculator(CrackInputData inputData, ICheckInputDataLogic checkInputDataLogic)
{ {
InputData = inputData; InputData = inputData;
this.checkInputDataLogic = checkInputDataLogic;
} }
public object Clone() 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); updateStrategy.Update(newItem, this);
return newItem; return newItem;
} }
@@ -62,10 +65,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
private void CheckInputData() private void CheckInputData()
{ {
checkInputDataLogic = new CheckCrackCalculatorInputDataLogic(InputData) checkInputDataLogic.TraceLogger = TraceLogger?.GetSimilarTraceLogger(50);
{
TraceLogger = TraceLogger?.GetSimilarTraceLogger(50)
};
if (checkInputDataLogic.Check() == false) if (checkInputDataLogic.Check() == false)
{ {
result.IsValid = false; result.IsValid = false;

View File

@@ -20,10 +20,10 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
TraceLogger?.AddMessage(LoggerStrings.CalculatorType(this), TraceLogStatuses.Service); TraceLogger?.AddMessage(LoggerStrings.CalculatorType(this), TraceLogStatuses.Service);
TraceLogger?.AddMessage("Method of crack width calculation based on SP 63.13330.2018"); TraceLogger?.AddMessage("Method of crack width calculation based on SP 63.13330.2018");
CheckOptions(); CheckOptions();
TraceLogger?.AddMessage($"Term factor fi1= {inputData.TermFactor}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"Term factor fi1 = {inputData.TermFactor}", TraceLogStatuses.Service);
TraceLogger?.AddMessage($"Bond factor fi2= {inputData.BondFactor}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"Bond factor fi2 = {inputData.BondFactor}", TraceLogStatuses.Service);
TraceLogger?.AddMessage($"Stress state factor fi3= {inputData.StressStateFactor}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"Stress state factor fi3 = {inputData.StressStateFactor}", TraceLogStatuses.Service);
TraceLogger?.AddMessage($"PsiS factor PsiS= {inputData.PsiSFactor}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"PsiS factor PsiS = {inputData.PsiSFactor}", TraceLogStatuses.Service);
TraceLogger?.AddMessage($"Length between cracks Ls = {inputData.Length}", TraceLogStatuses.Service); TraceLogger?.AddMessage($"Length between cracks Ls = {inputData.Length}", TraceLogStatuses.Service);
//check if strain of concrete greater than strain of rebar //check if strain of concrete greater than strain of rebar
double rebarElongation = inputData.RebarStrain - inputData.ConcreteStrain; double rebarElongation = inputData.RebarStrain - inputData.ConcreteStrain;
@@ -49,26 +49,26 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
inputData = InputData as CrackWidthLogicInputDataSP63; inputData = InputData as CrackWidthLogicInputDataSP63;
if (inputData.Length <=0d) 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) 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) 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) 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) 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) if (errorString != string.Empty)
{ {

View File

@@ -47,7 +47,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
{ {
CrackWidth = acrc1, CrackWidth = acrc1,
UltimateCrackWidth = InputData.UserCrackInputData.UltimateLongCrackWidth, UltimateCrackWidth = InputData.UserCrackInputData.UltimateLongCrackWidth,
RebarStressResult = rebarStressResult RebarStressResult = rebarStressResult,
SofteningFactor = crackSofteningLogic.GetSofteningFactor()
}; };
TraceLogger?.AddMessage($"Long crack width acrc = acrc,1 = {acrc1}(m)"); TraceLogger?.AddMessage($"Long crack width acrc = acrc,1 = {acrc1}(m)");
TraceLogger?.AddMessage($"Ultimate long crack width acrc,ult = {longRebarResult.UltimateCrackWidth}(m)"); TraceLogger?.AddMessage($"Ultimate long crack width acrc,ult = {longRebarResult.UltimateCrackWidth}(m)");
@@ -69,7 +70,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
{ {
CrackWidth = acrcShort, CrackWidth = acrcShort,
UltimateCrackWidth = InputData.UserCrackInputData.UltimateShortCrackWidth, UltimateCrackWidth = InputData.UserCrackInputData.UltimateShortCrackWidth,
RebarStressResult = rebarStressResult RebarStressResult = rebarStressResult,
SofteningFactor = crackSofteningLogic.GetSofteningFactor()
}; };
TraceCrackResult(shortRebarResult); TraceCrackResult(shortRebarResult);
result.LongTermResult = longRebarResult; result.LongTermResult = longRebarResult;

View File

@@ -39,7 +39,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
.Sum(x => x.Area * x.StressScale); .Sum(x => x.Area * x.StressScale);
TraceLogger?.AddMessage($"Concrete area Ac = {concreteArea}"); TraceLogger?.AddMessage($"Concrete area Ac = {concreteArea}");
var concreteTensileArea = concreteCollection var concreteTensileArea = concreteCollection
.Where(x => stressLogic.GetTotalStrainWithPrestrain(StrainMatrix, x) > 0d) .Where(x => stressLogic.GetTotalStrain(StrainMatrix, x) > 0d)
.Sum(x => x.Area * x.StressScale); .Sum(x => x.Area * x.StressScale);
TraceLogger?.AddMessage($"Concrete tensile area Ac,t = {concreteTensileArea}"); TraceLogger?.AddMessage($"Concrete tensile area Ac,t = {concreteTensileArea}");

View File

@@ -8,7 +8,7 @@ using StructureHelperLogics.NdmCalculations.Cracking;
namespace StructureHelperTests.UnitTests.Ndms.Cracks 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, 0d, 0.3d, 0.00020999999999999998d)]
[TestCase(1.4d, 0.001d, 0.001d, 0.3d, 0d)] [TestCase(1.4d, 0.001d, 0.001d, 0.3d, 0d)]

View File

@@ -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<RebarNdm> 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);
}
}
}