private LinearStrainDistribution GetStrainMaxTensionMaxCompression(FlexuralCompressionFiberPosition CompressionFiberPosition) { //Calulate limit strain for the lowest rebar point //Distinguish between top and bottom tension cases double StrainDistributionHeight = 0.0; //double MaxStrain = CalculateMaximumSteelStrain(CompressionFiberPosition); double MaxStrain = this.MaxSteelStrain; LinearStrainDistribution MaxMaxDistribution; StrainDistributionHeight = GetStrainDistributionHeight(CompressionFiberPosition); if (CompressionFiberPosition == FlexuralCompressionFiberPosition.Top) { var LowestPointY = LongitudinalBars.Min(yVal => yVal.Coordinate.Y); var PointsAtLowestY = LongitudinalBars.Where(point => point.Coordinate.Y == LowestPointY).Select(point => point); var LimitStrain = PointsAtLowestY.Min(point => point.Rebar.Material.GetUltimateStrain(point.Rebar.Diameter)); MaxStrain = LimitStrain; MaxMaxDistribution = new LinearStrainDistribution (StrainDistributionHeight, this.MaxConcreteStrain, -MaxStrain); } else { var HighestPointY = LongitudinalBars.Max(yVal => yVal.Coordinate.Y); var PointsAtHighestY = LongitudinalBars.Where(point => point.Coordinate.Y == HighestPointY).Select(point => point); var LimitStrain = PointsAtHighestY.Min(point => point.Rebar.Material.GetUltimateStrain(point.Rebar.Diameter)); MaxStrain = LimitStrain; MaxMaxDistribution = new LinearStrainDistribution (StrainDistributionHeight, -MaxStrain, this.MaxConcreteStrain); } return(MaxMaxDistribution); }
private double GetStrainHeight() { double YMax = 0; double YMin = 0; if (currentCompressionFiberPosition == FlexuralCompressionFiberPosition.Top) { YMax = this.Section.SliceableShape.YMax; YMin = LongitudinalBars.Min(b => b.Coordinate.Y); } else { YMax = this.Section.SliceableShape.YMin; YMin = LongitudinalBars.Max(b => b.Coordinate.Y); } return(YMax - YMin); }
protected virtual double CalculateMaximumSteelStrain(FlexuralCompressionFiberPosition CompressionFiberPosition) { double MaxStrain = 0.0; if (CompressionFiberPosition == FlexuralCompressionFiberPosition.Top) { var LowestPointY = LongitudinalBars.Min(yVal => yVal.Coordinate.Y); var PointsAtLowestY = LongitudinalBars.Where(point => point.Coordinate.Y == LowestPointY).Select(point => point); var LimitStrain = PointsAtLowestY.Min(point => point.Rebar.Material.GetUltimateStrain(point.Rebar.Diameter)); MaxStrain = -LimitStrain; } else { var HighestPointY = LongitudinalBars.Max(yVal => yVal.Coordinate.Y); var PointsAtHighestY = LongitudinalBars.Where(point => point.Coordinate.Y == HighestPointY).Select(point => point); var LimitStrain = PointsAtHighestY.Min(point => point.Rebar.Material.GetUltimateStrain(point.Rebar.Diameter)); MaxStrain = -LimitStrain; } return(MaxStrain); }
protected double GetStrainDistributionHeight(FlexuralCompressionFiberPosition CompressionFiberPosition) { double StrainDistributionHeight = 0.0; double YMax = Section.SliceableShape.YMax; double YMin = Section.SliceableShape.YMin; double XMax = Section.SliceableShape.XMax; double XMin = Section.SliceableShape.XMin; if (CompressionFiberPosition == FlexuralCompressionFiberPosition.Top) { var LowestPointY = LongitudinalBars.Min(yVal => yVal.Coordinate.Y); var PointsAtLowestY = LongitudinalBars.Where(point => point.Coordinate.Y == LowestPointY).Select(point => point); StrainDistributionHeight = Math.Abs(YMax - LowestPointY); } else { var HighestPointY = LongitudinalBars.Max(yVal => yVal.Coordinate.Y); var PointsAtHighestY = LongitudinalBars.Where(point => point.Coordinate.Y == HighestPointY).Select(point => point); StrainDistributionHeight = Math.Abs(YMin - HighestPointY); } return(StrainDistributionHeight); }