Trace logging for sorce of cracking was added
This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
using StructureHelper.Windows.Errors;
|
using LoaderCalculator;
|
||||||
|
using StructureHelper.Windows.CalculationWindows.ProgressViews;
|
||||||
|
using StructureHelper.Windows.Errors;
|
||||||
using StructureHelper.Windows.Forces;
|
using StructureHelper.Windows.Forces;
|
||||||
using StructureHelper.Windows.ViewModels.Errors;
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
using StructureHelperCommon.Infrastructures.Settings;
|
using StructureHelperCommon.Infrastructures.Settings;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperLogics.NdmCalculations.Cracking;
|
using StructureHelperLogics.NdmCalculations.Cracking;
|
||||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
@@ -14,6 +17,8 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
{
|
{
|
||||||
internal class ShowCrackResultLogic
|
internal class ShowCrackResultLogic
|
||||||
{
|
{
|
||||||
|
private CrackForceCalculator calculator;
|
||||||
|
|
||||||
public static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
public static GeometryNames GeometryNames => ProgramSetting.GeometryNames;
|
||||||
public LimitStates LimitState { get; set; }
|
public LimitStates LimitState { get; set; }
|
||||||
public CalcTerms CalcTerm { get; set; }
|
public CalcTerms CalcTerm { get; set; }
|
||||||
@@ -33,7 +38,8 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
|
|
||||||
private void FindCrackFactor(IForceTuple finishDesignTuple, IForceTuple startDesignTuple)
|
private void FindCrackFactor(IForceTuple finishDesignTuple, IForceTuple startDesignTuple)
|
||||||
{
|
{
|
||||||
var calculator = new CrackForceCalculator();
|
calculator = new CrackForceCalculator();
|
||||||
|
calculator.TraceLogger = new ShiftTraceLogger();
|
||||||
calculator.StartTuple = startDesignTuple;
|
calculator.StartTuple = startDesignTuple;
|
||||||
calculator.EndTuple = finishDesignTuple;
|
calculator.EndTuple = finishDesignTuple;
|
||||||
calculator.NdmCollection = NdmPrimitivesService.GetNdms(ndmPrimitives, LimitState, CalcTerm);
|
calculator.NdmCollection = NdmPrimitivesService.GetNdms(ndmPrimitives, LimitState, CalcTerm);
|
||||||
@@ -41,7 +47,8 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
var result = (CrackForceResult)calculator.Result;
|
var result = (CrackForceResult)calculator.Result;
|
||||||
if (result.IsValid)
|
if (result.IsValid)
|
||||||
{
|
{
|
||||||
ShowResult(result);
|
ShowTraceResult();
|
||||||
|
//ShowResult(result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -80,5 +87,14 @@ namespace StructureHelper.Windows.CalculationWindows.CalculatorsViews.ForceCalcu
|
|||||||
MessageBoxButtons.OK,
|
MessageBoxButtons.OK,
|
||||||
MessageBoxIcon.Information);
|
MessageBoxIcon.Information);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ShowTraceResult()
|
||||||
|
{
|
||||||
|
if (calculator.TraceLogger is not null)
|
||||||
|
{
|
||||||
|
var wnd = new TraceDocumentView(calculator.TraceLogger.TraceLoggerEntries);
|
||||||
|
wnd.ShowDialog();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ using StructureHelper.Windows.Forces;
|
|||||||
using StructureHelper.Windows.PrimitivePropertiesWindow;
|
using StructureHelper.Windows.PrimitivePropertiesWindow;
|
||||||
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
|
using StructureHelper.Windows.ViewModels.Calculations.Calculators;
|
||||||
using StructureHelper.Windows.ViewModels.Errors;
|
using StructureHelper.Windows.ViewModels.Errors;
|
||||||
using StructureHelper.Windows.ViewModels.PrimitiveProperties;
|
|
||||||
using StructureHelperCommon.Infrastructures.Enums;
|
using StructureHelperCommon.Infrastructures.Enums;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
using StructureHelperCommon.Infrastructures.Interfaces;
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
@@ -22,7 +21,6 @@ using StructureHelperCommon.Models.Shapes;
|
|||||||
using StructureHelperCommon.Services.Forces;
|
using StructureHelperCommon.Services.Forces;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses;
|
using StructureHelperLogics.NdmCalculations.Analyses;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.LimitCurve;
|
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.Geometry;
|
using StructureHelperLogics.NdmCalculations.Analyses.Geometry;
|
||||||
using StructureHelperLogics.NdmCalculations.Primitives;
|
using StructureHelperLogics.NdmCalculations.Primitives;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace StructureHelper.Windows.CalculationWindows.ProgressViews
|
|||||||
{
|
{
|
||||||
public class TraceDocumentVM : ViewModelBase
|
public class TraceDocumentVM : ViewModelBase
|
||||||
{
|
{
|
||||||
const int tabFactor = 500;
|
const double tabFactor = 500d;
|
||||||
private readonly IEnumerable<ITraceLoggerEntry> loggerEntries;
|
private readonly IEnumerable<ITraceLoggerEntry> loggerEntries;
|
||||||
private IEnumerable<ITraceLoggerEntry> selectedLoggerEntries;
|
private IEnumerable<ITraceLoggerEntry> selectedLoggerEntries;
|
||||||
private FlowDocument document;
|
private FlowDocument document;
|
||||||
@@ -110,13 +110,13 @@ namespace StructureHelper.Windows.CalculationWindows.ProgressViews
|
|||||||
{
|
{
|
||||||
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(traceEntry));
|
throw new StructureHelperException(ErrorStrings.ObjectTypeIsUnknownObj(traceEntry));
|
||||||
}
|
}
|
||||||
|
block.Margin = new Thickness(traceEntry.Priority / tabFactor * tabGap, 7, 0, 7);
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Block GetBlockByStringEntry(StringLogEntry stringEntry)
|
private Block GetBlockByStringEntry(StringLogEntry stringEntry)
|
||||||
{
|
{
|
||||||
var paragraph = new Paragraph(new Run(stringEntry.Message));
|
var paragraph = new Paragraph(new Run(stringEntry.Message));
|
||||||
paragraph.Margin = new Thickness(stringEntry.Priority / tabFactor * tabGap, 7, 0, 7);
|
|
||||||
if (stringEntry.Priority <= LoggerService.GetPriorityByStatus(TraceLogStatuses.Fatal))
|
if (stringEntry.Priority <= LoggerService.GetPriorityByStatus(TraceLogStatuses.Fatal))
|
||||||
{
|
{
|
||||||
paragraph.FontSize = 14;
|
paragraph.FontSize = 14;
|
||||||
|
|||||||
@@ -101,7 +101,7 @@
|
|||||||
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding StepCount, ValidatesOnExceptions=True}" Visibility="{Binding StepCountVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
<TextBox Grid.Row="4" Grid.Column="1" Text="{Binding StepCount, ValidatesOnExceptions=True}" Visibility="{Binding StepCountVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||||
<uc:MultiplyDouble Grid.Column="4" Grid.Row="1" DoubleFactor="{Binding StartFactor}" ValueChanged="StartValueChanged"/>
|
<uc:MultiplyDouble Grid.Column="4" Grid.Row="1" DoubleFactor="{Binding StartFactor}" ValueChanged="StartValueChanged"/>
|
||||||
<uc:MultiplyDouble Grid.Column="4" Grid.Row="3" DoubleFactor="{Binding FinishFactor}" ValueChanged="FinishValueChanged"/>
|
<uc:MultiplyDouble Grid.Column="4" Grid.Row="3" DoubleFactor="{Binding FinishFactor}" ValueChanged="FinishValueChanged"/>
|
||||||
<uc:MultiplyDouble Grid.Column="4" Grid.Row="4" DoubleFactor="{Binding FinishFactor}" ValueChanged="StepCountValueChanged"/>
|
<uc:MultiplyDouble Grid.Column="4" Grid.Row="4" DoubleFactor="{Binding FinishFactor}" ValueChanged="StepCountValueChanged" Visibility="{Binding StepCountVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ namespace StructureHelperCommon.Models.Calculators
|
|||||||
double precision = Accuracy.IterationAccuracy;
|
double precision = Accuracy.IterationAccuracy;
|
||||||
int maxIterationCount = Accuracy.MaxIterationCount;
|
int maxIterationCount = Accuracy.MaxIterationCount;
|
||||||
double current = start;
|
double current = start;
|
||||||
double step = (end - start) / 2;
|
double step = (end - start) / 2d;
|
||||||
int iterationNum = 0;
|
int iterationNum = 0;
|
||||||
while (step > precision)
|
while (step > precision)
|
||||||
{
|
{
|
||||||
@@ -73,8 +73,8 @@ namespace StructureHelperCommon.Models.Calculators
|
|||||||
TraceLogger?.AddMessage($"Predicate value in {current} is false", TraceLogStatuses.Debug, 50);
|
TraceLogger?.AddMessage($"Predicate value in {current} is false", TraceLogStatuses.Debug, 50);
|
||||||
start = current;
|
start = current;
|
||||||
}
|
}
|
||||||
TraceLogger?.AddMessage($"New current value Cur=({start}+{end})/2={current}", TraceLogStatuses.Debug);
|
|
||||||
current = (start + end) / 2d;
|
current = (start + end) / 2d;
|
||||||
|
TraceLogger?.AddMessage($"New current value Cur=({start}+{end})/2={current}", TraceLogStatuses.Debug);
|
||||||
step = (end - start) / 2d;
|
step = (end - start) / 2d;
|
||||||
TraceLogger?.AddMessage($"New step S={current}", TraceLogStatuses.Debug, 50);
|
TraceLogger?.AddMessage($"New step S={current}", TraceLogStatuses.Debug, 50);
|
||||||
iterationNum++;
|
iterationNum++;
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace StructureHelperCommon.Models
|
|||||||
{
|
{
|
||||||
var table = new TableLogEntry(6);
|
var table = new TableLogEntry(6);
|
||||||
table.Priority = Priority;
|
table.Priority = Priority;
|
||||||
table.Table.AddRow(GetForceTupleHeaderRow());
|
table.Table.AddRow(GetForceTupleHeaderRow(forceTuple));
|
||||||
table.Table.AddRow(GetForceTupleRow(forceTuple));
|
table.Table.AddRow(GetForceTupleRow(forceTuple));
|
||||||
return table;
|
return table;
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ namespace StructureHelperCommon.Models
|
|||||||
{
|
{
|
||||||
var table = new TableLogEntry(6);
|
var table = new TableLogEntry(6);
|
||||||
table.Priority = Priority;
|
table.Priority = Priority;
|
||||||
table.Table.AddRow(GetForceTupleHeaderRow());
|
table.Table.AddRow(GetForceTupleHeaderRow(new ForceTuple()));
|
||||||
foreach (var forceTuple in forceTuples)
|
foreach (var forceTuple in forceTuples)
|
||||||
{
|
{
|
||||||
table.Table.AddRow(GetForceTupleRow(forceTuple));
|
table.Table.AddRow(GetForceTupleRow(forceTuple));
|
||||||
@@ -81,43 +81,54 @@ namespace StructureHelperCommon.Models
|
|||||||
{
|
{
|
||||||
Priority = LoggerService.GetPriorityByStatus(status);
|
Priority = LoggerService.GetPriorityByStatus(status);
|
||||||
}
|
}
|
||||||
private ShTableRow<ITraceLoggerEntry> GetForceTupleHeaderRow()
|
private ShTableRow<ITraceLoggerEntry> GetForceTupleHeaderRow(IForceTuple forceTuple)
|
||||||
{
|
{
|
||||||
|
const CellRole cellRole = CellRole.Header;
|
||||||
|
string[] ColumnList = new string[] { "Mx", "My", "Nz", "Qx", "Qy", "Mz" };
|
||||||
|
if (forceTuple is StrainTuple)
|
||||||
|
{
|
||||||
|
ColumnList = new string[] { "Kx", "Ky", "EpsZ", "GammaX", "GammaY", "Kz" };
|
||||||
|
}
|
||||||
|
|
||||||
var forceTupleRow = new ShTableRow<ITraceLoggerEntry>(6);
|
var forceTupleRow = new ShTableRow<ITraceLoggerEntry>(6);
|
||||||
|
foreach (var item in forceTupleRow.Elements)
|
||||||
|
{
|
||||||
|
item.Role = cellRole;
|
||||||
|
}
|
||||||
|
|
||||||
forceTupleRow.Elements[0].Value = new StringLogEntry()
|
forceTupleRow.Elements[0].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "Mx",
|
Message = ColumnList[0],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
forceTupleRow.Elements[1].Value = new StringLogEntry()
|
forceTupleRow.Elements[1].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "My",
|
Message = ColumnList[1],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
forceTupleRow.Elements[2].Value = new StringLogEntry()
|
forceTupleRow.Elements[2].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "Nz",
|
Message = ColumnList[2],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
forceTupleRow.Elements[3].Value = new StringLogEntry()
|
forceTupleRow.Elements[3].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "Qx",
|
Message = ColumnList[3],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
forceTupleRow.Elements[4].Value = new StringLogEntry()
|
forceTupleRow.Elements[4].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "Qy",
|
Message = ColumnList[4],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
forceTupleRow.Elements[5].Value = new StringLogEntry()
|
forceTupleRow.Elements[5].Value = new StringLogEntry()
|
||||||
{
|
{
|
||||||
Message = "Mz",
|
Message = ColumnList[5],
|
||||||
Priority = Priority
|
Priority = Priority
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ namespace StructureHelperCommon.Models
|
|||||||
{
|
{
|
||||||
var newLogger = new ShiftTraceLogger(Logger)
|
var newLogger = new ShiftTraceLogger(Logger)
|
||||||
{
|
{
|
||||||
ShiftPriority = shiftPriority
|
ShiftPriority = ShiftPriority + shiftPriority
|
||||||
};
|
};
|
||||||
return newLogger;
|
return newLogger;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
|||||||
public IResult Result { get; private set; }
|
public IResult Result { get; private set; }
|
||||||
|
|
||||||
public Action<IResult> ActionToOutputResults { get; set; }
|
public Action<IResult> ActionToOutputResults { get; set; }
|
||||||
public IShiftTraceLogger? TraceLogger { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public ForceTupleCalculator(IForceTupleInputData inputData)
|
public ForceTupleCalculator(IForceTupleInputData inputData)
|
||||||
{
|
{
|
||||||
@@ -31,14 +31,24 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
|||||||
|
|
||||||
private IForcesTupleResult CalculateResult()
|
private IForcesTupleResult CalculateResult()
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Calculator type: {GetType()}", TraceLogStatuses.Service);
|
||||||
|
TraceLogger?.AddMessage($"Calculator logic based on calculating strain in plain section by elementary parts of finished size");
|
||||||
var ndmCollection = InputData.NdmCollection;
|
var ndmCollection = InputData.NdmCollection;
|
||||||
|
TraceLogger?.AddMessage($"Collection of elementary parts contains {ndmCollection.Count()} parts");
|
||||||
|
TraceLogger?.AddMessage($"Summary area of elementary part collection = {ndmCollection.Sum(x => x.Area * x.StressScale)}", TraceLogStatuses.Service);
|
||||||
|
TraceLogger?.AddMessage($"Minimum x = {ndmCollection.Min(x => x.CenterX)}", TraceLogStatuses.Debug);
|
||||||
|
TraceLogger?.AddMessage($"Maximum x = {ndmCollection.Max(x => x.CenterX)}", TraceLogStatuses.Debug);
|
||||||
|
TraceLogger?.AddMessage($"Minimum y = {ndmCollection.Min(x => x.CenterY)}", TraceLogStatuses.Debug);
|
||||||
|
TraceLogger?.AddMessage($"Maximum y = {ndmCollection.Max(x => x.CenterY)}", TraceLogStatuses.Debug);
|
||||||
var tuple = InputData.Tuple;
|
var tuple = InputData.Tuple;
|
||||||
var accuracy = InputData.Accuracy;
|
var accuracy = InputData.Accuracy;
|
||||||
|
TraceLogger?.AddMessage($"Input force combination");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(tuple));
|
||||||
var mx = tuple.Mx;
|
var mx = tuple.Mx;
|
||||||
var my = tuple.My;
|
var my = tuple.My;
|
||||||
var nz = tuple.Nz;
|
var nz = tuple.Nz;
|
||||||
|
TraceLogger?.AddMessage($"Required accuracy rate {accuracy.IterationAccuracy}");
|
||||||
|
TraceLogger?.AddMessage($"Maximum iteration count {accuracy.MaxIterationCount}");
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var loaderData = new LoaderOptions
|
var loaderData = new LoaderOptions
|
||||||
@@ -53,23 +63,45 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
|||||||
NdmCollection = ndmCollection
|
NdmCollection = ndmCollection
|
||||||
};
|
};
|
||||||
var calculator = new Calculator();
|
var calculator = new Calculator();
|
||||||
|
TraceLogger?.AddMessage($"Calculation is started", TraceLogStatuses.Debug);
|
||||||
calculator.Run(loaderData, new CancellationToken());
|
calculator.Run(loaderData, new CancellationToken());
|
||||||
|
TraceLogger?.AddMessage($"Calculation result is obtained", TraceLogStatuses.Debug);
|
||||||
var calcResult = calculator.Result;
|
var calcResult = calculator.Result;
|
||||||
if (calcResult.AccuracyRate <= accuracy.IterationAccuracy)
|
if (calcResult.AccuracyRate <= accuracy.IterationAccuracy)
|
||||||
{
|
{
|
||||||
return new ForcesTupleResult() { IsValid = true, Description = "Analysis is done succsefully", LoaderResults = calcResult };
|
TraceLogger?.AddMessage($"Analisis is done succsesfully");
|
||||||
|
TraceLogger?.AddMessage($"Current accuracy {calcResult.AccuracyRate}, {calcResult.IterationCounter} iteration has done", TraceLogStatuses.Debug);
|
||||||
|
return new ForcesTupleResult()
|
||||||
|
{
|
||||||
|
IsValid = true,
|
||||||
|
Description = "Analysis is done succsefully",
|
||||||
|
LoaderResults = calcResult
|
||||||
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Required accuracy rate has not achived", TraceLogStatuses.Error);
|
||||||
|
TraceLogger?.AddMessage($"Current accuracy {calcResult.AccuracyRate}, {calcResult.IterationCounter} iteration has done", TraceLogStatuses.Warning);
|
||||||
return new ForcesTupleResult() { IsValid = false, Description = "Required accuracy rate has not achived", LoaderResults = calcResult };
|
return new ForcesTupleResult() { IsValid = false, Description = "Required accuracy rate has not achived", LoaderResults = calcResult };
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
var result = new ForcesTupleResult() { IsValid = false };
|
TraceLogger?.AddMessage($"Critical error ocured during calculation\n{ex}", TraceLogStatuses.Error);
|
||||||
if (ex.Message == "Calculation result is not valid: stiffness matrix is equal to zero") { result.Description = "Stiffness matrix is equal to zero \nProbably section was collapsed"; }
|
var result = new ForcesTupleResult()
|
||||||
else { result.Description = $"Error is appeared due to analysis. Error: {ex}"; }
|
{
|
||||||
|
IsValid = false
|
||||||
|
};
|
||||||
|
if (ex.Message == "Calculation result is not valid: stiffness matrix is equal to zero")
|
||||||
|
{
|
||||||
|
TraceLogger?.AddMessage($"Stiffness matrix is equal to zero\nProbably section was collapsed", TraceLogStatuses.Error);
|
||||||
|
result.Description = "Stiffness matrix is equal to zero\nProbably section was collapsed";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result.Description = $"Error is appeared due to analysis. Error: {ex}";
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
using LoaderCalculator.Logics;
|
using LoaderCalculator.Logics;
|
||||||
using LoaderCalculator.Logics.Geometry;
|
using LoaderCalculator.Logics.Geometry;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using StructureHelperCommon.Infrastructures.Settings;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperCommon.Services.Forces;
|
using StructureHelperCommon.Services.Forces;
|
||||||
using System;
|
using System;
|
||||||
@@ -11,19 +14,30 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics
|
namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics
|
||||||
{
|
{
|
||||||
internal class SofteningFactorLogic
|
internal class SofteningFactorLogic : ILogic
|
||||||
{
|
{
|
||||||
public static IStressLogic stressLogic = new StressLogic();
|
public static IStressLogic stressLogic = new StressLogic();
|
||||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||||
public StrainTuple StrainTuple { get; set; }
|
public StrainTuple StrainTuple { get; set; }
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public StrainTuple GetSofteningFactors()
|
public StrainTuple GetSofteningFactors()
|
||||||
{
|
{
|
||||||
var strainTuple = new StrainTuple();
|
TraceLogger?.AddMessage($"Calculator type: {GetType()}", TraceLogStatuses.Service);
|
||||||
|
TraceLogger?.AddMessage($"Logic of analisys based on calculating sum of secant stifness of elementary parts EA,i = A,i * Esec,i");
|
||||||
|
TraceLogger?.AddMessage($"Calculating geometry properies for strains");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(StrainTuple));
|
||||||
var loaderStainMatrix = TupleConverter.ConvertToLoaderStrainMatrix(StrainTuple);
|
var loaderStainMatrix = TupleConverter.ConvertToLoaderStrainMatrix(StrainTuple);
|
||||||
var (MxFactor, MyFactor, NzFactor) = GeometryOperations.GetSofteningsFactors(NdmCollection, loaderStainMatrix);
|
var (MxFactor, MyFactor, NzFactor) = GeometryOperations.GetSofteningsFactors(NdmCollection, loaderStainMatrix);
|
||||||
strainTuple.Mx = MxFactor;
|
TraceLogger?.AddMessage($"Reducing of stiffness in {ProgramSetting.GeometryNames.SndAxisName}-plane: EIx_cracked / EIx_uncracked = {MxFactor}");
|
||||||
strainTuple.My = MyFactor;
|
TraceLogger?.AddMessage($"Reducing of stiffness in {ProgramSetting.GeometryNames.FstAxisName}-plane: EIy_cracked / EIy_uncracked = {MyFactor}");
|
||||||
strainTuple.Nz = NzFactor;
|
TraceLogger?.AddMessage($"Reducing of along {ProgramSetting.GeometryNames.TrdAxisName}-axis: EA_cracked / EA_uncracked = {NzFactor}");
|
||||||
|
var strainTuple = new StrainTuple
|
||||||
|
{
|
||||||
|
Mx = MxFactor,
|
||||||
|
My = MyFactor,
|
||||||
|
Nz = NzFactor
|
||||||
|
};
|
||||||
return strainTuple;
|
return strainTuple;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Infrastructures.Settings;
|
||||||
using StructureHelperCommon.Models;
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Models.Calculators;
|
using StructureHelperCommon.Models.Calculators;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
@@ -13,11 +14,12 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
public class CrackForceCalculator : ICalculator
|
public class CrackForceCalculator : ICalculator
|
||||||
{
|
{
|
||||||
static readonly CrackedLogic crackedLogic = new();
|
static readonly CrackedLogic crackedLogic = new();
|
||||||
static readonly ExpSofteningLogic softeningLogic = new();
|
ExpSofteningLogic softeningLogic = new();
|
||||||
static readonly CrackStrainLogic crackStrainLogic = new();
|
static readonly CrackStrainLogic crackStrainLogic = new();
|
||||||
static readonly SofteningFactorLogic softeningFactorLogic = new();
|
static readonly SofteningFactorLogic softeningFactorLogic = new();
|
||||||
IForceTupleCalculator forceTupleCalculator;
|
IForceTupleCalculator forceTupleCalculator;
|
||||||
private CrackForceResult result;
|
private CrackForceResult result;
|
||||||
|
private FindParameterCalculator parameterCalculator;
|
||||||
|
|
||||||
public string Name { get; set; }
|
public string Name { get; set; }
|
||||||
public IForceTuple StartTuple { get; set; }
|
public IForceTuple StartTuple { get; set; }
|
||||||
@@ -26,7 +28,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
public Accuracy Accuracy {get;set; }
|
public Accuracy Accuracy {get;set; }
|
||||||
public IResult Result => result;
|
public IResult Result => result;
|
||||||
|
|
||||||
public IShiftTraceLogger? TraceLogger { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public CrackForceCalculator(IForceTupleCalculator forceTupleCalculator)
|
public CrackForceCalculator(IForceTupleCalculator forceTupleCalculator)
|
||||||
{
|
{
|
||||||
@@ -40,7 +42,23 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
}
|
}
|
||||||
public void Run()
|
public void Run()
|
||||||
{
|
{
|
||||||
|
parameterCalculator = new FindParameterCalculator()
|
||||||
|
{
|
||||||
|
Accuracy = Accuracy,
|
||||||
|
Predicate = crackedLogic.IsSectionCracked
|
||||||
|
};
|
||||||
|
if (TraceLogger is not null)
|
||||||
|
{
|
||||||
|
forceTupleCalculator.TraceLogger = TraceLogger.GetSimilarTraceLogger(100);
|
||||||
|
parameterCalculator.TraceLogger = TraceLogger.GetSimilarTraceLogger(50);
|
||||||
|
crackedLogic.TraceLogger = TraceLogger.GetSimilarTraceLogger(150);
|
||||||
|
}
|
||||||
|
TraceLogger?.AddMessage($"Calculator type: {GetType()}", TraceLogStatuses.Service);
|
||||||
result = new CrackForceResult();
|
result = new CrackForceResult();
|
||||||
|
TraceLogger?.AddMessage($"Start force combination");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(StartTuple));
|
||||||
|
TraceLogger?.AddMessage($"Actual (end) force combination");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(EndTuple));
|
||||||
crackedLogic.StartTuple = StartTuple;
|
crackedLogic.StartTuple = StartTuple;
|
||||||
crackedLogic.EndTuple = EndTuple;
|
crackedLogic.EndTuple = EndTuple;
|
||||||
crackedLogic.NdmCollection = NdmCollection;
|
crackedLogic.NdmCollection = NdmCollection;
|
||||||
@@ -56,19 +74,17 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
}
|
}
|
||||||
if (crackedLogic.IsSectionCracked(0d) == true)
|
if (crackedLogic.IsSectionCracked(0d) == true)
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Crack is appeared in start corce combination", TraceLogStatuses.Warning);
|
||||||
SectionCrackedAtStart();
|
SectionCrackedAtStart();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (crackedLogic.IsSectionCracked(1d) == false)
|
if (crackedLogic.IsSectionCracked(1d) == false)
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Crack is not appeared from actual (end) force combination", TraceLogStatuses.Warning);
|
||||||
SectionIsNotCracked();
|
SectionIsNotCracked();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
var parameterCalculator = new FindParameterCalculator()
|
|
||||||
{
|
|
||||||
Accuracy = Accuracy,
|
|
||||||
Predicate = crackedLogic.IsSectionCracked
|
|
||||||
};
|
|
||||||
parameterCalculator.Run();
|
parameterCalculator.Run();
|
||||||
var paramResult = parameterCalculator.Result as FindParameterResult;
|
var paramResult = parameterCalculator.Result as FindParameterResult;
|
||||||
if (paramResult.IsValid == true)
|
if (paramResult.IsValid == true)
|
||||||
@@ -79,24 +95,42 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
{
|
{
|
||||||
result.IsValid = false;
|
result.IsValid = false;
|
||||||
result.Description += paramResult.Description;
|
result.Description += paramResult.Description;
|
||||||
|
TraceLogger?.AddMessage($"Result of calculation is not valid\n{result.Description}", TraceLogStatuses.Error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SectionIsCrackedBetween(FindParameterResult? paramResult)
|
private void SectionIsCrackedBetween(FindParameterResult? paramResult)
|
||||||
{
|
{
|
||||||
var factorOfCrackAppearance = paramResult.Parameter;
|
var factorOfCrackAppearance = paramResult.Parameter;
|
||||||
|
softeningLogic = new ExpSofteningLogic();
|
||||||
|
if (TraceLogger is not null)
|
||||||
|
{
|
||||||
|
softeningLogic.TraceLogger = TraceLogger.GetSimilarTraceLogger(50);
|
||||||
|
softeningFactorLogic.TraceLogger = TraceLogger.GetSimilarTraceLogger(50);
|
||||||
|
}
|
||||||
softeningLogic.ForceRatio = factorOfCrackAppearance;
|
softeningLogic.ForceRatio = factorOfCrackAppearance;
|
||||||
var psiS = softeningLogic.GetSofteningFactor();
|
var psiS = softeningLogic.GetSofteningFactor();
|
||||||
|
var tupleOfCrackApeearence = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance);
|
||||||
|
TraceLogger?.AddMessage($"Crack is appeared in force combination");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(tupleOfCrackApeearence));
|
||||||
|
var reducedStrainTuple = GetReducedStrainTuple(factorOfCrackAppearance, psiS);
|
||||||
|
var crackedStrainTuple = GetStrainTuple(EndTuple);
|
||||||
|
TraceLogger?.AddMessage($"Strains in cracked section from actual (end) force");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(crackedStrainTuple));
|
||||||
|
TraceLogger?.AddMessage($"Average curvatures of cracked part of element");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(reducedStrainTuple));
|
||||||
|
TraceLogger?.AddMessage($"Calculating factors of reducing of stifness");
|
||||||
|
result.FactorOfCrackAppearance = factorOfCrackAppearance;
|
||||||
result.IsValid = true;
|
result.IsValid = true;
|
||||||
result.IsSectionCracked = true;
|
result.IsSectionCracked = true;
|
||||||
result.Description += paramResult.Description;
|
result.Description += paramResult.Description;
|
||||||
result.FactorOfCrackAppearance = factorOfCrackAppearance;
|
var softeningFactors = GetSofteningFactors(reducedStrainTuple);
|
||||||
result.TupleOfCrackAppearance = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance);
|
result.TupleOfCrackAppearance = tupleOfCrackApeearence;
|
||||||
var reducedStrainTuple = GetReducedStrainTuple(factorOfCrackAppearance, psiS);
|
result.CrackedStrainTuple = crackedStrainTuple;
|
||||||
result.CrackedStrainTuple = GetStrainTuple(EndTuple);
|
|
||||||
result.ReducedStrainTuple = reducedStrainTuple;
|
result.ReducedStrainTuple = reducedStrainTuple;
|
||||||
result.SofteningFactors=GetSofteningFactors(reducedStrainTuple);
|
result.SofteningFactors= softeningFactors;
|
||||||
result.PsiS = psiS;
|
result.PsiS = psiS;
|
||||||
|
TraceLogger?.AddMessage($"Valid result was obtained", TraceLogStatuses.Debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
private StrainTuple GetSofteningFactors(StrainTuple reducedStrainTuple)
|
private StrainTuple GetSofteningFactors(StrainTuple reducedStrainTuple)
|
||||||
@@ -108,8 +142,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
|
|
||||||
private StrainTuple GetReducedStrainTuple(double factorOfCrackAppearance, double softeningFactor)
|
private StrainTuple GetReducedStrainTuple(double factorOfCrackAppearance, double softeningFactor)
|
||||||
{
|
{
|
||||||
const double notCrackedFactor = 0.99d;
|
const double notCrackedForceFactor = 0.99d;
|
||||||
var notCrackedForceTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance * notCrackedFactor) as ForceTuple;
|
var notCrackedForceTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance * notCrackedForceFactor) as ForceTuple;
|
||||||
var crackAppearanceStrainTuple = GetStrainTuple(notCrackedForceTuple);
|
var crackAppearanceStrainTuple = GetStrainTuple(notCrackedForceTuple);
|
||||||
var actualStrainTuple = GetStrainTuple(EndTuple);
|
var actualStrainTuple = GetStrainTuple(EndTuple);
|
||||||
crackStrainLogic.BeforeCrackingTuple = crackAppearanceStrainTuple;
|
crackStrainLogic.BeforeCrackingTuple = crackAppearanceStrainTuple;
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator;
|
||||||
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperCommon.Services.Forces;
|
using StructureHelperCommon.Services.Forces;
|
||||||
using System;
|
using System;
|
||||||
@@ -15,6 +17,8 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
public IForceTuple StartTuple { get; set; }
|
public IForceTuple StartTuple { get; set; }
|
||||||
public IForceTuple EndTuple { get; set; }
|
public IForceTuple EndTuple { get; set; }
|
||||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public CrackedLogic(ISectionCrackedLogic sectionLogic)
|
public CrackedLogic(ISectionCrackedLogic sectionLogic)
|
||||||
{
|
{
|
||||||
sectionCrackedLogic = sectionLogic;
|
sectionCrackedLogic = sectionLogic;
|
||||||
@@ -25,6 +29,10 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
}
|
}
|
||||||
public bool IsSectionCracked(double factor)
|
public bool IsSectionCracked(double factor)
|
||||||
{
|
{
|
||||||
|
if (TraceLogger is not null)
|
||||||
|
{
|
||||||
|
sectionCrackedLogic.TraceLogger = TraceLogger.GetSimilarTraceLogger(50);
|
||||||
|
}
|
||||||
var actualTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factor);
|
var actualTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factor);
|
||||||
sectionCrackedLogic.Tuple = actualTuple;
|
sectionCrackedLogic.Tuple = actualTuple;
|
||||||
sectionCrackedLogic.NdmCollection = NdmCollection;
|
sectionCrackedLogic.NdmCollection = NdmCollection;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -41,19 +42,30 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
forceRatio = value;
|
forceRatio = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public double FiMin {get;set;}
|
public double PsiSMin {get;set;}
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public ExpSofteningLogic()
|
public ExpSofteningLogic()
|
||||||
{
|
{
|
||||||
FiMin = 0.2d;
|
PsiSMin = 0.2d;
|
||||||
PowerFactor = 2d;
|
PowerFactor = 2d;
|
||||||
BettaFactor = 0.8d;
|
BettaFactor = 0.8d;
|
||||||
}
|
}
|
||||||
public double GetSofteningFactor()
|
public double GetSofteningFactor()
|
||||||
{
|
{
|
||||||
double fi;
|
TraceLogger?.AddMessage($"Calculator type: {GetType()}", TraceLogStatuses.Service);
|
||||||
fi = 1 - BettaFactor * Math.Pow(ForceRatio, PowerFactor);
|
TraceLogger?.AddMessage($"Logic of calculation of psi_s factor based on exponential softening model");
|
||||||
fi = Math.Max(fi, FiMin);
|
TraceLogger?.AddMessage($"psi_s = 1 - BettaFactor * ForceRatio ^ PowerFactor");
|
||||||
return fi;
|
TraceLogger?.AddMessage($"But not less than psi_s_min = {PsiSMin}");
|
||||||
|
TraceLogger?.AddMessage($"BettaFactor = {BettaFactor}");
|
||||||
|
TraceLogger?.AddMessage($"ForceRatio = {ForceRatio}");
|
||||||
|
TraceLogger?.AddMessage($"PowerFactor = {BettaFactor}");
|
||||||
|
double psi;
|
||||||
|
psi = 1 - BettaFactor * Math.Pow(ForceRatio, PowerFactor);
|
||||||
|
TraceLogger?.AddMessage($"psi_s = 1 - BettaFactor * ForceRatio ^ PowerFactor = 1 - {BettaFactor} * {ForceRatio} ^ {PowerFactor} = {psi}");
|
||||||
|
double psi_c = Math.Max(psi, PsiSMin);
|
||||||
|
TraceLogger?.AddMessage($"Since psi_s = {psi} and psi_s_min = {PsiSMin},\npsi_s = {psi_c}");
|
||||||
|
return psi_c;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
using LoaderCalculator.Logics;
|
using LoaderCalculator.Logics;
|
||||||
using StructureHelperCommon.Infrastructures.Exceptions;
|
using StructureHelperCommon.Infrastructures.Exceptions;
|
||||||
|
using StructureHelperCommon.Models;
|
||||||
using StructureHelperCommon.Models.Calculators;
|
using StructureHelperCommon.Models.Calculators;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||||
@@ -18,15 +19,25 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
public IForceTuple Tuple { get; set; }
|
public IForceTuple Tuple { get; set; }
|
||||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||||
public Accuracy Accuracy { get; set; }
|
public Accuracy Accuracy { get; set; }
|
||||||
|
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||||
|
|
||||||
public HoleSectionCrackedLogic()
|
public HoleSectionCrackedLogic()
|
||||||
{
|
{
|
||||||
if (Accuracy is null)
|
if (Accuracy is null)
|
||||||
{
|
{
|
||||||
Accuracy = new Accuracy() { IterationAccuracy = 0.001d, MaxIterationCount = 10000 };
|
Accuracy = new Accuracy()
|
||||||
|
{
|
||||||
|
IterationAccuracy = 0.001d,
|
||||||
|
MaxIterationCount = 10000
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public bool IsSectionCracked()
|
public bool IsSectionCracked()
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Calculator type: {GetType()}", TraceLogStatuses.Service);
|
||||||
|
TraceLogger?.AddMessage($"It is assumed, that cracks appearence if: cross-section has elementary parts of concrete and strain of concrete greater than limit value");
|
||||||
|
TraceLogger?.AddMessage($"Force combination for cracking check");
|
||||||
|
TraceLogger?.AddEntry(new TraceTablesFactory().GetByForceTuple(Tuple));
|
||||||
var inputData = new ForceTupleInputData()
|
var inputData = new ForceTupleInputData()
|
||||||
{
|
{
|
||||||
Accuracy = Accuracy,
|
Accuracy = Accuracy,
|
||||||
@@ -34,14 +45,28 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
|||||||
NdmCollection = NdmCollection
|
NdmCollection = NdmCollection
|
||||||
};
|
};
|
||||||
var calculator = new ForceTupleCalculator(inputData);
|
var calculator = new ForceTupleCalculator(inputData);
|
||||||
|
if (TraceLogger is not null)
|
||||||
|
{
|
||||||
|
calculator.TraceLogger = TraceLogger.GetSimilarTraceLogger(50);
|
||||||
|
}
|
||||||
calculator.Run();
|
calculator.Run();
|
||||||
var calcResult = calculator.Result as ForcesTupleResult;
|
var calcResult = calculator.Result as ForcesTupleResult;
|
||||||
if (calcResult.IsValid == false)
|
if (calcResult.IsValid == false)
|
||||||
{
|
{
|
||||||
|
TraceLogger?.AddMessage($"Result of calculation is not valid {calcResult.Description}", TraceLogStatuses.Error);
|
||||||
throw new StructureHelperException(ErrorStrings.ResultIsNotValid + ": Result of Section Calculation is not valid");
|
throw new StructureHelperException(ErrorStrings.ResultIsNotValid + ": Result of Section Calculation is not valid");
|
||||||
}
|
}
|
||||||
var strainMatrix = calcResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
var strainMatrix = calcResult.LoaderResults.ForceStrainPair.StrainMatrix;
|
||||||
return stressLogic.IsSectionCracked(strainMatrix, NdmCollection);
|
var isSectionCracked = stressLogic.IsSectionCracked(strainMatrix, NdmCollection);
|
||||||
|
if (isSectionCracked == true)
|
||||||
|
{
|
||||||
|
TraceLogger?.AddMessage($"Cracks are appeared in cross-section for current force combination");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TraceLogger?.AddMessage($"Cracks are not appeared in cross-section for current force combination");
|
||||||
|
}
|
||||||
|
return isSectionCracked;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
@@ -6,7 +7,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||||
{
|
{
|
||||||
public interface ICrackSofteningLogic
|
public interface ICrackSofteningLogic : ILogic
|
||||||
{
|
{
|
||||||
double GetSofteningFactor();
|
double GetSofteningFactor();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -8,7 +9,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||||
{
|
{
|
||||||
internal interface ICrackedLogic
|
internal interface ICrackedLogic : ILogic
|
||||||
{
|
{
|
||||||
IForceTuple StartTuple { get; set; }
|
IForceTuple StartTuple { get; set; }
|
||||||
IForceTuple EndTuple { get; set; }
|
IForceTuple EndTuple { get; set; }
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using LoaderCalculator.Data.Ndms;
|
using LoaderCalculator.Data.Ndms;
|
||||||
|
using StructureHelperCommon.Infrastructures.Interfaces;
|
||||||
using StructureHelperCommon.Models.Forces;
|
using StructureHelperCommon.Models.Forces;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -8,7 +9,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||||
{
|
{
|
||||||
internal interface ISectionCrackedLogic
|
internal interface ISectionCrackedLogic : ILogic
|
||||||
{
|
{
|
||||||
IForceTuple Tuple { get; set; }
|
IForceTuple Tuple { get; set; }
|
||||||
IEnumerable<INdm> NdmCollection { get; set; }
|
IEnumerable<INdm> NdmCollection { get; set; }
|
||||||
|
|||||||
Reference in New Issue
Block a user