Exemplo n.º 1
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
        }
Exemplo n.º 2
0
        public IShearMember GetShearMemberNonCircular(ShearNonCircularCase ShearCase, double h, double t_w, double a, double F_y,double E)
        {
            ISteelMaterial material = new SteelMaterial(F_y,E);
            IShearMember member =null;
            bool IsTeeShape;


            switch (ShearCase)
            {
                case ShearNonCircularCase.MemberWithStiffeners:
                     IsTeeShape =false;
                     member = new ShearMemberWithStiffeners(h, t_w, a, material, IsTeeShape);
                    break;
                case ShearNonCircularCase.Tee:
                    IsTeeShape = true;
                    member = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape);
                    break;
                case ShearNonCircularCase.Box:
                    member = new ShearMemberBox(h, t_w, material);
                    break;
                default:
                    IsTeeShape = false;
                    member = new ShearMemberWithoutStiffeners(h, t_w, material, IsTeeShape);
                    break;
            }
            return member;
        }
Exemplo n.º 3
0
        public void HssOverlappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 0.5, 0.465);
            SteelMaterial mat = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube mainBranch = new SectionTube(null, 6, 4, 5.0 / 16.0, 0.291);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube secBranch = new SectionTube(null, 5, 3, 1.0 / 4.0, 0.233);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);

            double O_v = 0.533;

            IHssTrussBranchConnection con = new RhsTrussOverlappedConnection(Chord, MainBranch, 45, 
                SecondaryBranch, 45,
                AxialForceType.Compression, AxialForceType.Tension, false, 0, 0, O_v
                );

            double phiP_nMain = con.GetBranchYieldingFromUnevenLoadDistributionStrength(true).Value;
            double refValueMain = 236; 
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);
            Assert.LessOrEqual(actualToleranceMain, tolerance);

            double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec = 151;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
Exemplo n.º 4
0
        public void HssGappedKConnectionReturnsYieldingOfBranchesFromUnevenDistributionValue()
        {
            SectionTube ch = new SectionTube(null, 12, 12, 0.625, 0.581);
            SteelMaterial mat = new SteelMaterial(46.0);
            SteelRhsSection Chord = new SteelRhsSection(ch, mat);

            SectionTube mainBranch = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection MainBranch = new SteelRhsSection(mainBranch, mat);

            SectionTube secBranch = new SectionTube(null, 8, 8, 0.375, 0.349);
            SteelRhsSection SecondaryBranch = new SteelRhsSection(secBranch, mat);


            IHssTrussBranchConnection con = new RhsTrussGappedKConnection(Chord, MainBranch, 45,
                SecondaryBranch, 45,
                AxialForceType.Compression, AxialForceType.Tension, false, 430, 0
                );
            //Note: not clear in the design guide why moment is ignored in chord utilization calculation
            double phiP_nMain = con.GetChordWallPlastificationStrength(true).Value;
            double refValueMain = 415;
            double actualToleranceMain = EvaluateActualTolerance(phiP_nMain, refValueMain);
            Assert.LessOrEqual(actualToleranceMain, tolerance);

            double phiP_nSec = con.GetBranchYieldingFromUnevenLoadDistributionStrength(false).Value;
            double refValueSec = 415;
            double actualToleranceSec = EvaluateActualTolerance(phiP_nSec, refValueSec);
            Assert.LessOrEqual(actualToleranceSec, tolerance);
        }
Exemplo n.º 5
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);
 }
Exemplo n.º 6
0
        private void CreateBeam()
        {
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection section = AiscShapeFactory.GetShape("HSS8X6X.500", ShapeTypeSteel.RectangularHSS);
            SteelMaterial mat = new SteelMaterial(46.0,29000);
            beam = factory.GetBeam(section,mat,null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top);

        }
        private void CreateBeam()
        {
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection section = AiscShapeFactory.GetShape("W18X35", ShapeTypeSteel.IShapeRolled);
            SteelMaterial mat = new SteelMaterial(50.0,29000);
            beam = factory.GetBeam(section,mat,null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top);

        }
        private void CreateColumn(double L_ex, double L_ey, double L_ez = 0, string Shape = "W14X82")
        {
            CompressionMemberFactory factory = new CompressionMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection section = AiscShapeFactory.GetShape(Shape, ShapeTypeSteel.IShapeRolled);
            SteelMaterial mat = new SteelMaterial(50.0,29000);
            L_ez = L_ez == 0? L_ex : L_ez;
            column = factory.GetCompressionMember(section,mat, L_ex, L_ey, L_ez);

        }
Exemplo n.º 9
0
        private void CreateColumn(double L_ex, double L_ey, double L_ez=0)
        {
            CompressionMemberFactory factory = new CompressionMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection section = AiscShapeFactory.GetShape("HSS8X6X.500", ShapeTypeSteel.RectangularHSS);
            SteelMaterial mat = new SteelMaterial(46.0,29000);
            L_ez = L_ez == 0? L_ex : L_ez;
            column = factory.GetCompressionMember(section,mat, L_ex, L_ey, L_ez);

        }
Exemplo n.º 10
0
 public AffectedElementInFlexure(ISection section, double F_y, double F_u, bool HasHolesInTensionFlange, double A_fg, double A_fn, bool IsCompactDoublySymmetricForFlexure,  bool IsRolled=false)
     : base(F_y, F_u)
 {
     SteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
     this.Section = new SteelGeneralSection(section, material);
     this.A_fg = A_fg;
     this.A_fn = A_fn;
     this.HasHolesInTensionFlange = HasHolesInTensionFlange;
     this.IsCompactDoublySymmetricForFlexure = IsCompactDoublySymmetricForFlexure;
     this.IsRolled=IsRolled;
 }
        public void DoublySymmetricIReturnsFlexuralLateralTorsionalBucklingStrengthInelasticW12 ()
        {
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection section = AiscShapeFactory.GetShape("W12X26", ShapeTypeSteel.IShapeRolled);
            SteelMaterial mat = new SteelMaterial(50.0, 29000);
            ISteelBeamFlexure beam12 = factory.GetBeam(section, mat, null, MomentAxis.XAxis, FlexuralCompressionFiberPosition.Top);

            SteelLimitStateValue LTB =
            beam12.GetFlexuralLateralTorsionalBucklingStrength(1.0, 19 * 12, FlexuralCompressionFiberPosition.Top, Steel.AISC.FlexuralAndTorsionalBracingType.NoLateralBracing);
            double phiM_n = LTB.Value;
            double refValue = 60*12; // from AISC Steel Manual Table 3-10
            double actualTolerance = EvaluateActualTolerance(phiM_n, refValue);

            Assert.LessOrEqual(actualTolerance, 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.LessOrEqual(actualToleranceSec, tolerance);
        }
Exemplo n.º 13
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);
        }
Exemplo n.º 14
0
        public void IShapeReturnsYieldStrength()
        {

            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISection r = AiscShapeFactory.GetShape("W18X35");


            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 = 249 * 12; // from AISC Steel Manual Table 3-2
            double actualTolerance = EvaluateActualTolerance(phiM_n, refValue);


            Assert.LessOrEqual(actualTolerance, tolerance);
        }
Exemplo n.º 15
0
        public IBeamCope GetCope(BeamCopeCase BeamCopeCase, double d, double b_f, double t_f, double t_w, double d_c, double c, double F_y, double F_u)
       {
           ISteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
           ISectionI section = new SectionI(null, d, b_f, t_f, t_w);
           IBeamCope cope=null;
           switch (BeamCopeCase)
           {
               case BeamCopeCase.Uncoped:
                   cope = new BeamUncoped(section, material);
                   break;
               case BeamCopeCase.CopedTopFlange:
                   cope = new BeamCopeSingle(c, d_c, section, material);
                   break;
               case BeamCopeCase.CopedBothFlanges:
                   cope = new BeamCopeDouble(c, d_c, section, material);
                   break;
           }
           return cope;

       }
        public static Dictionary<string, object> ConnectedElementStrengthInFlexure(CustomProfile Shape,
            double L_b, double F_y, double F_u, bool HasHolesInTensionFlange = false, double A_fg = 0, double A_fn = 0, bool IsCompactDoublySymmetricForFlexure = true, double C_b = 1,
            string Code = "AISC360-10")
        {
            //Default values
            double phiM_n = 0;


            //Calculation logic:
            ICalcLog log = new CalcLog();
            ISection Isec = Shape.Section as ISection;
            ISteelMaterial Material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
            AffectedElementInFlexure element = new AffectedElementInFlexure(Isec, F_y, F_u, HasHolesInTensionFlange, A_fg, A_fn, IsCompactDoublySymmetricForFlexure);
            phiM_n = element.GetFlexuralStrength();

            return new Dictionary<string, object>
            {
                { "phiM_n", phiM_n }
 
            };
        }
Exemplo n.º 17
0
 public IShearMember GetShearMemberCircular(double D, double t_nom, bool Is_SAW_member, double L_v, double F_y, double E)
 {
     ISteelMaterial material = new SteelMaterial(F_y,E);
     ShearMemberCircular member = new ShearMemberCircular(D, t_nom, Is_SAW_member, L_v, material);
     return member;
 }
Exemplo n.º 18
0
        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 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, log);
 
            }


            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, log);
 
            }


            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, log);
 
            }

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


        }
Exemplo n.º 19
0
        public void FactoryReturnsChannel()
        {

            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            AiscShapeFactory AiscShapeFactory = new AiscShapeFactory();
            ISectionChannel r = new SectionChannel("", 12.0, 6, 0.4, 0.25);


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

            Assert.IsTrue(true);
        }
Exemplo n.º 20
0
        private void CreateElements()
        {
            SectionTube ch = new SectionTube(null, 8, 8, 1 / 4.0, 0.93 * (1.0 / 4.0), 0.35);
            SteelMaterial mat = new SteelMaterial(46.0);
            Chord = new SteelRhsSection(ch, mat);

            SectionTube br = new SectionTube(null, 6, 8, 3.0 / 8.0, 0.93 * (3.0 / 8.0), 0.35);
            Branch = new SteelRhsSection(br, mat);
        }
Exemplo n.º 21
0
 public AffectedElementInShear(double F_y, double F_u): base(F_y,F_u)
 {
     SteelMaterial mat = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity,
         SteelConstants.ShearModulus);
    
 }
        public static Dictionary<string, object> FlexuralLateralTorsionalBuckling(CustomProfile Shape,string BendingAxis,string FlexuralCompressionLocation,double F_y,
            double L_b, double C_b = 1.0, string FlexuralBracingCase = "NoLateralBracing", double E = 29000, bool IsRolledMember = true, string Code = "AISC360-10")
        {
            //Default values
            double phiM_n = 0;
            bool IsApplicableLimitState = false;


            //Calculation logic:

            MomentAxis Axis;

            bool IsValidStringAxis = Enum.TryParse(BendingAxis, true, out Axis);
            if (IsValidStringAxis == false)
            {
                throw new Exception("Axis selection not recognized. Check input string.");
            }

            FlexuralCompressionFiberPosition FlexuralCompression;
            //Calculation logic:
            bool IsValidStringCompressionLoc = Enum.TryParse(FlexuralCompressionLocation, true, out FlexuralCompression);
            if (IsValidStringCompressionLoc == false)
            {
                throw new Exception("Flexural compression location selection not recognized. Check input string.");
            }

            FlexuralAndTorsionalBracingType Bracing;
            //Calculation logic:
            bool IsValidStringBracing = Enum.TryParse(FlexuralBracingCase, true, out Bracing);
            if (IsValidStringBracing == false)
            {
                throw new Exception("Flexural bracing case selection not recognized. Check input string.");
            }


            SteelMaterial mat = new SteelMaterial(F_y, E);
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            ISteelBeamFlexure beam = factory.GetBeam(Shape.Section, mat, null, Axis, FlexuralCompression, IsRolledMember);


            SteelLimitStateValue LTB = beam.GetFlexuralLateralTorsionalBucklingStrength(C_b, L_b, FlexuralCompression, Bracing);
            phiM_n = LTB.Value;

            IsApplicableLimitState = LTB.IsApplicable;

            return new Dictionary<string, object>
            {
                { "phiM_n", phiM_n }
                ,{ "IsApplicableLimitState", IsApplicableLimitState }
 
            };
        }
Exemplo n.º 23
0
 public AffectedElement(double F_y, double F_u)
 {
     SteelMaterial material = new SteelMaterial(F_y, F_u, SteelConstants.ModulusOfElasticity, SteelConstants.ShearModulus);
     this.Section = new SteelGeneralSection(null, material);
 }
        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 }
 
            };
        }
        public static Dictionary<string, object> HssToTransversePlateLocalPunchingStrengthOfPlate(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;
                WosadSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new WosadSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new WosadSection.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.GetLocalPunchingStrengthOfPlate();
                    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.GetLocalPunchingStrengthOfPlate();
                    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 }
 
            };
        }
        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;
                WosadSection.SectionRectangular rSect;
                if (rect.B <= rect.H)
                {
                    rSect = new WosadSection.SectionRectangular(rect.B, rect.H);
                }
                else
                {
                    rSect = new WosadSection.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 }
 
            };
        }
Exemplo n.º 27
0
        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);

        }
Exemplo n.º 28
0
        public IHssTrussBranchConnection GetConnection(HssTrussConnectionMemberType MemberType,
            HssTrussConnectionClassification Classification, ISectionHollow ChordSection, ISectionHollow MainBranchSection,
            ISectionHollow SecondaryBranchSection, double F_yChord, double F_yBranch,
            double thetaMainBranch, double thetaSecondaryBranch, AxialForceType ForceTypeMainBranch, 
            AxialForceType ForceTypeSecondaryBranch, bool IsTensionChord,
            double P_uChord, double M_uChord,
            double O_v=0)
        {
            if (MemberType == HssTrussConnectionMemberType.Rhs)
            {
                if (ChordSection is ISectionTube && MainBranchSection is ISectionTube && SecondaryBranchSection is ISectionTube)
                {

                    SteelMaterial matChord = new SteelMaterial(F_yChord);
                    SteelRhsSection Chord = new SteelRhsSection(ChordSection as ISectionTube, matChord);


                    SteelMaterial matBr = new SteelMaterial(F_yBranch);
                    SteelRhsSection MainBranch = new SteelRhsSection(MainBranchSection as ISectionTube, matBr);

                    SteelRhsSection SecondaryBranch = new SteelRhsSection(SecondaryBranchSection as ISectionTube, matBr);


                    switch (Classification)
                    {
                        case HssTrussConnectionClassification.T:
                            return new RhsTrussTConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            break;
                        case HssTrussConnectionClassification.Y:
                            return new RhsTrussYConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            
                            break;
                        case HssTrussConnectionClassification.X:
                            return new RhsTrussXConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch, ForceTypeMainBranch, ForceTypeSecondaryBranch,
                                IsTensionChord, P_uChord, M_uChord);
                            break;
                        case HssTrussConnectionClassification.GappedK:
                            return new RhsTrussGappedKConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord,M_uChord);
                            break;
                        case HssTrussConnectionClassification.OverlappedK:
                            return new RhsTrussOverlappedConnection(Chord, MainBranch, thetaMainBranch, SecondaryBranch, thetaSecondaryBranch,
                                ForceTypeMainBranch, ForceTypeSecondaryBranch, IsTensionChord, P_uChord, M_uChord,O_v);
                            break;
                        default:
                            throw new Exception("Connection classification not recognized.");
                            break;
                    }
                }
                else
                {
                    throw new Exception("One of the member section is not of type ISectionTube. Ensure that a rectangular hollow section object type is used for chord and branches.");
                }

            }
            else
            {
                throw new NotImplementedException("Circular HSS truss connections are not supported yet.");
            }
        }
Exemplo n.º 29
0
        public static Dictionary<string, object> FlexuralYielding(CustomProfile Shape, double F_y, string BendingAxis="XAxis", string FlexuralCompressionLocation="Top",
            double E = 29000, bool IsRolledMember = true, string Code = "AISC360-10")
        {
            //Default values
            double phiM_n = 0;
            bool IsApplicableLimitState = false;


            //Calculation logic:
            MomentAxis Axis;
            //Calculation logic:
            bool IsValidStringAxis = Enum.TryParse(BendingAxis, true, out Axis);
            if (IsValidStringAxis == false)
            {
                throw new Exception("Axis selection not recognized. Check input string.");
            }

            FlexuralCompressionFiberPosition FlexuralCompression;
            //Calculation logic:
            bool IsValidStringCompressionLoc = Enum.TryParse(FlexuralCompressionLocation, true, out FlexuralCompression);
            if (IsValidStringCompressionLoc == false)
            {
                throw new Exception("Flexural compression location selection not recognized. Check input string.");
            }


            SteelMaterial mat = new SteelMaterial(F_y, E);
            FlexuralMemberFactory factory = new FlexuralMemberFactory();
            ISteelBeamFlexure beam = factory.GetBeam(Shape.Section, mat, null, Axis, FlexuralCompression, IsRolledMember);

            SteelLimitStateValue Y =
            beam.GetFlexuralYieldingStrength(FlexuralCompression);
            phiM_n = Y.Value;

            IsApplicableLimitState = Y.IsApplicable;

            return new Dictionary<string, object>
            {
                { "phiM_n", phiM_n }
            ,{ "IsApplicableLimitState", IsApplicableLimitState }
 
            };
        }
        public static Dictionary<string, object> HssToLongitudinalPlateMaximumPlateThicknessForShear(CustomProfile HssSection,CustomProfile PlateSection,
            double F_y,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);
                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 }
 
            };
        }