public IStrainCompatibilityAnalysisResult GetNominalFlexuralCapacity (FlexuralCompressionFiberPosition 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); } }
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) { RebarPointResult maxStrainPoint = null; double MaxSteelStrain = double.NegativeInfinity; foreach (var bar in rebarResult) { if (bar.Strain >= MaxSteelStrain) { maxStrainPoint = bar; } } return(maxStrainPoint); }
public ConcreteSectionFlexuralAnalysisResult(double Moment, LinearStrainDistribution StrainDistribution, RebarPointResult controllingTensionBar): base(Moment,StrainDistribution) { this.ControllingTensionBar = controllingTensionBar; }
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) { }
public ConcreteSectionCompressionAnalysisResult(double Moment, LinearStrainDistribution StrainDistribution, RebarPointResult controllingTensionBar) : base(Moment, StrainDistribution, controllingTensionBar) { }