protected IMoveableSection GetCompressedConcreteSection(LinearStrainDistribution StrainDistribution, FlexuralCompressionFiberPosition compFiberPos, double SlicingPlaneOffset) { IMoveableSection compressedPortion = null; ISliceableSection sec = this.Section.SliceableShape as ISliceableSection; //if (StrainDistribution.TopFiberStrain >= 0 && StrainDistribution.BottomFiberStrain >= 0) //{ double SectionHeight = sec.YMax - sec.YMin; if (SlicingPlaneOffset > SectionHeight) { compressedPortion = this.Section.SliceableShape; } else { switch (compFiberPos) { case FlexuralCompressionFiberPosition.Top: compressedPortion = sec.GetTopSliceSection(SlicingPlaneOffset, SlicingPlaneOffsetType.Top); break; case FlexuralCompressionFiberPosition.Bottom: compressedPortion = sec.GetBottomSliceSection(SlicingPlaneOffset, SlicingPlaneOffsetType.Bottom); break; default: throw new CompressionFiberPositionException(); } } return(compressedPortion); }
public static Dictionary <string, object> PositiveMomentFlexuralStrength(CustomProfile Shape, double b_eff, double h_solid, double h_rib, double F_y, double fc_prime, double SumQ_n, string Code = "AISC360-10") { //Default values double phiM_n = 0; //Calculation logic: if (Shape.Section is ISliceableShapeProvider) { ISliceableShapeProvider prov = Shape.Section as ISliceableShapeProvider; ISliceableSection sec = prov.GetSliceableShape(); CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { if (Shape.Section is ISliceableSection) { ISliceableSection sec = Shape.Section as ISliceableSection; CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { throw new Exception("Shape type not supported. Please provide a shape object of standard geometry"); } } return(new Dictionary <string, object> { { "phiM_n", phiM_n } }); }
public CrossSectionGeneralShape(IConcreteMaterial Material, string Name, ISliceableSection SliceableShape, double b_w, double d) { this.material = Material; this._d =d; this._b_w = b_w; this.sliceableShape = SliceableShape; }
public CrossSectionGeneralShape(IConcreteMaterial Material, string Name, ISliceableSection SliceableShape, double b_w, double d) { this.material = Material; this._d = d; this._b_w = b_w; this.sliceableShape = SliceableShape; }
public CompositeBeamSection(ISliceableSection SteelSection, double SlabEffectiveWidth, double SlabSolidThickness, double SlabDeckThickness, double F_y, double f_cPrime) { this.SteelSection = SteelSection; this.SlabEffectiveWidth = SlabEffectiveWidth; this.SlabSolidThickness = SlabSolidThickness; this.SlabDeckThickness = SlabDeckThickness; this.SumQ_n = SumQ_n; this.F_y = F_y; this.f_cPrime = f_cPrime; }
public CompositeBeamSection(ISliceableSection SteelSection, double SlabEffectiveWidth, double SlabSolidThickness, double SlabDeckThickness, double F_y, double f_cPrime) { this.SteelSection = SteelSection ; this.SlabEffectiveWidth = SlabEffectiveWidth ; this.SlabSolidThickness = SlabSolidThickness ; this.SlabDeckThickness = SlabDeckThickness ; this.SumQ_n = SumQ_n ; this.F_y = F_y ; this.f_cPrime = f_cPrime ; }
protected ForceMomentContribution GetConcreteWhitneyForceResultant(LinearStrainDistribution StrainDistribution, FlexuralCompressionFiberPosition compFiberPosition, double CompressedRebarArea, double CompressedRebarCentroidCoordinate) { ForceMomentContribution ConcreteCompressionContribution = new ForceMomentContribution(); // CalculateBeta and compression block height double c = GetDistanceToNeutralAxis(StrainDistribution, compFiberPosition); double h = Section.SliceableShape.YMax - Section.SliceableShape.YMin; double a; if (c == double.PositiveInfinity || c == double.NegativeInfinity) { a = h; } else { a = GetCompressionBlockDepth(c); if (a > h) { a = h; } } //double CentroidYToTopEdge = (Section.SliceableShape.YMax-Section.SliceableShape.YMin)-Section.SliceableShape.y_Bar; //double neutralAxisToBottomOfCompressedShapeOffset = CentroidYToTopEdge - a; IMoveableSection compressedPortion = null; ISliceableSection sec = this.Section.SliceableShape as ISliceableSection; if (sec != null) { compressedPortion = GetCompressedConcreteSection(StrainDistribution, compFiberPosition, a); } //this analysis subtracts the area of bars from the section but the location of the centroid of the //compressed section is not modified double A = compressedPortion.A - CompressedRebarArea; double fc = Section.Material.SpecifiedCompressiveStrength; double WhitneyBlockStress = GetWhitneyBlockStress(); double ConcreteResultantForce = A * WhitneyBlockStress; ConcreteCompressionContribution.Force = ConcreteResultantForce; double concreteForceCentroidDistance = compressedPortion.GetElasticCentroidCoordinate().Y - Section.SliceableShape.GetElasticCentroidCoordinate().Y; ConcreteCompressionContribution.Moment = concreteForceCentroidDistance * ConcreteResultantForce; return(ConcreteCompressionContribution); }
public double GetFlexuralStrength_Vertical(sCrossSection section, eColorMode forceType, IFrameSet fs) { sKodeStructConverter kcon = new sKodeStructConverter(); SteelMaterial mat = kcon.ToKodeStructMaterial_Steel(section); string Code = "AISC360-10"; double phiM_n = 0; double b_eff = this.GetBeamEffectiveSlabWidth(fs); double SumQ_n = this.GetSumOfStudsStrength(fs); // assuming, // Shear Stud Anchor // Light Weight Concrete : 4ksi // solid concrete thickness = 2.5" // rib thickness = 3" // double h_solid = 2.5; double h_rib = 3.0; double F_y = mat.YieldStress; //?? unit ?? F_y of what?? double fc_prime = 4.0; //?? unit ?? MomentAxis Axis = kcon.ToKodeStructMomentAxis(forceType); //?? just this for composite? ISection shape = kcon.ToKodeStructCrossSection(section); if (shape is ISliceableShapeProvider) { ISliceableShapeProvider prov = shape as ISliceableShapeProvider; ISliceableSection sec = prov.GetSliceableShape(); CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { if (shape is ISliceableSection) { ISliceableSection sec = shape as ISliceableSection; CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); phiM_n = cs.GetFlexuralStrength(SumQ_n); } else { throw new Exception("Shape type not supported. Please provide a shape object of standard geometry"); } } return(phiM_n); }
public double GetLowerBoundMomentOfInertia(sCrossSection cCheck, IFrameSet fs) { sKodeStructConverter kcon = new sKodeStructConverter(); SteelMaterial mat = kcon.ToKodeStructMaterial_Steel(fs.crossSection); double I_LB = 0; double b_eff = this.GetBeamEffectiveSlabWidth(fs); double SumQ_n = this.GetSumOfStudsStrength(fs); // assuming, // Shear Stud Anchor // Light Weight Concrete : 4ksi // solid concrete thickness = 2.5" // rib thickness = 3" // double h_solid = 2.5; double h_rib = 3.0; double F_y = mat.YieldStress; //?? unit ?? F_y of what?? double fc_prime = 4.0; //?? unit ?? //check lowerBound Moment of Inertia by check section??? ISection shape = kcon.ToKodeStructCrossSection(cCheck); if (shape is ISliceableShapeProvider) { ISliceableShapeProvider prov = shape as ISliceableShapeProvider; ISliceableSection sec = prov.GetSliceableShape(); CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); I_LB = cs.GetLowerBoundMomentOfInertia(SumQ_n); } else { if (shape is ISliceableSection) { ISliceableSection sec = shape as ISliceableSection; CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); I_LB = cs.GetLowerBoundMomentOfInertia(SumQ_n); } else { throw new Exception("Shape type not supported. Please provide a shape object of standard geometry"); } } return(I_LB); }
protected ForceMomentContribution GetConcreteWhitneyForceResultant(LinearStrainDistribution StrainDistribution, FlexuralCompressionFiberPosition compFiberPosition) { ForceMomentContribution ConcreteCompressionContribution = new ForceMomentContribution(); // CalculateBeta and compression block height double c = GetDistanceToNeutralAxis(StrainDistribution, compFiberPosition); double h = Section.SliceableShape.YMax - Section.SliceableShape.YMin; double a; if (c == double.PositiveInfinity) { a = h; } else { a = GetCompressionBlockDepth(c); if (a > h) { a = h; } } double CentroidYToTopEdge = (Section.SliceableShape.YMax - Section.SliceableShape.YMin) - Section.SliceableShape.y_Bar; double neutralAxisToBottomOfCompressedShapeOffset = CentroidYToTopEdge - a; IMoveableSection compressedPortion = null; ISliceableSection sec = this.Section.SliceableShape as ISliceableSection; if (sec != null) { compressedPortion = GetCompressedConcreteSection(StrainDistribution, compFiberPosition, a); } double A = compressedPortion.A; double fc = Section.Material.SpecifiedCompressiveStrength; double ConcreteResultantForce = A * 0.85 * fc; ConcreteCompressionContribution.Force = ConcreteResultantForce; double concreteForceCentroidDistance = compressedPortion.GetElasticCentroidCoordinate().Y; ConcreteCompressionContribution.Moment = concreteForceCentroidDistance * ConcreteResultantForce; return(ConcreteCompressionContribution); }
public static Dictionary <string, object> LowerBoundMomentOfInertia(CustomProfile Shape, double b_eff, double h_solid, double h_rib, double F_y, double fc_prime, double SumQ_n, string Code = "AISC360-10") { //Default values double I_LB = 0; //Calculation logic: if (Shape.Section is ISliceableShapeProvider) { ISliceableShapeProvider prov = Shape.Section as ISliceableShapeProvider; ISliceableSection sec = prov.GetSliceableShape(); CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); I_LB = cs.GetLowerBoundMomentOfInertia(SumQ_n); } else { if (Shape.Section is ISliceableSection) { ISliceableSection sec = Shape.Section as ISliceableSection; CompositeBeamSection cs = new CompositeBeamSection(sec, b_eff, h_solid, h_rib, F_y, fc_prime); I_LB = cs.GetLowerBoundMomentOfInertia(SumQ_n); } else { throw new Exception("Shape type not supported. Please provide a shape object of standard geometry"); } } return(new Dictionary <string, object> { { "I_LB", I_LB } }); }