protected IStrainCompatibilityAnalysisResult GetResult(SectionAnalysisResult SectionResult) { RebarPointResult controllingBar = GetMaxSteelStrainPoint(SectionResult.TensionRebarResults); double MaxSteelTensionStrain = controllingBar.Strain; double Mn = SectionResult.Moment; IStrainCompatibilityAnalysisResult result = new ConcreteSectionFlexuralAnalysisResult(Mn, SectionResult.StrainDistribution, controllingBar); return(result); }
private RebarPointResult GetMaxSteelStrainPoint(List <RebarPointResult> rebarResult) { //Find minimum value because of sign convention RebarPointResult minStrainPoint = null; var MinStrainBar = rebarResult.MinBy(b => b.Strain); return(MinStrainBar); //RebarPointResult maxStrainPoint= null; //double MaxSteelStrain = double.NegativeInfinity; //foreach (var bar in rebarResult) //{ // if (bar.Strain >=MaxSteelStrain) //{ // maxStrainPoint = bar; //} // } // return maxStrainPoint; }
public IStrainCompatibilityAnalysisResult GetNominalFlexuralCapacity (FlexuralCompressionFiberPosition CompressionFiberPosition) { currentCompressionFiberPosition = CompressionFiberPosition; //Step 1: Assume strain distribution with all bars below section centroid yielding LinearStrainDistribution TrialStrainDistribution = GetInitialStrainEstimate(CompressionFiberPosition); SectionAnalysisResult TrialSectionResult = GetSectionResult(TrialStrainDistribution, CompressionFiberPosition); double Mn = 0; //check id T and C force are equal //if T<>C if (GetAnalysisResultConverged(TrialSectionResult, ConvergenceToleranceStrain) == false) { SectionAnalysisResult IteratedResult = null; try { TCIterationBound bound = GetSolutionBoundaries(TrialSectionResult, TrialStrainDistribution); //make sure solution exists IteratedResult = FindPureMomentResult(CompressionFiberPosition, bound, ConvergenceToleranceStrain); RebarPointResult controllingBar = GetMaxSteelStrainPoint(TrialSectionResult.TensionRebarResults); Mn = IteratedResult.Moment; return(new ConcreteSectionFlexuralAnalysisResult(Mn, IteratedResult.StrainDistribution, controllingBar)); } catch (SectionAnalysisFailedToConvergeException) { throw new SectionFailedToConvergeException(); } } //if T=C else { IStrainCompatibilityAnalysisResult result = GetResult(TrialSectionResult); return(result); } }
public ConcreteSectionFlexuralAnalysisResult(double Moment, LinearStrainDistribution StrainDistribution, RebarPointResult controllingTensionBar) : base(Moment, StrainDistribution) { this.ControllingTensionBar = controllingTensionBar; }
public ConcreteSectionCompressionAnalysisResult(double Moment, LinearStrainDistribution StrainDistribution, RebarPointResult controllingTensionBar) : base(Moment, StrainDistribution, controllingTensionBar) { }