Obtaining softening factors was added
This commit is contained in:
@@ -14,16 +14,18 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
||||
{
|
||||
public class ForceTupleCalculator : IForceTupleCalculator
|
||||
{
|
||||
public IForceTupleInputData InputData { get; set; }
|
||||
public string Name { get; set; }
|
||||
public IResult Result { get; private set; }
|
||||
|
||||
private IForceTupleInputData inputData;
|
||||
|
||||
public ForceTupleCalculator(IForceTupleInputData inputData)
|
||||
{
|
||||
this.inputData = inputData;
|
||||
InputData = inputData;
|
||||
}
|
||||
public ForceTupleCalculator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
Result = CalculateResult();
|
||||
@@ -31,9 +33,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
||||
|
||||
private IForcesTupleResult CalculateResult()
|
||||
{
|
||||
var ndmCollection = inputData.NdmCollection;
|
||||
var tuple = inputData.Tuple;
|
||||
var accuracy = inputData.Accuracy;
|
||||
var ndmCollection = InputData.NdmCollection;
|
||||
var tuple = InputData.Tuple;
|
||||
var accuracy = InputData.Accuracy;
|
||||
|
||||
|
||||
var mx = tuple.Mx;
|
||||
|
||||
@@ -14,5 +14,9 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||
public IForceTuple Tuple { get; set; }
|
||||
public IAccuracy Accuracy { get; set; }
|
||||
public ForceTupleInputData()
|
||||
{
|
||||
Accuracy ??= new Accuracy() { IterationAccuracy = 0.01d, MaxIterationCount = 1000 };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,5 +9,6 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
|
||||
{
|
||||
public interface IForceTupleCalculator : ICalculator
|
||||
{
|
||||
IForceTupleInputData InputData {get;set;}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
using LoaderCalculator.Data.Ndms;
|
||||
using LoaderCalculator.Logics;
|
||||
using LoaderCalculator.Logics.Geometry;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Services.Forces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics
|
||||
{
|
||||
internal class SofteningFactorLogic
|
||||
{
|
||||
public static IStressLogic stressLogic = new StressLogic();
|
||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||
public StrainTuple StrainTuple { get; set; }
|
||||
public StrainTuple GetSofteningFactors()
|
||||
{
|
||||
var strainTuple = new StrainTuple();
|
||||
var loaderStainMatrix = StrainTupleService.ConvertToLoaderStrainMatrix(StrainTuple);
|
||||
var (MxFactor, MyFactor, NzFactor) = GeometryOperations.GetSofteningsFactors(NdmCollection, loaderStainMatrix);
|
||||
strainTuple.Mx = MxFactor;
|
||||
strainTuple.My = MyFactor;
|
||||
strainTuple.Nz = NzFactor;
|
||||
return strainTuple;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,8 @@ using StructureHelperCommon.Models.Calculators;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Services;
|
||||
using StructureHelperCommon.Services.Forces;
|
||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces;
|
||||
using StructureHelperLogics.NdmCalculations.Analyses.ByForces.Logics;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
@@ -15,20 +17,28 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
public class CrackForceCalculator : ICalculator
|
||||
{
|
||||
static readonly CrackedLogic crackedLogic = new();
|
||||
static readonly ExpSofteningLogic softeningLogic = new();
|
||||
static readonly CrackStrainLogic crackStrainLogic = new();
|
||||
static readonly SofteningFactorLogic softeningFactorLogic = new();
|
||||
IForceTupleCalculator forceTupleCalculator;
|
||||
private CrackForceResult result;
|
||||
|
||||
public string Name { get; set; }
|
||||
public IForceTuple StartTuple { get; set; }
|
||||
public IForceTuple EndTuple { get; set; }
|
||||
public ForceTuple StartTuple { get; set; }
|
||||
public ForceTuple EndTuple { get; set; }
|
||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||
public Accuracy Accuracy {get;set; }
|
||||
public IResult Result => result;
|
||||
public CrackForceCalculator()
|
||||
public CrackForceCalculator(IForceTupleCalculator forceTupleCalculator)
|
||||
{
|
||||
StartTuple ??= new ForceTuple();
|
||||
Accuracy ??= new Accuracy() { IterationAccuracy = 0.0001d, MaxIterationCount = 10000 };
|
||||
this.forceTupleCalculator = forceTupleCalculator;
|
||||
}
|
||||
public CrackForceCalculator() : this(new ForceTupleCalculator())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void Run()
|
||||
{
|
||||
result = new CrackForceResult();
|
||||
@@ -47,18 +57,12 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
}
|
||||
if (crackedLogic.IsSectionCracked(0d) == true)
|
||||
{
|
||||
result.IsValid = true;
|
||||
result.ActualFactor = 0d;
|
||||
result.ActualTuple = (IForceTuple)StartTuple.Clone();
|
||||
result.IsSectionCracked = true;
|
||||
result.Description += "Section cracked in start tuple";
|
||||
SectionCrackedAtStart();
|
||||
return;
|
||||
}
|
||||
if (crackedLogic.IsSectionCracked(1d) == false)
|
||||
{
|
||||
result.IsValid = true;
|
||||
result.IsSectionCracked = false;
|
||||
result.Description = "Section is not cracked";
|
||||
SectionIsNotCracked();
|
||||
return;
|
||||
}
|
||||
var parameterCalculator = new FindParameterCalculator()
|
||||
@@ -70,11 +74,7 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
var paramResult = parameterCalculator.Result as FindParameterResult;
|
||||
if (paramResult.IsValid == true)
|
||||
{
|
||||
result.IsValid = true;
|
||||
result.IsSectionCracked = true;
|
||||
result.Description += paramResult.Description;
|
||||
result.ActualFactor = paramResult.Parameter;
|
||||
result.ActualTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, paramResult.Parameter);
|
||||
SectionIsCrackedBetween(paramResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -83,6 +83,76 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
}
|
||||
}
|
||||
|
||||
private void SectionIsCrackedBetween(FindParameterResult? paramResult)
|
||||
{
|
||||
var factorOfCrackAppearance = paramResult.Parameter;
|
||||
softeningLogic.ForceRatio = factorOfCrackAppearance;
|
||||
var psiS = softeningLogic.GetSofteningFactor();
|
||||
result.IsValid = true;
|
||||
result.IsSectionCracked = true;
|
||||
result.Description += paramResult.Description;
|
||||
result.FactorOfCrackAppearance = factorOfCrackAppearance;
|
||||
result.TupleOfCrackAppearance = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance);
|
||||
var reducedStrainTuple = GetReducedStrainTuple(factorOfCrackAppearance, psiS);
|
||||
result.ReducedStrainTuple = reducedStrainTuple;
|
||||
result.SofteningFactors=GetSofteningFactors(reducedStrainTuple);
|
||||
result.PsiS = psiS;
|
||||
}
|
||||
|
||||
private StrainTuple GetSofteningFactors(StrainTuple reducedStrainTuple)
|
||||
{
|
||||
softeningFactorLogic.NdmCollection = NdmCollection;
|
||||
softeningFactorLogic.StrainTuple = reducedStrainTuple;
|
||||
return softeningFactorLogic.GetSofteningFactors();
|
||||
}
|
||||
|
||||
private StrainTuple GetReducedStrainTuple(double factorOfCrackAppearance, double softeningFactor)
|
||||
{
|
||||
const double notCrackedFactor = 0.99d;
|
||||
var notCrackedForceTuple = ForceTupleService.InterpolateTuples(EndTuple, StartTuple, factorOfCrackAppearance * notCrackedFactor) as ForceTuple;
|
||||
var crackAppearanceStrainTuple = GetStrainTuple(notCrackedForceTuple);
|
||||
var actualStrainTuple = GetStrainTuple(EndTuple);
|
||||
crackStrainLogic.BeforeCrackingTuple = crackAppearanceStrainTuple;
|
||||
crackStrainLogic.AfterCrackingTuple = actualStrainTuple;
|
||||
crackStrainLogic.SofteningFactor = softeningFactor;
|
||||
var reducedStrainTuple = crackStrainLogic.GetCrackedStrainTuple();
|
||||
return reducedStrainTuple is null
|
||||
? throw new StructureHelperException(ErrorStrings.ResultIsNotValid + "\n Strain Tuple is null")
|
||||
: reducedStrainTuple;
|
||||
}
|
||||
|
||||
private void SectionCrackedAtStart()
|
||||
{
|
||||
result.IsValid = true;
|
||||
result.FactorOfCrackAppearance = 0d;
|
||||
result.TupleOfCrackAppearance = (IForceTuple)StartTuple.Clone();
|
||||
softeningLogic.ForceRatio = result.FactorOfCrackAppearance;
|
||||
result.PsiS = softeningLogic.GetSofteningFactor();
|
||||
result.ReducedStrainTuple = GetStrainTuple(EndTuple);
|
||||
result.SofteningFactors = GetSofteningFactors(result.ReducedStrainTuple);
|
||||
result.IsSectionCracked = true;
|
||||
result.Description += "Section cracked in start tuple";
|
||||
}
|
||||
private void SectionIsNotCracked()
|
||||
{
|
||||
result.IsValid = true;
|
||||
result.IsSectionCracked = false;
|
||||
result.ReducedStrainTuple = GetStrainTuple(EndTuple);
|
||||
result.SofteningFactors = GetSofteningFactors(result.ReducedStrainTuple);
|
||||
result.Description = "Section is not cracked";
|
||||
}
|
||||
private StrainTuple GetStrainTuple(ForceTuple forceTuple)
|
||||
{
|
||||
ForceTupleInputData inputData = new();
|
||||
inputData.NdmCollection = NdmCollection;
|
||||
inputData.Tuple = forceTuple;
|
||||
forceTupleCalculator.InputData = inputData;
|
||||
forceTupleCalculator.Run();
|
||||
var result = forceTupleCalculator.Result as IForcesTupleResult;
|
||||
var loaderStrainMatrix = result.LoaderResults.ForceStrainPair.StrainMatrix;
|
||||
StrainTuple strainTuple = StrainTupleService.ConvertToStrainTuple(loaderStrainMatrix);
|
||||
return strainTuple;
|
||||
}
|
||||
private void Check()
|
||||
{
|
||||
CheckObject.IsNull(EndTuple);
|
||||
@@ -91,7 +161,6 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
throw new StructureHelperException(ErrorStrings.DataIsInCorrect + ": Section is not cracked");
|
||||
}
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using StructureHelperCommon.Models.Calculators;
|
||||
using LoaderCalculator.Data.Ndms;
|
||||
using StructureHelperCommon.Models.Calculators;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -13,7 +14,14 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
public bool IsValid { get; set; }
|
||||
public string Description { get; set; }
|
||||
public bool IsSectionCracked { get; set; }
|
||||
public double ActualFactor { get; set; }
|
||||
public IForceTuple ActualTuple { get; set; }
|
||||
public double FactorOfCrackAppearance { get; set; }
|
||||
public IForceTuple StartTuple { get; set; }
|
||||
public IForceTuple EndTuple { get; set; }
|
||||
public IForceTuple TupleOfCrackAppearance { get; set; }
|
||||
public StrainTuple ReducedStrainTuple { get; set; }
|
||||
public StrainTuple SofteningFactors { get; set; }
|
||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||
public double PsiS { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Services.Forces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
{
|
||||
internal class CrackStrainLogic : ICrackStrainLogic
|
||||
{
|
||||
public StrainTuple BeforeCrackingTuple { get; set; }
|
||||
public StrainTuple AfterCrackingTuple { get; set; }
|
||||
public double SofteningFactor { get; set; }
|
||||
|
||||
public StrainTuple GetCrackedStrainTuple()
|
||||
{
|
||||
var strainTuple = ForceTupleService.InterpolateTuples(AfterCrackingTuple, BeforeCrackingTuple, SofteningFactor) as StrainTuple;
|
||||
return strainTuple;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
{
|
||||
public class ExponentialSofteningLogic : ICrackSofteningLogic
|
||||
public class ExpSofteningLogic : ICrackSofteningLogic
|
||||
{
|
||||
private double forceRatio;
|
||||
private double powerFactor;
|
||||
@@ -42,13 +42,13 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
}
|
||||
}
|
||||
public double FiMin {get;set;}
|
||||
public ExponentialSofteningLogic()
|
||||
public ExpSofteningLogic()
|
||||
{
|
||||
FiMin = 0.2d;
|
||||
PowerFactor = 2d;
|
||||
PowerFactor = 1d;
|
||||
BettaFactor = 0.8;
|
||||
}
|
||||
public double SofteningFactor()
|
||||
public double GetSofteningFactor()
|
||||
{
|
||||
double fi;
|
||||
fi = 1 - BettaFactor * Math.Pow(ForceRatio, PowerFactor);
|
||||
@@ -8,6 +8,6 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
{
|
||||
public interface ICrackSofteningLogic
|
||||
{
|
||||
double SofteningFactor();
|
||||
double GetSofteningFactor();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
{
|
||||
internal interface ICrackStrainLogic
|
||||
{
|
||||
StrainTuple BeforeCrackingTuple { get; set; }
|
||||
StrainTuple AfterCrackingTuple { get; set; }
|
||||
double SofteningFactor { get; set; }
|
||||
StrainTuple GetCrackedStrainTuple();
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,8 @@ namespace StructureHelperLogics.Services.NdmPrimitives
|
||||
{
|
||||
const string prefixInitial = "Initial";
|
||||
const string prefixActual = "Actual";
|
||||
static string firstAxisName => ProgramSetting.CrossSectionAxisNames.FirstAxis;
|
||||
static string secondAxisName => ProgramSetting.CrossSectionAxisNames.SecondAxis;
|
||||
static string firstAxisName => ProgramSetting.GeometryNames.FstAxisName;
|
||||
static string secondAxisName => ProgramSetting.GeometryNames.SndAxisName;
|
||||
static IEnumerable<IUnit> units = UnitsFactory.GetUnitCollection();
|
||||
private IEnumerable<INdm> ndms;
|
||||
private IStrainMatrix strainMatrix;
|
||||
@@ -133,10 +133,9 @@ namespace StructureHelperLogics.Services.NdmPrimitives
|
||||
};
|
||||
try
|
||||
{
|
||||
var initialMoments = GeometryOperations.GetReducedMomentsOfInertia(locNdms);
|
||||
var actualMoments = GeometryOperations.GetReducedMomentsOfInertia(locNdms, locStrainMatrix);
|
||||
firstParameter.Value = (actualMoments.MomentX / initialMoments.MomentX).ToString();
|
||||
secondParameter.Value = (actualMoments.MomentY / initialMoments.MomentY).ToString();
|
||||
var actualMoments = GeometryOperations.GetSofteningsFactors(locNdms, locStrainMatrix);
|
||||
firstParameter.Value = actualMoments.MxFactor.ToString();
|
||||
secondParameter.Value = actualMoments.MyFactor.ToString();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -196,9 +195,8 @@ namespace StructureHelperLogics.Services.NdmPrimitives
|
||||
};
|
||||
try
|
||||
{
|
||||
var actual = GeometryOperations.GetReducedArea(locNdms, locStrainMatrix);
|
||||
var initial = GeometryOperations.GetReducedArea(locNdms);
|
||||
firstParameter.Value = (actual / initial).ToString();
|
||||
var actual = GeometryOperations.GetSofteningsFactors(locNdms, locStrainMatrix);
|
||||
firstParameter.Value = actual.NzFactor.ToString();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user