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); }
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); }
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; }
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; }
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)); }
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); }
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); }
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); }
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); }
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); }
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); }
public CrossSectionRectangularShape(IConcreteMaterial Material, string Name, double Width, double Height) { this.material = Material; shape = new SectionRectangular(Name, Width, Height, new Point2D(0, 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 } }); }
//public override ISection Clone() //{ // throw new NotImplementedException(); //} public ISliceableSection GetSliceableShape() { SectionRectangular r = new SectionRectangular(this.B, this.H); return(r); }
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 } }); }
private CompoundShape GetRectangularShape() { SectionRectangular rect = new SectionRectangular(12, 12); return(rect); }