Crack calculator was changed

This commit is contained in:
Evgeny Redikultsev
2024-05-19 17:38:54 +05:00
parent ed2846dc8c
commit 52c5d35dda
20 changed files with 273 additions and 53 deletions

View File

@@ -19,7 +19,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
const LimitStates limitState = LimitStates.SLS;
const CalcTerms longTerm = CalcTerms.LongTerm;
const CalcTerms shortTerm = CalcTerms.ShortTerm;
private const double maxSizeOfCrossSection = 1d;
private CrackResult result;
private IGetTupleInputDatasLogic datasLogic;
private CrackCalculatorUpdateStrategy updateStrategy = new();
@@ -67,6 +67,14 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
ShortTerm = shortTerm,
TraceLogger = TraceLogger?.GetSimilarTraceLogger(50)
};
var dx = InputData.Primitives.Max(x => x.GetValuePoints().Max(y => y.Point.X)) - InputData.Primitives.Min(x => x.GetValuePoints().Min(y => y.Point.X));
var dy = InputData.Primitives.Max(x => x.GetValuePoints().Max(y => y.Point.Y)) - InputData.Primitives.Min(x => x.GetValuePoints().Min(y => y.Point.Y));
if (dx > maxSizeOfCrossSection || dy > maxSizeOfCrossSection)
{
string message = $"At least one of size of cross-section is greater than ultimate size MaxSize = {maxSizeOfCrossSection}(m)";
result.Description += "Warning! " + message;
TraceLogger?.AddMessage(message, TraceLogStatuses.Warning);
}
var datas = datasLogic.GetTupleInputDatas();
foreach (var data in datas)
{

View File

@@ -5,6 +5,9 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Copyright (c) 2023 Redikultsev Evgeny, Ekaterinburg, Russia
//All rights reserved.
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class CrackResult : IResult

View File

@@ -0,0 +1,18 @@
using StructureHelperCommon.Models.Forces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class CrackWidthRebarTupleResult : ICrackWidthTupleResult
{
public double CrackWidth { get; set; }
public double UltimateCrackWidth { get; set; }
public bool IsCrackLessThanUltimate => CrackWidth <= UltimateCrackWidth;
public RebarStressResult RebarStressResult { get; set; }
public double SofteningFactor { get; set; }
}
}

View File

@@ -1,5 +1,4 @@
using StructureHelperCommon.Models.Forces;
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@@ -7,13 +6,10 @@ using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class CrackWidthTupleResult
public class CrackWidthTupleResult : ICrackWidthTupleResult
{
public IForceTuple? ForceTuple { get; set; }
public double CrackWidth { get; set; }
public double UltimateCrackWidth { get; set; }
public bool IsCrackLessThanUltimate => CrackWidth <= UltimateCrackWidth;
public RebarStressResult RebarStressResult { get; set; }
public double SofteningFactor { get; set; }
}
}

View File

@@ -24,6 +24,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
{
private const double longTermFactor = 1.4d;
private const double shortTermFactor = 1d;
private IStressStateFactorLogic stressStateFactorLogic;
private ICrackSofteningLogic softeningLogic;
public double RebarStrain { get; set; }
@@ -40,7 +41,11 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
public ICrackWidthLogicInputData GetCrackWidthLogicInputData()
{
stressStateFactorLogic = new StressStateFactorLogic()
{
ForceTuple = InputData.ForceTuple,
TraceLogger = TraceLogger?.GetSimilarTraceLogger(50)
};
CrackWidthLogicInputDataSP63 data = new();
if (CalcTerm == CalcTerms.LongTerm)
{
@@ -51,7 +56,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
data.TermFactor = shortTermFactor;
}
data.PsiSFactor = softeningLogic.GetSofteningFactor();
data.StressStateFactor = 1.0d;
data.StressStateFactor = stressStateFactorLogic.GetStressStateFactor();
data.BondFactor = 0.5d;
data.Length = InputData.Length;
data.ConcreteStrain = ConcreteStrain;

View File

@@ -0,0 +1,9 @@
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public interface ICrackWidthTupleResult
{
double CrackWidth { get; set; }
bool IsCrackLessThanUltimate { get; }
double UltimateCrackWidth { get; set; }
}
}

View File

@@ -0,0 +1,14 @@
using StructureHelperCommon.Infrastructures.Interfaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public interface IStressStateFactorLogic : ILogic
{
double GetStressStateFactor();
}
}

View File

@@ -40,10 +40,10 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
GetSofteningLogic(InputData.LongRebarData);
rebarStressResult = GetRebarStressResult(InputData.LongRebarData);
var dataAcrc1 = GetCrackWidthInputData(InputData.LongRebarData, CalcTerms.LongTerm);
var dataAcrc2 = GetCrackWidthInputData(InputData.LongRebarData, CalcTerms.ShortTerm);
var dataAcrc3 = GetCrackWidthInputData(InputData.LongRebarData, CalcTerms.ShortTerm);
crackWidthLogic.InputData = dataAcrc1;
var acrc1 = crackWidthLogic.GetCrackWidth();
var longRebarResult = new CrackWidthTupleResult()
var longRebarResult = new CrackWidthRebarTupleResult()
{
CrackWidth = acrc1,
UltimateCrackWidth = InputData.UserCrackInputData.UltimateLongCrackWidth,
@@ -56,16 +56,16 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
GetSofteningLogic(InputData.ShortRebarData);
rebarStressResult = GetRebarStressResult(InputData.ShortRebarData);
var dataAcrc3 = GetCrackWidthInputData(InputData.ShortRebarData, CalcTerms.ShortTerm);
var dataAcrc2 = GetCrackWidthInputData(InputData.ShortRebarData, CalcTerms.ShortTerm);
crackWidthLogic.InputData = dataAcrc2;
var acrc2 = crackWidthLogic.GetCrackWidth();
crackWidthLogic.InputData = dataAcrc3;
var acrc3 = crackWidthLogic.GetCrackWidth();
crackWidthLogic.InputData = dataAcrc2;
var acrc2 = crackWidthLogic.GetCrackWidth();
double acrcShort = acrc1 - acrc2 + acrc3;
TraceLogger?.AddMessage($"Short crack width acrc = acrc,1 - acrc,2 + acrc,3 = {acrc1} - {acrc2} + {acrc3} = {acrcShort}(m)");
var shortRebarResult = new CrackWidthTupleResult()
double acrcShort = acrc1 + acrc2 - acrc3;
TraceLogger?.AddMessage($"Short crack width acrc = acrc,1 + acrc,2 - acrc,3 = {acrc1} + {acrc2} - {acrc3} = {acrcShort}(m)");
var shortRebarResult = new CrackWidthRebarTupleResult()
{
CrackWidth = acrcShort,
UltimateCrackWidth = InputData.UserCrackInputData.UltimateShortCrackWidth,
@@ -83,7 +83,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
result.RebarPrimitive = InputData.RebarPrimitive;
}
private void TraceCrackResult(CrackWidthTupleResult rebarResult)
private void TraceCrackResult(CrackWidthRebarTupleResult rebarResult)
{
if (rebarResult.IsCrackLessThanUltimate == false)
{

View File

@@ -13,7 +13,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
public bool IsValid { get; set; }
public string Description { get; set; }
public RebarPrimitive RebarPrimitive { get; set; }
public CrackWidthTupleResult LongTermResult { get; set; }
public CrackWidthTupleResult ShortTermResult { get; set; }
public CrackWidthRebarTupleResult LongTermResult { get; set; }
public CrackWidthRebarTupleResult ShortTermResult { get; set; }
}
}

View File

@@ -1,20 +1,14 @@
using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Logics;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Models.Loggers;
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Calculators;
using StructureHelperCommon.Models.Forces;
using StructureHelperCommon.Services.Forces;
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LoaderCalculator.Logics;
using StructureHelperLogics.NdmCalculations.Primitives;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperLogics.NdmCalculations.Triangulations;
using StructureHelperCommon.Models.Calculators;
namespace StructureHelperLogics.NdmCalculations.Cracking
{

View File

@@ -0,0 +1,30 @@
using StructureHelperCommon.Models;
using StructureHelperCommon.Models.Forces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.NdmCalculations.Cracking
{
public class StressStateFactorLogic : IStressStateFactorLogic
{
public ForceTuple ForceTuple { get; set; }
public IShiftTraceLogger? TraceLogger { get; set; }
public double GetStressStateFactor()
{
if (ForceTuple.Nz > 0d)
{
TraceLogger.AddMessage($"Cross-section is tensioned since Nz = {ForceTuple.Nz}(N)");
return 1.2d;
}
else
{
TraceLogger.AddMessage($"Cross-section is bent or compressed since Nz = {ForceTuple.Nz}(N)");
return 1d;
}
}
}
}

View File

@@ -59,7 +59,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
result = new()
{
IsValid = true,
Description = string.Empty
Description = string.Empty,
InputData = InputData
};
}
@@ -96,6 +97,16 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
var rebarResult = calculator.Result as RebarCrackResult;
result.RebarResults.Add(rebarResult);
}
result.LongTermResult = new()
{
CrackWidth = result.RebarResults.Max(x => x.LongTermResult.CrackWidth),
UltimateCrackWidth = InputData.UserCrackInputData.UltimateLongCrackWidth
};
result.ShortTermResult = new()
{
CrackWidth = result.RebarResults.Max(x => x.ShortTermResult.CrackWidth),
UltimateCrackWidth = InputData.UserCrackInputData.UltimateShortCrackWidth
};
}
private RebarCrackCalculatorInputData GetRebarCalculatorInputData(RebarPrimitive rebar)

View File

@@ -12,12 +12,15 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
{
public bool IsValid { get; set; }
public string Description { get; set; }
public IForceTuple LongTermTuple { get; set; }
public IForceTuple ShortTermTuple { get; set; }
public TupleCrackInputData InputData { get; set; }
public bool IsCracked { get; set; }
public List<RebarCrackResult> RebarResults { get; private set; }
public double MaxLongTermCrackWidth => IsCracked? RebarResults.Select(x => x.LongTermResult.CrackWidth).Max() : 0d;
public double MaxShortTermCrackWidth => IsCracked? RebarResults.Select(x => x.ShortTermResult.CrackWidth).Max() : 0d;
public CrackWidthRebarTupleResult LongTermResult { get; set; }
public CrackWidthRebarTupleResult ShortTermResult { get; set; }
//public double MaxLongTermCrackWidth => RebarResults.Select(x => x.LongTermResult.CrackWidth).Max();
//public double MaxShortTermCrackWidth => RebarResults.Select(x => x.ShortTermResult.CrackWidth).Max();
//public bool IsLongCrackLessThanUltimate => MaxLongTermCrackWidth <= InputData.UserCrackInputData.UltimateLongCrackWidth;
//public bool IsShortCrackLessThanUltimate => MaxShortTermCrackWidth <= InputData.UserCrackInputData.UltimateShortCrackWidth;
public TupleCrackResult()
{