Esempio n. 1
0
        private ISteelBeamFlexure CreateIBeam(CompactnessClassFlexure FlangeCompactness,
                                              CompactnessClassFlexure WebCompactness, ISectionI Section, ISteelMaterial Material,
                                              ICalcLog Log, bool IsRolled)
        {
            SteelSectionI     steelSection = new SteelSectionI(Section, Material);
            ISteelBeamFlexure beam         = null;

            if (FlangeCompactness == CompactnessClassFlexure.Compact && WebCompactness == CompactnessClassFlexure.Compact)
            {
                //F2
                beam = new BeamIDoublySymmetricCompact(steelSection, IsRolled, Log);
            }
            else if (WebCompactness == CompactnessClassFlexure.Compact && FlangeCompactness != CompactnessClassFlexure.Compact)
            {
                //F3
                throw new NotImplementedException();
            }

            return(beam);
        }
        private ISteelBeamFlexure CreateIBeam(CompactnessClassFlexure FlangeCompactness,
            CompactnessClassFlexure WebCompactness, ISectionI Section, ISteelMaterial Material, 
            ICalcLog Log, bool IsRolled)
        {
            SteelSectionI steelSection = new SteelSectionI(Section, Material);
            ISteelBeamFlexure beam = null;
            if (FlangeCompactness== CompactnessClassFlexure.Compact && WebCompactness == CompactnessClassFlexure.Compact)
            {
                //F2
                beam = new BeamIDoublySymmetricCompact(steelSection, IsRolled, Log);
            }
            else if (WebCompactness == CompactnessClassFlexure.Compact && FlangeCompactness!= CompactnessClassFlexure.Compact)
            {
                //F3
                throw new NotImplementedException();
            }

            return beam;
        }
        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;
        }