Geometry property results have been added

This commit is contained in:
Evgeny Redikultsev
2023-04-29 20:39:05 +05:00
parent fe2adb49ff
commit 749c864edd
35 changed files with 550 additions and 73 deletions

View File

@@ -36,7 +36,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
var checkResult = CheckInputData();
if (checkResult != "")
{
Result = new ForcesResults() { IsValid = false, Desctription = checkResult };
Result = new ForcesResults() { IsValid = false, Description = checkResult };
return;
}
else
@@ -86,7 +86,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
if (bucklingResult.IsValid != true)
{
result.IsValid = false;
result.Desctription += $"Buckling result:\n{bucklingResult.Desctription}\n";
result.Description += $"Buckling result:\n{bucklingResult.Description}\n";
}
newTuple = CalculateBuckling(newTuple, bucklingResult);
result = GetPrimitiveStrainMatrix(ndms, newTuple);
@@ -94,7 +94,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
catch (Exception ex)
{
result.IsValid = false;
result.Desctription = $"Buckling error:\n{ex}\n";
result.Description = $"Buckling error:\n{ex}\n";
}
}
result.DesignForceTuple.LimitState = limitState;

View File

@@ -57,19 +57,19 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
var calcResult = calculator.Result;
if (calcResult.AccuracyRate <= accuracy.IterationAccuracy)
{
return new ForcesTupleResult() { IsValid = true, Desctription = "Analysis is done succsefully", LoaderResults = calcResult };
return new ForcesTupleResult() { IsValid = true, Description = "Analysis is done succsefully", LoaderResults = calcResult };
}
else
{
return new ForcesTupleResult() { IsValid = false, Desctription = "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)
{
var result = new ForcesTupleResult() { IsValid = false };
if (ex.Message == "Calculation result is not valid: stiffness matrix is equal to zero") { result.Desctription = "Stiffness matrix is equal to zero \nProbably section was collapsed"; }
else { result.Desctription = $"Error is appeared due to analysis. Error: {ex}"; }
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"; }
else { result.Description = $"Error is appeared due to analysis. Error: {ex}"; }
return result;
}
}

View File

@@ -10,7 +10,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
{
public bool IsValid { get; set; }
public List<IForcesTupleResult> ForcesResultList { get; }
public string Desctription { get; set; }
public string Description { get; set; }
public ForcesResults()
{

View File

@@ -16,7 +16,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
/// <summary>
/// Text of result of calculations
/// </summary>
public string Desctription { get; set; }
public string Description { get; set; }
/// <summary>
/// Keep result of calculations from ndm-library
/// </summary>

View File

@@ -4,7 +4,7 @@ namespace StructureHelperLogics.NdmCalculations.Analyses.ByForces
{
public interface IForcesResults : INdmResult
{
string Desctription { get; set; }
string Description { get; set; }
List<IForcesTupleResult> ForcesResultList { get; }
bool IsValid { get; set; }
}

View File

@@ -12,6 +12,6 @@ namespace StructureHelperLogics.NdmCalculations.Analyses
/// True if result of calculation is valid
/// </summary>
bool IsValid { get; set; }
string Desctription { get; set; }
string Description { get; set; }
}
}

View File

@@ -31,7 +31,7 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
private (double EtaAlongX, double EtaAlongY) GetBucklingCoefficients()
{
var stiffness = GetStiffness();
criticalForceLogic.LongForce = options.CalcForceTuple.Nz;
criticalForceLogic.LongitudinalForce = options.CalcForceTuple.Nz;
criticalForceLogic.StiffnessEI = stiffness.DX;
criticalForceLogic.DesignLength = options.CompressedMember.GeometryLength * options.CompressedMember.LengthFactorY;
var etaAlongY = criticalForceLogic.GetEtaFactor();
@@ -77,8 +77,8 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
{
var gravityCenter = GeometryOperations.GetGravityCenter(ndmCollection);
var concreteInertia = GeometryOperations.GetMomentsOfInertiaMod(concreteNdms, gravityCenter);
var otherInertia = GeometryOperations.GetMomentsOfInertiaMod(otherNdms, gravityCenter);
var concreteInertia = GeometryOperations.GetReducedMomentsOfInertia(concreteNdms, gravityCenter);
var otherInertia = GeometryOperations.GetReducedMomentsOfInertia(otherNdms, gravityCenter);
var stiffnessX = stiffnessLogicX.GetStiffnessCoeffitients();
var dX = stiffnessX.Kc * concreteInertia.MomentX + stiffnessX.Ks * otherInertia.MomentX;
@@ -127,7 +127,7 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
var checkResult = CheckInputData();
if (checkResult != "")
{
Result = new ConcreteBucklingResult() { IsValid = false, Desctription = checkResult };
Result = new ConcreteBucklingResult() { IsValid = false, Description = checkResult };
return;
}
else

View File

@@ -12,7 +12,7 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
/// <inheritdoc/>
public bool IsValid { get; set; }
/// <inheritdoc/>
public string Desctription { get; set; }
public string Description { get; set; }
/// <inheritdoc/>
public double EtaFactorAlongX { get; set; }
/// <inheritdoc/>

View File

@@ -10,7 +10,7 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
{
internal class EilerCriticalForceLogic : IEilerCriticalForceLogic
{
public double LongForce { get; set; }
public double LongitudinalForce { get; set; }
public double StiffnessEI { get; set; }
public double DesignLength { get; set; }
@@ -22,13 +22,13 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
public double GetEtaFactor()
{
if (LongForce >= 0d) return 1d;
if (LongitudinalForce >= 0d) return 1d;
var Ncr = GetCriticalForce();
if (LongForce <= Ncr)
if (LongitudinalForce <= Ncr)
{
throw new StructureHelperException(ErrorStrings.LongitudinalForceMustBeLessThanCriticalForce);
}
double eta = 1 / (1 - LongForce / Ncr);
double eta = 1 / (1 - LongitudinalForce / Ncr);
return eta;
}
}

View File

@@ -8,7 +8,7 @@ namespace StructureHelperLogics.NdmCalculations.Buckling
{
internal interface IEilerCriticalForceLogic : ICriticalBucklingForceLogic
{
double LongForce { get; set; }
double LongitudinalForce { get; set; }
double StiffnessEI { get; set; }
double DesignLength { get; set; }

View File

@@ -0,0 +1,160 @@
using LoaderCalculator.Data.Matrix;
using LoaderCalculator.Data.Ndms;
using LoaderCalculator.Logics.Geometry;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Settings;
using StructureHelperCommon.Models.Parameters;
using StructureHelperCommon.Services.Units;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security;
using System.Text;
using System.Threading.Tasks;
namespace StructureHelperLogics.Services.NdmPrimitives
{
public class TextParametersLogic
{
const string prefixInitial = "Initial";
const string prefixActual = "Actual";
static string firstAxisName => ProgramSetting.CrossSectionAxisNames.FirstAxis;
static string secondAxisName => ProgramSetting.CrossSectionAxisNames.SecondAxis;
static IEnumerable<IUnit> units = UnitsFactory.GetUnitCollection();
private IEnumerable<INdm> ndms;
private IStrainMatrix strainMatrix;
public List<ITextParameter> GetTextParameters()
{
var parameters = new List<ITextParameter>();
parameters.AddRange(GetGravityCenter(prefixInitial, ndms));
parameters.AddRange(GetArea(prefixInitial, ndms));
parameters.AddRange(GetSecondMomentOfArea(prefixInitial, ndms));
parameters.AddRange(GetGravityCenter(prefixActual, ndms, strainMatrix));
parameters.AddRange(GetArea(prefixActual, ndms, strainMatrix));
parameters.AddRange(GetSecondMomentOfArea(prefixActual, ndms, strainMatrix));
return parameters;
}
private IEnumerable<ITextParameter> GetSecondMomentOfArea(string prefix, IEnumerable<INdm> locNdms, IStrainMatrix? locStrainMatrix = null)
{
const string name = "Moment of inertia";
var parameters = new List<ITextParameter>();
var unitArea = CommonOperation.GetUnit(UnitTypes.Area, "mm2");
var unitStress = CommonOperation.GetUnit(UnitTypes.Stress, "MPa");
var unitName = $"{unitStress.Name} * {unitArea.Name} * {unitArea.Name}";
var unitMultiPlayer = unitArea.Multiplyer * unitArea.Multiplyer * unitStress.Multiplyer;
var firstParameter = new TextParameter()
{
IsValid = true,
Name = $"{prefix} {name} {firstAxisName.ToUpper()}",
ShortName = $"I{firstAxisName}",
MeasurementUnit = unitName,
Description = $"{prefix} {name} of cross-section arbitrary {firstAxisName}-axis multiplied by {prefix} modulus"
};
var secondParameter = new TextParameter()
{
IsValid = true,
Name = $"{prefix} {name} {secondAxisName}",
ShortName = $"I{secondAxisName}",
MeasurementUnit = unitName,
Description = $"{prefix} {name} of cross-section arbitrary {secondAxisName}-axis multiplied by {prefix} modulus"
};
try
{
var gravityCenter = GeometryOperations.GetReducedMomentsOfInertia(locNdms, locStrainMatrix);
firstParameter.Value = gravityCenter.MomentX * unitMultiPlayer;
secondParameter.Value = gravityCenter.MomentY * unitMultiPlayer;
}
catch (Exception ex)
{
firstParameter.IsValid = false;
firstParameter.Value = double.NaN;
firstParameter.Description += $": {ex}";
secondParameter.IsValid = false;
secondParameter.Value = double.NaN;
secondParameter.Description += $": {ex}";
}
parameters.Add(firstParameter);
parameters.Add(secondParameter);
return parameters;
}
private IEnumerable<ITextParameter> GetArea(string prefix, IEnumerable<INdm> locNdms, IStrainMatrix? locStrainMatrix = null)
{
var parameters = new List<ITextParameter>();
var unitArea = CommonOperation.GetUnit(UnitTypes.Area, "mm2");
var unitStress = CommonOperation.GetUnit(UnitTypes.Stress, "MPa");
var unitName = $"{unitStress.Name} * {unitArea.Name}" ;
var unitMultiPlayer = unitArea.Multiplyer * unitStress.Multiplyer;
var firstParameter = new TextParameter()
{
IsValid = true,
Name = $"{prefix} Area",
ShortName = "EA",
MeasurementUnit = unitName,
Description = $"{prefix} Area of cross-section multiplied by {prefix} modulus"
};
try
{
firstParameter.Value = GeometryOperations.GetReducedArea(locNdms, locStrainMatrix) * unitMultiPlayer;
}
catch (Exception ex)
{
firstParameter.IsValid = false;
firstParameter.Value = double.NaN;
firstParameter.Description += $": {ex}";
}
parameters.Add(firstParameter);
return parameters;
}
public TextParametersLogic(IEnumerable<INdm> ndms, IStrainMatrix strainMatrix)
{
this.ndms = ndms;
this.strainMatrix = strainMatrix;
}
private IEnumerable<ITextParameter> GetGravityCenter(string prefix, IEnumerable<INdm> locNdms, IStrainMatrix? locStrainMatrix = null)
{
var parameters = new List<ITextParameter>();
var unitType = UnitTypes.Length;
var unit = CommonOperation.GetUnit(unitType, "mm");
var unitName = unit.Name;
var unitMultiPlayer = unit.Multiplyer;
var firstParameter = new TextParameter()
{
IsValid = true,
Name = $"{prefix} Center{firstAxisName.ToUpper()}",
ShortName = $"{firstAxisName.ToUpper()}c",
MeasurementUnit = unitName,
Description = $"{prefix} Displacement of center of gravity of cross-section along {firstAxisName}-axis"
};
var secondParameter = new TextParameter()
{
IsValid = true,
Name = $"{prefix} Center{secondAxisName.ToUpper()}",
ShortName = $"{secondAxisName.ToUpper()}c",
MeasurementUnit = unitName,
Description = $"{prefix} Displacement of center of gravity of cross-section along {secondAxisName}-axis"
};
try
{
var gravityCenter = GeometryOperations.GetGravityCenter(locNdms, locStrainMatrix);
firstParameter.Value = gravityCenter.CenterX * unitMultiPlayer;
secondParameter.Value = gravityCenter.CenterY * unitMultiPlayer;
}
catch (Exception ex)
{
firstParameter.IsValid = false;
firstParameter.Value = double.NaN;
firstParameter.Description += $": {ex}";
secondParameter.IsValid = false;
secondParameter.Value = double.NaN;
secondParameter.Description += $": {ex}";
}
parameters.Add(firstParameter);
parameters.Add(secondParameter);
return parameters;
}
}
}