Tuple crack calculator was changed
This commit is contained in:
@@ -2,7 +2,9 @@
|
||||
using LoaderCalculator.Data.Matrix;
|
||||
using LoaderCalculator.Data.Ndms;
|
||||
using LoaderCalculator.Logics;
|
||||
using StructureHelperCommon.Models;
|
||||
using StructureHelperCommon.Models.Forces;
|
||||
using StructureHelperCommon.Models.Loggers;
|
||||
using StructureHelperCommon.Services.Forces;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -16,29 +18,44 @@ namespace StructureHelperLogics.NdmCalculations.Cracking
|
||||
{
|
||||
const double maxConcreteFactor = 0.5d;
|
||||
const double minConcreteFactor = 0.1d;
|
||||
const double minRebarFactor = 3d;
|
||||
const double minRebarFactor = 9d;
|
||||
private static IStressLogic stressLogic => new StressLogic();
|
||||
public IEnumerable<INdm> NdmCollection { get; set; }
|
||||
public IStrainMatrix StrainMatrix { get; set; }
|
||||
public IShiftTraceLogger? TraceLogger { get; set; }
|
||||
|
||||
public double GetTensileArea()
|
||||
{
|
||||
TraceLogger?.AddMessage(LoggerStrings.CalculatorType(this), TraceLogStatuses.Service);
|
||||
|
||||
var rebarCollection = NdmCollection
|
||||
.Where(x => x is RebarNdm);
|
||||
.Where(x => x is RebarNdm & stressLogic.GetTotalStrain(StrainMatrix, x) > 0d);
|
||||
var rebarArea = rebarCollection.
|
||||
Sum(x => x.Area * x.StressScale);
|
||||
TraceLogger?.AddMessage($"Summary rebar area As = {rebarArea}");
|
||||
var concreteCollection = NdmCollection
|
||||
.Where(x => x.Material is ConcreteMaterial);
|
||||
var concreteArea = concreteCollection
|
||||
.Sum(x => x.Area * x.StressScale);
|
||||
TraceLogger?.AddMessage($"Concrete area Ac = {concreteArea}");
|
||||
var concreteTensileArea = concreteCollection
|
||||
.Where(x => stressLogic.GetTotalStrainWithPrestrain(StrainMatrix, x) > 0d)
|
||||
.Sum(x => x.Area * x.StressScale);
|
||||
|
||||
concreteTensileArea = Math.Max(concreteTensileArea, rebarArea * minRebarFactor);
|
||||
concreteTensileArea = Math.Max(concreteTensileArea, concreteArea * minConcreteFactor);
|
||||
concreteTensileArea = Math.Min(concreteTensileArea, concreteArea * maxConcreteFactor);
|
||||
TraceLogger?.AddMessage($"Concrete tensile area Ac,t = {concreteTensileArea}");
|
||||
|
||||
double areaByRebar = rebarArea * minRebarFactor;
|
||||
TraceLogger?.AddMessage($"Concrete area is considered not less than {minRebarFactor} of area of rebars");
|
||||
TraceLogger?.AddMessage($"Minimum concrete effective area from area of rebar Ac,eff = {rebarArea} * {minRebarFactor} = {areaByRebar}");
|
||||
concreteTensileArea = Math.Max(concreteTensileArea, areaByRebar);
|
||||
double areaByMinConcreteFactor = concreteArea * minConcreteFactor;
|
||||
TraceLogger?.AddMessage($"Concrete area is considered not less than {minConcreteFactor} of area of rebars");
|
||||
TraceLogger?.AddMessage($"Minimum concrete effective area Ac,eff = {concreteArea} * {minConcreteFactor} = {areaByMinConcreteFactor}");
|
||||
concreteTensileArea = Math.Max(concreteTensileArea, areaByMinConcreteFactor);
|
||||
double areaByMaxConcreteFactor = concreteArea * maxConcreteFactor;
|
||||
TraceLogger?.AddMessage($"Concrete area is considered not greater than {maxConcreteFactor} of area of rebars");
|
||||
TraceLogger?.AddMessage($"Maximum concrete effective area Ac,eff = {concreteArea} * {maxConcreteFactor} = {areaByMaxConcreteFactor}");
|
||||
concreteTensileArea = Math.Min(concreteTensileArea, areaByMaxConcreteFactor);
|
||||
TraceLogger?.AddMessage($"Concrete effective area Ac,eff = {concreteTensileArea}");
|
||||
return concreteTensileArea;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user