예제 #1
0
        double get_t()
        {
            double t = 0;
            ISectionRectangular rect = sectionSolid as ISectionRectangular;

            if (MomentAxis == Common.Entities.MomentAxis.XAxis)
            {
                if (rect != null)
                {
                    t = rect.B;
                }
            }
            else if (MomentAxis == Common.Entities.MomentAxis.YAxis)
            {
                if (rect != null)
                {
                    t = rect.H;
                }
            }
            else
            {
                throw new FlexuralBendingAxisException();
            }
            return(t);
        }
 public PlateProjectedFromBuiltUpIShape(ISteelMaterial Material, ISectionI SectionI,
                                        ISectionRectangular plate,
                                        FlexuralCompressionFiberPosition compressionFiberPosition)
     : base(Material, SectionI, compressionFiberPosition)
 {
     this.plate = plate;
 }
 public PlateProjectedFromBuiltUpIShape(ISteelMaterial Material, ISectionI SectionI,
     ISectionRectangular plate,
     FlexuralCompressionFiberPosition compressionFiberPosition)
     : base(Material, SectionI, compressionFiberPosition)
 {
     this.plate = plate;
 }
        public PlateProjectedFromRolledIShape(ISteelMaterial Material, ISectionRectangular s)
            :base(Material)
        {
            double bf = s.H;
            double tf=s.B;

            base.Overhang = bf;
            base.Thickness = tf;
        }
예제 #5
0
        public PlateProjectedFromRolledIShape(ISteelMaterial Material, ISectionRectangular s)
            : base(Material)
        {
            double bf = s.H;
            double tf = s.B;

            base.Overhang  = bf;
            base.Thickness = tf;
        }
예제 #6
0
        public override SteelLimitStateValue GetFlexuralLateralTorsionalBucklingStrength(double C_b, double L_b, FlexuralCompressionFiberPosition CompressionLocation,
                                                                                         FlexuralAndTorsionalBracingType BracingType)
        {
            SteelLimitStateValue ls = null;
            double b, h;

            if (sectionSolid is ISectionRound)
            {
                ls = new SteelLimitStateValue();
                ls.IsApplicable = false;
                ls.Value        = -1;
                return(ls);
            }
            else if (sectionSolid is ISectionRectangular)
            {
                ISectionRectangular recangularShape = sectionSolid as ISectionRectangular;

                if (MomentAxis == Common.Entities.MomentAxis.XAxis)
                {
                    b = recangularShape.B;
                    h = recangularShape.H;
                }
                else if (MomentAxis == Common.Entities.MomentAxis.YAxis)
                {
                    b = recangularShape.H;
                    h = recangularShape.B;
                }

                else
                {
                    throw new FlexuralBendingAxisException();
                }


                if (b >= h)
                {
                    ls.IsApplicable = false;
                    ls.Value        = -1;
                }
                else
                {
                    ls = GetLateralTorsionalBucklingStrength(L_b, C_b);
                }
            }
            else
            {
                throw new ShapeTypeNotSupportedException(" flexural calculation of solid-shape beam");
            }
            return(ls);
        }
예제 #7
0
        public override SteelLimitStateValue GetLimitingLengthForFullYielding_Lp(FlexuralCompressionFiberPosition CompressionLocation)
        {
            SteelLimitStateValue ls = new SteelLimitStateValue();

            if (this.Section.Shape is ISectionRectangular)
            {
                ISectionRectangular rectSection = this.Section.Shape as ISectionRectangular;
                double E  = this.Section.Material.ModulusOfElasticity;
                double Fy = this.Section.Material.YieldStress;
                double d  = rectSection.H;
                double t  = rectSection.B;
                double Lp = GetL_p();
                ls.IsApplicable = true; ls.Value = Lp;
            }
            else
            {
                ls.Value = double.PositiveInfinity; ls.IsApplicable = false;
            }
            return(ls);
        }
        private List <KodestructAci.RebarPoint> GetLongitudinalBars(ISectionRectangular shape, double h_total, double t_w,
                                                                    string RebarSizeId, double N_curtains, double s, double c_edge,
                                                                    BoundaryZone BoundaryZoneTop, BoundaryZone BoundaryZoneBottom, IRebarMaterial LongitudinalRebarMaterial)
        {
            List <KodestructAci.RebarPoint> BzTopBars    = GetBoundaryZoneBars(BoundaryZoneTop, LongitudinalRebarMaterial, new Point2D(0.0, shape.H / 2.0 - BoundaryZoneTop.h / 2.0), true);
            List <KodestructAci.RebarPoint> BzBottomBars = GetBoundaryZoneBars(BoundaryZoneBottom, LongitudinalRebarMaterial, new Point2D(0.0, BoundaryZoneTop.h / 2.0 - shape.H / 2.0), false);

            List <KodestructAci.RebarPoint> retBars = null;

            if (N_curtains != 0)
            {
                List <KodestructAci.RebarPoint> WallBars = GetWallBars(h_total, t_w, RebarSizeId, N_curtains, s,
                                                                       BoundaryZoneTop.h, BoundaryZoneBottom.h, c_edge, LongitudinalRebarMaterial);
                retBars = BzTopBars.Concat(BzBottomBars).Concat(WallBars).ToList();
            }
            else
            {
                retBars = BzTopBars.Concat(BzBottomBars).ToList();
            }

            return(retBars);
        }
 public SteelRectangleSection(ISectionRectangular Section, ISteelMaterial Material)
     : base(Material)
 {
     this.section = Section;
 }
예제 #10
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 }
            });
        }
예제 #11
0
 public SteelPlateSection(ISectionRectangular Section, ISteelMaterial Material)
     :base(Material)
 {
     this.section = Section;
 }
        public static Dictionary <string, object> HssToTransversePlateLocalCripplingAndYieldingStrengthOfHss(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                                             double theta, string HssTransversePlateType, 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;
                KodestructSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new KodestructSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new KodestructSection.SectionRectangular(rect.H, rect.B);
                }
                pl = new SteelPlateSection(rSect, mat);
            }

            TransversePlateType transvPlateType;
            bool IsValidTransvPlate = Enum.TryParse(HssTransversePlateType, true, out transvPlateType);

            if (IsValidTransvPlate == false)
            {
                throw new Exception("Failed to convert string. Transverse plate type must be TConnection or XConnection. Please check input");
            }

            //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);
                    ChsTransversePlate transversePlateChs = new ChsTransversePlate(sec, pl, log, IsTensionHss, P_uHss, M_uHss);

                    limitState             = transversePlateChs.GetLocalCripplingAndYieldingStrengthOfHss();
                    phiR_n                 = limitState.Value;
                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection    sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    RhsTransversePlate transversePlateRhs = new RhsTransversePlate(sec, pl, log, IsTensionHss, transvPlateType, P_uHss, M_uHss);

                    limitState             = transversePlateRhs.GetLocalCripplingAndYieldingStrengthOfHss();
                    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 }
            });
        }
예제 #13
0
        public double GetPureTorsionStressForClosedSection(ISection section, double T_u)
        {
            double tau;
            double b, h, t, J, R;

            if (section is ISolidShape)
            {
                if (section is ISectionRectangular)
                {
                    ISectionRectangular sr = section as ISectionRectangular;
                    J = sr.J;
                    R = Math.Min(sr.B, sr.H);
                }
                else if (section is ISectionRound)
                {
                    ISectionRound srou = section as ISectionRound;
                    J = srou.J;
                    R = srou.D / 2.0;
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
                tau = T_u * R / J;
            }
            else if (section is ISectionHollow)
            {
                if (section is ISectionTube || section is ISectionBox)
                {
                    if (section is ISectionBox)
                    {
                        ISectionBox sb = section as ISectionBox;
                        b = sb.B;
                        h = sb.H;
                        t = Math.Min(sb.t_f, sb.t_w);
                    }
                    else if (section is ISectionTube)
                    {
                        ISectionTube sT = section as ISectionTube;
                        b = sT.B;
                        h = sT.H;
                        t = sT.t_des;
                    }

                    else
                    {
                        throw new Exception("Section type is not applicable for closed section analysis");
                    }
                    tau = GetBoxShearStress(T_u, b, h, t);
                }
                else if (section is ISectionPipe)
                {
                    ISectionPipe pipe = section as ISectionPipe;
                    R   = pipe.D / 2.0;
                    J   = pipe.J;
                    tau = GetPipeStress(T_u, R, J);
                }
                else
                {
                    throw new Exception("Section type is not applicable for closed section analysis");
                }
            }
            else
            {
                throw new Exception("Section type is not applicable for closed section analysis");
            }
            return(tau);
        }
        public ISteelCompressionMember GetCompressionMember(ISection Shape, double L_ex, double L_ey, double L_ez, double F_y, double E, bool IsRolledShape = true)
        {
            string DEFAULT_EXCEPTION_STRING = "Selected shape is not supported. Select a different shape.";
            ISteelCompressionMember col     = null;
            CalcLog       log      = new CalcLog();
            SteelMaterial Material = new SteelMaterial(F_y, E);

            if (Shape == null)
            {
                return(new ColumnGeneral(null, L_ex, L_ey, L_ez));
            }

            if (Shape is ISectionI)
            {
                ISectionI     IShape        = Shape as ISectionI;
                SteelSectionI SectionI      = new SteelSectionI(IShape, Material);
                IShapeFactory IShapeFactory = new IShapeFactory();
                return(IShapeFactory.GetIshape(SectionI, IsRolledShape, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionChannel)
            {
                ISectionChannel     ChannelShape   = Shape as ISectionChannel;
                SteelChannelSection ChannelSection = new SteelChannelSection(ChannelShape, Material);
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }


            else if (Shape is ISectionPipe)
            {
                ISectionPipe     SectionPipe = Shape as ISectionPipe;
                SteelPipeSection PipeSection = new SteelPipeSection(SectionPipe, Material);
                ChsShapeFactory  ChsFactory  = new ChsShapeFactory();
                return(ChsFactory.GetChsShape(PipeSection, L_ex, L_ey, L_ez, log));
            }

            else if (Shape is ISectionTube)
            {
                ISectionTube    TubeShape       = Shape as ISectionTube;
                SteelRhsSection RectHSS_Section = new SteelRhsSection(TubeShape, Material);
                RhsShapeFactory RhsFactory      = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(RectHSS_Section, L_ex, L_ey, L_ez));
            }


            else if (Shape is ISectionBox)
            {
                ISectionBox     BoxShape   = Shape as ISectionBox;
                SteelBoxSection BoxSection = new SteelBoxSection(BoxShape, Material);

                RhsShapeFactory RhsFactory = new RhsShapeFactory();
                return(RhsFactory.GetRhsShape(BoxSection, L_ex, L_ey, L_ez));
            }

            else if (Shape is ISectionRectangular || Shape is ISectionRound)
            {
                ISteelSection solidSec;
                if (Shape is ISectionRectangular)
                {
                    ISectionRectangular RectangleShape = Shape as ISectionRectangular;
                    solidSec = new SteelRectangleSection(RectangleShape, Material);
                }
                else
                {
                    ISectionRound rnd = Shape as ISectionRound;
                    solidSec = new SteelRoundSection(rnd, Material);
                }


                CompressionMemberRectangle SolidShapeSection = new CompressionMemberRectangle(solidSec, L_ex, L_ey, L_ez);
                return(SolidShapeSection);
            }

            else if (Shape is ISectionTee)
            {
                ISectionTee     TeeShape   = Shape as ISectionTee;
                SteelTeeSection TeeSection = new SteelTeeSection(TeeShape, Material);


                IShapeCompactness compactnessTee = new ShapeCompactness.TeeMember(TeeSection);
                CompactnessClassAxialCompression flangeCompactness = compactnessTee.GetFlangeCompactnessCompression();
                CompactnessClassAxialCompression stemCompactness   = compactnessTee.GetWebCompactnessCompression();

                if (flangeCompactness == CompactnessClassAxialCompression.NonSlender && stemCompactness == CompactnessClassAxialCompression.NonSlender)
                {
                    return(new ColumnTee(TeeSection, IsRolledShape, L_ex, L_ey, L_ez));
                }
                else
                {
                    throw new Exception(DEFAULT_EXCEPTION_STRING);
                }
            }

            else
            {
                throw new Exception(DEFAULT_EXCEPTION_STRING);
            }
        }
        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 }
            });
        }
예제 #16
0
        public static Dictionary <string, object> HssToLongitudinalPlateWallPlastification(CustomProfile HssSection, CustomProfile PlateSection,
                                                                                           double F_y, double F_yp, double P_uHss, double M_uHss, double theta = 90.0, bool IsTensionHss = false, bool IsThroughPlate = false)
        {
            //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;
                KodestructSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new KodestructSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new KodestructSection.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, theta, P_uHss, M_uHss);

                    limitState = longitudinalPlateChs.GetHssWallPlastificationStrengthUnderAxialLoad();
                    if (IsThroughPlate == false)
                    {
                        phiR_n = limitState.Value;
                    }
                    else
                    {
                        phiR_n = 2.0 * limitState.Value; //analogous to Rectangular HSS provsions
                    }

                    IsApplicableLimitState = limitState.IsApplicable;
                }
                else if (HssSection.Section is ISectionTube)
                {
                    SteelRhsSection sec = new SteelRhsSection(HssSection.Section as ISectionTube, mat);
                    if (IsThroughPlate == false)
                    {
                        RhsLongitudinalPlate longitudinalPlateRhs = new RhsLongitudinalPlate(sec, pl, log, IsTensionHss, theta, P_uHss, M_uHss);

                        limitState             = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        phiR_n                 = limitState.Value;
                        IsApplicableLimitState = limitState.IsApplicable;
                    }
                    else
                    {
                        RhsLongitudinalThroughPlate longitudinalPlateRhs = new RhsLongitudinalThroughPlate(sec, pl, log, IsTensionHss, theta, P_uHss, M_uHss);

                        limitState             = longitudinalPlateRhs.GetHssWallPlastificationStrengthUnderAxialLoad();
                        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 }
            });
        }