Пример #1
0
        public List <IMoveableSection> GetTransformedRebarShapes(double YMax, double YMin)
        {
            List <IMoveableSection> barSections = new List <IMoveableSection>();
            double E_c = this.Section.Material.ModulusOfElasticity;
            double E_s = 29000000.0; //Steel modulus of elasticity
            double n   = E_s / E_c;

            List <RebarPoint> filteredBars = LongitudinalBars.Where
                                             (
                b =>

                b.Coordinate.Y >= YMin && b.Coordinate.Y <= YMax

                                             ).ToList();

            foreach (RebarPoint rbrPnt in filteredBars)
            {
                double A_bar = rbrPnt.Rebar.Area * n;
                double d_bar = rbrPnt.Rebar.Diameter;
                if (d_bar == 0)
                {
                    d_bar = (YMax - YMin) / 100.0;
                }
                Point2D thisCentroid = new Point2D(rbrPnt.Coordinate.X, rbrPnt.Coordinate.Y);

                SectionRectangular rect = new SectionRectangular(null, A_bar / d_bar, d_bar, thisCentroid);
                //rect.Centroid = new Point2D(rbrPnt.Coordinate.X, rbrPnt.Coordinate.Y);
                barSections.Add(rect);
            }

            return(barSections);
        }
Пример #2
0
        public AffectedElementInCompression(double F_y, double b, double t)
        {
            SteelMaterial      material = new SteelMaterial(F_y, double.PositiveInfinity, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
            SectionRectangular section  = new SectionRectangular(b, t);

            Section = new SteelPlateSection(section, material);
        }
        public void SectionRectangleReturnsCentroid()
        {
            SectionRectangular sr = new SectionRectangular(3, 2);

            sr.Centroid = new Mathematics.Point2D(0, 3);
            Assert.AreEqual(3, sr.GetElasticCentroidCoordinate().Y);
        }
Пример #4
0
        protected double GetFcrGeneral()
        {
            SectionRectangular r   = new SectionRectangular(t_w, h_o);
            SteelMaterial      mat = new SteelMaterial(Material.YieldStress);
            CalcLog            log = new CalcLog();

            AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log);

            return(flexuralElement.GetPlateBucklingCriticalStress(c));

            #region Obsolete
            //double lambda = GetLambda();
            //double F_y = Material.YieldStress;

            //double Q;
            //if (lambda<=0.7)
            //{
            //    Q = 1.0;
            //}
            //else if (lambda<=1.41)
            //{
            //    Q = (1.34 - 0.468 * lambda);
            //}
            //else
            //{
            //    Q = ((1.3) / (Math.Pow(lambda, 2)));
            //}
            //double F_cr = F_y * Q;
            //return F_cr;
            #endregion
        }
 /// <summary>
 ///
 /// </summary>
 /// <param name="RectangularShape">Rectangular shape</param>
 /// <param name="c_transv_ins">Cover to inside face of transverse reinforcement</param>
 public TorsionSectionRectangularNonPrestressed(SectionRectangular RectangularShape,
                                                IConcreteMaterial Material, double c_transv_ins)
 {
     this.RectangularShape = RectangularShape;
     this.c_transv_ins     = c_transv_ins;
     this.IsPrestressed    = IsPrestressed;
     this.Material         = Material;
 }
Пример #6
0
 public AffectedElementInFlexure(SectionRectangular Section, ISteelMaterial Material, ICalcLog CalcLog, bool IsRolled = false)
     : base(Section, Material, CalcLog)
 {
     this.HasHolesInTensionFlange = false;
     this.A_fg     = 0;
     this.A_fn     = 0;
     this.IsRolled = IsRolled;
 }
Пример #7
0
        protected double GetFcrGeneral()
        {
            SectionRectangular r   = new SectionRectangular(t_w, h_o);
            SteelMaterial      mat = new SteelMaterial(Material.YieldStress);
            CalcLog            log = new CalcLog();


            throw new NotImplementedException();
        }
        public void SectionRectangleReturnsPlasticMomentOfArea()
        {
            SectionRectangular sr              = new SectionRectangular(0.5, 8);
            double             Z               = sr.Z_x;
            double             refVal          = 8.0;
            double             actualTolerance = EvaluateActualTolerance(Z, refVal);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void SectionRectangleReturnsFirstMomentOfArea()
        {
            SectionRectangular sr              = new SectionRectangular(3, 4);
            double             Q               = sr.GetFirstMomentOfAreaX(1);
            double             refVal          = 1.0 * 3.0 * 1.5;
            double             actualTolerance = EvaluateActualTolerance(Q, refVal);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        private void CreateBeam()
        {
            FlexuralMemberFactory factory = new FlexuralMemberFactory();

            ISection      section = new SectionRectangular(0.5, 30.0);
            SteelMaterial mat     = new SteelMaterial(36.0, 29000);

            beam = factory.GetBeam(section, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top);
        }
        public double GetExtendedSinglePlateFlexuralBucklingStrength(double F_y, double t_pl, double d_pl, double L_pl)
        {
            SectionRectangular r   = new SectionRectangular(t_pl, d_pl);
            SteelMaterial      mat = new SteelMaterial(F_y);
            CalcLog            log = new CalcLog();

            AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log);

            return(flexuralElement.GetPlateFlexuralBucklingStrength(L_pl));
        }
Пример #12
0
        public void ConnectedPlateReturnsFlexuralStrength()
        {
            ICalcLog                 log      = new  CalcLog();
            SectionRectangular       Section  = new SectionRectangular(0.5, 8);
            ISteelMaterial           Material = new SteelMaterial(50);
            AffectedElementInFlexure element  = new AffectedElementInFlexure(Section, Material, log);
            double phiM_n = element.GetFlexuralStrength();

            Assert.AreEqual(360.0, phiM_n);
        }
        public void ConnectedPlateReturnsFlexuralStrength()
        {
            ICalcLog                 log        = new  CalcLog();
            SectionRectangular       Section    = new SectionRectangular(0.5, 8);
            SectionOfPlateWithHoles  NetSection = new SectionOfPlateWithHoles("", 0.5, 8, 2, 0.01, 2, 2, new Common.Mathematics.Point2D(0, 0));
            AffectedElementInFlexure element    = new AffectedElementInFlexure(Section, NetSection, 50, 65.0);

            double phiM_n = element.GetFlexuralStrength(0);

            Assert.True(360.0 == phiM_n);
        }
Пример #14
0
        public double GetPlateFlexuralBucklingStrength(double L_plate)
        {
            SectionRectangular r = Section.Shape as SectionRectangular;

            if (r == null)
            {
                throw new Exception("Plate buckling stress not calculated. Need SectionRectangular as Section property ");
            }
            double S    = Math.Min(r.S_xBot, r.S_xTop);
            double F_cr = GetPlateBucklingCriticalStress(L_plate);

            return(0.9 * S * F_cr);
        }
Пример #15
0
        public double GetFlexuralStrength()
        {
            double phiM_n = 0.0;

            CalcLog  log     = new CalcLog();
            ISection section = Section.Shape;

            if (section is SectionRectangular || section is SectionOfPlateWithHoles || section is SectionI)
            {
                if (section is SectionOfPlateWithHoles)
                {
                    SectionOfPlateWithHoles plateWithHoles = section as SectionOfPlateWithHoles;
                    double S_g   = plateWithHoles.B * Math.Pow(plateWithHoles.H, 2);
                    double Z_net = plateWithHoles.Z_x;
                    double Y     = 0.9 * this.Section.Material.YieldStress * S_g; //Flexural Yielding
                    double R     = 0.75 * this.Section.Material.UltimateStress * Z_net;
                    phiM_n = Math.Min(Y, R);
                }
                else if (section is ISectionI)
                {
                    ISectionI IShape = section as ISectionI;
                    double    R      = GetTensionFlangeRuptureStrength(IShape);
                    if (IsCompactDoublySymmetricForFlexure == false)
                    {
                        throw new Exception("Noncompact and singly symmetric I-shapes are not supported for connection checks.");
                    }
                    else
                    {
                        BeamIDoublySymmetricCompact IBeam = new BeamIDoublySymmetricCompact(Section, this.IsRolled, Log);
                        double Y = 0.9 * IBeam.GetMajorNominalPlasticMoment();
                        phiM_n = Math.Min(Y, R);
                    }
                }
                else //Rectangle
                {
                    SectionRectangular plate = section as SectionRectangular;
                    if (plate != null)
                    {
                        double Z = plate.Z_x;
                        double Y = 0.9 * this.Section.Material.YieldStress * Z;
                        phiM_n = Y;
                    }
                }
            }
            else
            {
                throw new Exception("Wrong section type. Only SectionRectangular, SectionOfPlateWithHoles and SectionI are supported.");
            }

            return(phiM_n);
        }
Пример #16
0
 public IConcreteTorsionalShape GetShape(ISection Shape, IConcreteMaterial Material, double c_transv_ctr)
 {
     if (Shape is ISectionRectangular)
     {
         SectionRectangular RectangularShape = Shape as SectionRectangular;
         return(new TorsionSectionRectangularNonPrestressed(RectangularShape, Material, c_transv_ctr));
     }
     else if (Shape is TorsionSectionGeneric)
     {
         return(Shape as TorsionSectionGeneric);
     }
     else
     {
         throw new Exception("Shape type not supported for torsional analysis.");
     }
 }
        public void ExtendedPlateBucklingFlexuralStrength()
        {
            double             phiR_n;
            double             h_o = 9.0;
            double             t_w = 0.5;
            SectionRectangular r   = new SectionRectangular(t_w, h_o);
            SteelMaterial      mat = new SteelMaterial(36);
            CalcLog            log = new CalcLog();

            AffectedElementInFlexure flexuralElement = new AffectedElementInFlexure(r, mat, log);
            double lambda   = flexuralElement.GetLambda(10);
            double refValue = 0.408;

            double actualTolerance = EvaluateActualTolerance(lambda, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
Пример #18
0
        public double GetLambda(double L_plate)
        {
            SectionRectangular r = Section.Shape as SectionRectangular;

            if (r == null)
            {
                throw new Exception("Plate buckling stress not calculated. Need SectionRectangular as Section property ");
            }

            double h_o = r.H;
            double t_w = r.B;

            double F_y   = this.Section.Material.YieldStress;
            double lamda = ((h_o * Math.Sqrt(F_y)) / (10 * t_w * Math.Sqrt(475 + 280 * Math.Pow((((h_o) / (L_plate))), 2))));

            return(lamda);
        }
Пример #19
0
        public void RectangleShapeReturnsYieldStrength()
        {
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            SectionRectangular    r       = new SectionRectangular(0.5, 12.0);


            SteelMaterial     mat    = new SteelMaterial(50.0, 29000);
            ISteelBeamFlexure beam12 = factory.GetBeam(r, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top);

            SteelLimitStateValue Y =
                beam12.GetFlexuralYieldingStrength(FlexuralCompressionFiberPosition.Top);
            double phiM_n          = Y.Value;
            double refValue        = 67.5;
            double actualTolerance = EvaluateActualTolerance(phiM_n, refValue);


            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void HssRhsConcentratedForceLongitudinalPlateReturnsValue()
        {
            SectionTube     ch      = new SectionTube(null, 8, 8, 0.25, 0.93 * 0.25, 1.5 * 0.25);
            SteelMaterial   matE    = new SteelMaterial(46.0, 65, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec  = new SectionRectangular(0.25, 8.0);
            SteelMaterial      matR = new SteelMaterial(36.0);
            SteelPlateSection  pl   = new SteelPlateSection(rec, matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalPlate concForceConnection = new RhsLongitudinalPlate(Element, pl, log, false, 45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssMaximumPlateThicknessForShearLoad().Value;

            //double refValueSec = 46.2;
            //double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);
            //Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
        public void HssRhsConcentratedForceThroughPlateReturnsValue()
        {
            SectionTube     ch      = new SectionTube(null, 8, 8, 0.25, 0.93 * 0.25, 1.5 * 0.25);
            SteelMaterial   matE    = new SteelMaterial(46.0);
            SteelRhsSection Element = new SteelRhsSection(ch, matE);

            SectionRectangular rec  = new SectionRectangular(0.25, 8.0);
            SteelMaterial      matR = new SteelMaterial(36.0);
            SteelPlateSection  pl   = new SteelPlateSection(rec, matR);

            CalcLog log = new CalcLog();

            RhsLongitudinalThroughPlate concForceConnection = new RhsLongitudinalThroughPlate(Element, pl, log, false, 45.0, 148.0, 0.0);
            double phiR_n = concForceConnection.GetHssWallPlastificationStrengthUnderAxialLoad().Value;

            double refValueSec        = 46.2;
            double actualToleranceSec = EvaluateActualTolerance(phiR_n, refValueSec);

            Assert.True(actualToleranceSec <= tolerance);
        }
Пример #22
0
 public CrossSectionRectangularShape(IConcreteMaterial Material, string Name, double Width, double Height)
 {
     this.material = Material;
     shape         = new SectionRectangular(Name, Width, Height, new Point2D(0, 0));
 }
Пример #23
0
        public static Dictionary <string, object> HssCapPlateLocalYieldingOrCripplingOfHss(CustomProfile HssSection, CustomProfile PlateSection, double t_pCap, double F_y, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double phiR_n = 0;
            bool   IsApplicableLimitState = false;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double             t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection sec    = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsCapPlate     capRhs = new ChsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = capRhs.GetHssYieldingOrCrippling();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec    = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsCapPlate     capRhs = new RhsCapPlate(sec, pl, t_pCap, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = capRhs.GetHssYieldingOrCrippling();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }



            return(new Dictionary <string, object>
            {
                { "phiR_n", phiR_n }
                , { "IsApplicableLimitState", IsApplicableLimitState }
            });
        }
Пример #24
0
        //public override ISection Clone()
        //{
        //    throw new NotImplementedException();
        //}

        public ISliceableSection GetSliceableShape()
        {
            SectionRectangular r = new SectionRectangular(this.B, this.H);

            return(r);
        }
Пример #25
0
 private void GetCopeSection()
 {
     _rectangle = new SectionRectangular(this.Section.t_w, this.h_o);
 }
        public static Dictionary <string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                                      double F_y, double F_u, double F_yp, bool IsTensionHss, double P_uHss, double M_uHss)
        {
            //Default values
            double t_max = 0;


            //Calculation logic:
            CalcLog log = new CalcLog();
            SteelLimitStateValue limitState = null;

            //PLATE

            SteelPlateSection pl = null;

            if (!(PlateSection.Section is ISectionRectangular))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial       mat = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
                ISectionRectangular rect = PlateSection.Section as ISectionRectangular;
                double             t_pl, b_pl = 0.0;
                SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }


            //HSS

            if (!(HssSection.Section is ISectionHollow))
            {
                throw new Exception("Failed to convert section. Section needs to be either a Pipe or a Tube. Please check input.");
            }
            else
            {
                SteelMaterial mat = new SteelMaterial(F_y);
                if (HssSection.Section is ISectionPipe)
                {
                    SteelChsSection      sec = new SteelChsSection(HssSection.Section as ISectionPipe, mat);
                    ChsLongitudinalPlate longitudinalPlateChs = new ChsLongitudinalPlate(sec, pl, log, IsTensionHss, 90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateChs.ge
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateChs.GetHssMaximumPlateThicknessForShearLoad().Value;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection      sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl, log, IsTensionHss, 90.0, P_uHss, M_uHss);

                    //limitState = longitudinalPlateRhs.GetHssYieldingOrCrippling();
                    //phiR_n = limitState.Value;
                    //IsApplicableLimitState = limitState.IsApplicable;
                    t_max = longitudinalPlateRhs.GetHssMaximumPlateThicknessForShearLoad().Value;
                }
                else
                {
                    throw new Exception("Unsupported type of hollow section. Please use Tube or Pipe.");
                }
            }

            return(new Dictionary <string, object>
            {
                { "t_max", t_max }
            });
        }
Пример #27
0
        private CompoundShape GetRectangularShape()
        {
            SectionRectangular rect = new SectionRectangular(12, 12);

            return(rect);
        }