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);
        }
Ejemplo n.º 2
0
        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);
        }