Logics of accidental eccentricity were separated and tested

This commit is contained in:
Evgeny Redikultsev
2024-03-10 19:20:01 +05:00
parent 0a453c5a95
commit b81b7a0929
30 changed files with 885 additions and 331 deletions

View File

@@ -16,7 +16,7 @@ namespace StructureHelperCommon.Models.Materials
{
private ConcreteLogicOptions options;
private MaterialCommonOptionLogic optionLogic;
private FactorLogic factorLogic;
public ConcreteMaterialOptionLogic(ConcreteLogicOptions options)
{
@@ -32,10 +32,6 @@ namespace StructureHelperCommon.Models.Materials
var concreteOptions = materialOptions as ConcreteOptions;
optionLogic = new MaterialCommonOptionLogic(options);
optionLogic.SetMaterialOptions(concreteOptions);
factorLogic = new FactorLogic(options.SafetyFactors);
var strength = factorLogic.GetTotalFactor(options.LimitState, options.CalcTerm);
concreteOptions.ExternalFactor.Compressive = strength.Compressive;
concreteOptions.ExternalFactor.Tensile = strength.Tensile;
concreteOptions.WorkInTension = options.WorkInTension;
concreteOptions.RelativeHumidity = options.RelativeHumidity;
concreteOptions.Age = options.Age;

View File

@@ -240,7 +240,7 @@ namespace StructureHelperCommon.Models.Materials.Libraries
Code = code,
Name = "A400",
InitModulus = 2e11d,
MainStrength = 400e6d
MainStrength = 390e6d
},
new ReinforcementMaterialEntity(new Guid("045b54b1-0bbf-41fd-a27d-aeb20f600bb4"))
{

View File

@@ -1,12 +1,16 @@
using StructureHelperCommon.Infrastructures.Enums;
using LoaderCalculator.Data.Materials.MaterialBuilders;
using StructureHelperCommon.Infrastructures.Enums;
using StructureHelperCommon.Infrastructures.Exceptions;
using StructureHelperCommon.Models.Materials.Libraries;
using LCMB = LoaderCalculator.Data.Materials.MaterialBuilders;
using SHEnums = StructureHelperCommon.Infrastructures.Enums;
namespace StructureHelperCommon.Models.Materials
{
public class MaterialCommonOptionLogic : IMaterialOptionLogic
{
private IMaterialLogicOptions options;
private FactorLogic factorLogic;
public MaterialCommonOptionLogic(IMaterialLogicOptions options)
{
@@ -17,6 +21,58 @@ namespace StructureHelperCommon.Models.Materials
{
materialOptions.InitModulus = options.MaterialEntity.InitModulus;
materialOptions.Strength = options.MaterialEntity.MainStrength;
ProcessCodeType(materialOptions);
ProcessLimitState(materialOptions);
ProcessCalcTerm(materialOptions);
ProcessExternalFactors(materialOptions);
}
private void ProcessExternalFactors(IMaterialOptions materialOptions)
{
factorLogic = new FactorLogic(options.SafetyFactors);
var strength = factorLogic.GetTotalFactor(options.LimitState, options.CalcTerm);
materialOptions.ExternalFactor.Compressive = strength.Compressive;
materialOptions.ExternalFactor.Tensile = strength.Tensile;
}
private void ProcessCalcTerm(IMaterialOptions materialOptions)
{
if (options.CalcTerm == CalcTerms.ShortTerm)
{
materialOptions.IsShortTerm = true;
}
else if (options.CalcTerm == CalcTerms.LongTerm)
{
materialOptions.IsShortTerm = false;
}
else
{
throw new StructureHelperException(ErrorStrings.LoadTermIsNotValid);
}
}
private void ProcessLimitState(IMaterialOptions materialOptions)
{
if (options.LimitState == SHEnums.LimitStates.ULS)
{
materialOptions.LimitState = LCMB.LimitStates.Collapse;
}
else if (options.LimitState == SHEnums.LimitStates.SLS)
{
materialOptions.LimitState = LCMB.LimitStates.ServiceAbility;
}
else if (options.LimitState == SHEnums.LimitStates.Special)
{
materialOptions.LimitState = LCMB.LimitStates.Special;
}
else
{
throw new StructureHelperException(ErrorStrings.LimitStatesIsNotValid);
}
}
private void ProcessCodeType(IMaterialOptions materialOptions)
{
if (options.MaterialEntity.CodeType == CodeTypes.EuroCode_2_1990)
{
materialOptions.CodesType = LCMB.CodesType.EC2_1990;
@@ -25,23 +81,10 @@ namespace StructureHelperCommon.Models.Materials
{
materialOptions.CodesType = LCMB.CodesType.SP63_2018;
}
else { throw new StructureHelperException($"{ErrorStrings.ObjectTypeIsUnknown} : {materialOptions.CodesType}"); }
if (options.LimitState == LimitStates.ULS)
else
{
materialOptions.LimitState = LCMB.LimitStates.Collapse;
throw new StructureHelperException($"{ErrorStrings.ObjectTypeIsUnknown} : {materialOptions.CodesType}");
}
else if (options.LimitState == LimitStates.SLS)
{
materialOptions.LimitState = LCMB.LimitStates.ServiceAbility;
}
else if (options.LimitState == LimitStates.Special)
{
materialOptions.LimitState = LCMB.LimitStates.Special;
}
else { throw new StructureHelperException(ErrorStrings.LimitStatesIsNotValid); }
if (options.CalcTerm == CalcTerms.ShortTerm) { materialOptions.IsShortTerm = true; }
else if (options.CalcTerm == CalcTerms.LongTerm) { materialOptions.IsShortTerm = false; }
else { throw new StructureHelperException(ErrorStrings.LoadTermIsNotValid); }
}
}
}

View File

@@ -43,7 +43,10 @@ namespace StructureHelperCommon.Models.Materials
private void GetLoaderOptions()
{
materialOptions = new ReinforcementOptions() { DiagramType = DiagramType};
materialOptions = new ReinforcementOptions()
{
DiagramType = DiagramType
};
optionLogic = new MaterialCommonOptionLogic(options);
optionLogic.SetMaterialOptions(materialOptions);
}