public ConcreteFlexuralSectionBase(IConcreteSection Section, List <RebarPoint> LongitudinalBars, ICalcLog log, ConfinementReinforcementType ConfinementReinforcementType = ConfinementReinforcementType.Ties, double ConvergenceToleranceStrain = 0.000002) : base(Section, LongitudinalBars, log, false) { this.ConvergenceToleranceStrain = ConvergenceToleranceStrain; this.ConfinementReinforcementType = ConfinementReinforcementType; }
/// <summary> /// Strength reduction factor per Table 21.2.2 /// </summary> /// <param name="failureMode">Compression, tension-controlled or transitional</param> /// <param name="ConfinementReinforcementType"></param> /// <param name="epsilon_t">Actual calculated tensile strain</param> /// <param name="epsilon_ty">Yield strain</param> /// <returns></returns> public double Get_phiFlexureAndAxial(FlexuralFailureModeClassification failureMode, ConfinementReinforcementType ConfinementReinforcementType, double epsilon_t, double epsilon_ty) { epsilon_t = Math.Abs(epsilon_t); switch (failureMode) { case FlexuralFailureModeClassification.CompressionControlled: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return 0.75; } else { return 0.65; } break; case FlexuralFailureModeClassification.Transition: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return 0.75 + 0.15 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty); } else { return 0.65 + 0.25 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty); } break; case FlexuralFailureModeClassification.TensionControlled: return 0.9; break; default: return 0.65; break; } }
public ConcreteSectionCompression GetCompressionMemberFromFlexuralSection(ConcreteSectionFlexure flexuralSection, ConfinementReinforcementType ConfinementReinforcement, bool IsPrestressed = false) { CalcLog log = new CalcLog(); CompressionMemberType CompressionMemberType = GetCompressionMemberType(ConfinementReinforcement, IsPrestressed); ConcreteSectionCompression compSection = new ConcreteSectionCompression(flexuralSection, CompressionMemberType, log); return(compSection); }
/// <summary> /// Concrete generic shape /// </summary> /// <param name="PolygonPoints">Points representing closed polyline describing the outline of concrete shape</param> /// <param name="Concrete">Concrete material</param> /// <param name="RebarPoints">Points representing vertical rebar. Rebar points have associated rebar material and location</param> /// <param name="b_w">Section width (required for shear strength calculations)</param> /// <param name="ConfinementReinforcementType"></param> /// <param name="d">Distance from tension rebar centroid to the furthermost compressed point (required for shear strength calculations)</param> /// <returns></returns> public ConcreteSectionFlexure GetGeneralSection(List <Point2D> PolygonPoints, IConcreteMaterial Concrete, List <RebarPoint> RebarPoints, double b_w, double d, ConfinementReinforcementType ConfinementReinforcementType = ConfinementReinforcementType.NoReinforcement) { CalcLog log = new CalcLog(); var GenericShape = new PolygonShape(PolygonPoints); CrossSectionGeneralShape Section = new CrossSectionGeneralShape(Concrete, null, GenericShape, b_w, d); ConcreteSectionFlexure beam = new ConcreteSectionFlexure(Section, RebarPoints, log, ConfinementReinforcementType); return(beam); }
public ConcreteSectionCompression GetRectangularCompressionMember(double Width, double Height, double fc, List <RebarPoint> LongitudinalBars, ConfinementReinforcementType ConfinementReinforcement, bool IsPrestressed = false) { CalcLog log = new CalcLog(); ConcreteMaterial mat = new ConcreteMaterial(fc, ConcreteTypeByWeight.Normalweight, log); CrossSectionRectangularShape Section = new CrossSectionRectangularShape(mat, null, Width, Height); CompressionMemberType CompressionMemberType = GetCompressionMemberType(ConfinementReinforcement, IsPrestressed); ConcreteSectionCompression column = new ConcreteSectionCompression(Section, LongitudinalBars, CompressionMemberType, log); return(column); }
public ConcreteFlexuralStrengthResult GetDesignFlexuralStrength(FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, ConfinementReinforcementType ConfinementReinforcementType) { IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition); ConcreteFlexuralStrengthResult result = new ConcreteFlexuralStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return(result); }
public ConcreteFlexuralStrengthResult GetDesignFlexuralStrength(FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, ConfinementReinforcementType ConfinementReinforcementType) { IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalFlexuralCapacity(FlexuralCompressionFiberPosition); ConcreteFlexuralStrengthResult result = new ConcreteFlexuralStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return result; }
public void ShearWallCalculatesPMMDiagram() { double f_c_prime = 6; double f_c_prime_psi = f_c_prime * 1000; RebarMaterialFactory factory = new RebarMaterialFactory(); string RebarSpecificationId = "A615Grade60"; IRebarMaterial LongitudinalRebarMaterial = factory.GetMaterial(RebarSpecificationId); double h_total = 20 * 12; double t_w = 12; double N_curtains = 2; double s = 12; double c_edge = 0; BoundaryZone BoundaryZoneTop = new BoundaryZone(3, 3, "No8", 6, 3, 3); BoundaryZone BoundaryZoneBottom = new BoundaryZone(3, 3, "No8", 6, 3, 3); string WallRebarSizeId = "No4"; FlexuralCompressionFiberPosition p = FlexuralCompressionFiberPosition.Top; ConcreteMaterial Concrete = new ConcreteMaterial(f_c_prime_psi, ConcreteTypeByWeight.Normalweight, null); ConfinementReinforcementType ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; CrossSectionRectangularShape shape = new CrossSectionRectangularShape(Concrete, null, t_w, h_total); List <KodestructAci.RebarPoint> LongitudinalBars = GetLongitudinalBars(shape.SliceableShape as ISectionRectangular, h_total, t_w, WallRebarSizeId, N_curtains, s, c_edge, BoundaryZoneTop, BoundaryZoneBottom, LongitudinalRebarMaterial); KodestructAci.IConcreteFlexuralMember fs = new KodestructAci14.ConcreteSectionFlexure(shape, LongitudinalBars, null, ConfinementReinforcementType); IConcreteSectionWithLongitudinalRebar Section = fs as IConcreteSectionWithLongitudinalRebar; ConcreteSectionCompression column = new ConcreteSectionCompression(Section, ConfinementReinforcementType, null); //Convert axial force to pounds List <PMPair> Pairs = column.GetPMPairs(p); var PairsAdjusted = Pairs.Select(pair => new PMPair(pair.P / 1000.0, pair.M / 1000.0 / 12.0)); string Filename = Path.Combine(Path.GetTempPath(), "PMInteractionShearWall.csv"); using (CsvFileWriter writer = new CsvFileWriter(Filename)) { foreach (var pair in PairsAdjusted) { CsvRow row = new CsvRow(); row.Add(pair.M.ToString()); row.Add(pair.P.ToString()); writer.WriteRow(row); } } }
internal ShearWallSection(double h_total, double t_w, string RebarSizeId, double N_curtains, double s, double c_edge, BoundaryZone BoundaryZoneTop, BoundaryZone BoundaryZoneBottom, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial) { ConfinementReinforcementType ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; base.ConcreteMaterial = ConcreteMaterial; CrossSectionIShape shape = GetIShape(ConcreteMaterial.Concrete, h_total, t_w, BoundaryZoneTop, BoundaryZoneBottom); List <KodestructAci.RebarPoint> LongitudinalBars = GetLongitudinalBars(shape.SliceableShape as ISectionI, h_total, t_w, RebarSizeId, N_curtains, s, c_edge, BoundaryZoneTop, BoundaryZoneBottom, LongitudinalRebarMaterial); KodestructAci.IConcreteFlexuralMember fs = new KodestructAci14.ConcreteSectionFlexure(shape, LongitudinalBars, new CalcLog(), ConfinementReinforcementType); this.FlexuralSection = fs; }
/// <summary> /// Strength reduction factor per Table 21.2.2 /// </summary> /// <param name="failureMode">Compression, tension-controlled or transitional</param> /// <param name="ConfinementReinforcementType"></param> /// <param name="epsilon_t">Actual calculated tensile strain</param> /// <param name="epsilon_ty">Yield strain</param> /// <returns></returns> public double Get_phiFlexureAndAxial(FlexuralFailureModeClassification failureMode, ConfinementReinforcementType ConfinementReinforcementType, double epsilon_t, double epsilon_ty) { if (epsilon_t >= 0) { return(0.65); } else { epsilon_t = Math.Abs(epsilon_t); switch (failureMode) { case FlexuralFailureModeClassification.CompressionControlled: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return(0.75); } else { return(0.65); } break; case FlexuralFailureModeClassification.Transition: if (ConfinementReinforcementType == ACI.ConfinementReinforcementType.Spiral) { return(0.75 + 0.15 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty)); } else { return(0.65 + 0.25 * (epsilon_t - epsilon_ty) / (0.005 - epsilon_ty)); } break; case FlexuralFailureModeClassification.TensionControlled: return(0.9); break; default: return(0.65); break; } } }
public ConcreteSectionCompression GetGeneralCompressionMember(List <Point2D> PolygonPoints, List <RebarPoint> LongitudinalBars, IConcreteMaterial ConcreteMaterial, IRebarMaterial RebarMaterial, ConfinementReinforcementType ConfinementReinforcement, double b_w = 0.0, double d = 0.0, bool IsPrestressed = false) { CalcLog log = new CalcLog(); var GenericShape = new PolygonShape(PolygonPoints); if (b_w == 0.0) { b_w = GenericShape.XMax - GenericShape.XMin; } if (d == 0.0) { d = GenericShape.YMax - GenericShape.YMin; } CrossSectionGeneralShape Section = new CrossSectionGeneralShape(ConcreteMaterial, null, GenericShape, b_w, d); ConcreteSectionFlexure flexuralSection = new ConcreteSectionFlexure(Section, LongitudinalBars, log, ConfinementReinforcement); return(GetCompressionMemberFromFlexuralSection(flexuralSection, ConfinementReinforcement, IsPrestressed)); }
private CompressionMemberType GetCompressionMemberType(ConfinementReinforcementType ConfinementReinforcement, bool IsPrestressed) { CompressionMemberType CompressionMemberType = Concrete.ACI318_14.CompressionMemberType.NonPrestressedWithTies; switch (ConfinementReinforcement) { case ConfinementReinforcementType.Spiral: CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithSpirals : Concrete.ACI318_14.CompressionMemberType.PrestressedWithSpirals; break; case ConfinementReinforcementType.Ties: CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithTies : Concrete.ACI318_14.CompressionMemberType.PrestressedWithTies; break; default: CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithTies : Concrete.ACI318_14.CompressionMemberType.PrestressedWithTies; break; } return(CompressionMemberType); }
public ConcreteCompressionStrengthResult GetDesignMomentWithCompressionStrength( double P_u, FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, ConfinementReinforcementType ConfinementReinforcementType) { double P_o = GetMaximumForce(); StrengthReductionFactorFactory ff = new StrengthReductionFactorFactory(); double phiAxial = ff.Get_phiFlexureAndAxial(FlexuralFailureModeClassification.CompressionControlled, ConfinementReinforcementType, 0, 0); double phiP_n = phiAxial * P_o; if (P_u > phiP_n) { throw new Exception("Axial forces exceeds maximum axial force."); } IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalMomentResult(P_u,FlexuralCompressionFiberPosition); ConcreteCompressionStrengthResult result = new ConcreteCompressionStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return result; }
public void ShearWallCalculatesPMMDiagramMaxIteration() { double f_c_prime = 6; double f_c_prime_psi = f_c_prime * 1000; IRebarMaterial LongitudinalRebarMaterial = new RebarMaterialGeneral(60000); double l_w = 20 * 12; double h = 12; FlexuralCompressionFiberPosition p = FlexuralCompressionFiberPosition.Top; ConcreteMaterial Concrete = new ConcreteMaterial(f_c_prime_psi, ConcreteTypeByWeight.Normalweight, null); ConfinementReinforcementType ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; CrossSectionRectangularShape shape = new CrossSectionRectangularShape(Concrete, null, h, l_w); List <RebarPoint> LongitudinalBars = GetLongitudinalBarsFromCoordinates(LongitudinalRebarMaterial); KodestructAci.IConcreteFlexuralMember fs = new KodestructAci14.ConcreteSectionFlexure(shape, LongitudinalBars, null, ConfinementReinforcementType); IConcreteSectionWithLongitudinalRebar Section = fs as IConcreteSectionWithLongitudinalRebar; ConcreteSectionCompression column = new ConcreteSectionCompression(Section, ConfinementReinforcementType, null); //Convert axial force to pounds List <PMPair> Pairs = column.GetPMPairs(p, 50, true); var PairsAdjusted = Pairs.Select(pair => new PMPair(pair.P / 1000.0, pair.M / 1000.0 / 12.0)); string Filename = Path.Combine(Path.GetTempPath(), "PMInteractionShearWallMaxIteration.csv"); using (CsvFileWriter writer = new CsvFileWriter(Filename)) { foreach (var pair in PairsAdjusted) { CsvRow row = new CsvRow(); row.Add(pair.M.ToString()); row.Add(pair.P.ToString()); writer.WriteRow(row); } } }
public ConcreteSectionCompression(IConcreteSectionWithLongitudinalRebar Section, ConfinementReinforcementType ConfinementReinforcementType, ICalcLog log, bool IsPrestressed = false) : base(Section.Section, Section.LongitudinalBars, log) { this.ConfinementReinforcementType = ConfinementReinforcementType; switch (ConfinementReinforcementType) { case ConfinementReinforcementType.Spiral: this.CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithSpirals : CompressionMemberType.PrestressedWithSpirals; break; case ConfinementReinforcementType.Ties: this.CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithTies : CompressionMemberType.PrestressedWithTies; break; case ConfinementReinforcementType.NoReinforcement: throw new Exception("Invalid type of ConfinementReinforcementType variable. Specify either ties or spirals. Alternatively use nodes for plain concrete design"); break; this.CompressionMemberType = IsPrestressed == false ? CompressionMemberType.NonPrestressedWithTies : CompressionMemberType.PrestressedWithTies; break; } }
/// <summary> /// Creates compression member from top/bottom and side reinforcement /// </summary> /// <param name="Width">Width</param> /// <param name="Height">Heigth</param> /// <param name="ConcreteMaterial">Concrete material (as IConcreteMaterial)</param> /// <param name="RebarMaterial"> Rebar material (as IRebarMaterial) </param> /// <param name="A_s_TopBottom">Area of left or right reinforcement (each)</param> /// <param name="A_s_LeftRight">Area of top or bottom reinforcement (each)</param> /// <param name="c_centerTopBottom">Cover to rebar centroid for top and bottom reinforcement</param> /// <param name="c_centerLeftRight">Cover to rebar centroid for left and right side reinforcement</param> /// <param name="ConfinementReinforcement">Distiguishes between ties and spirals</param> /// <param name="IsPrestressed">Distinguishes between prestressed versus non-prestressed members</param> /// <returns></returns> public ConcreteSectionCompression GetRectangularCompressionMember(double Width, double Height, IConcreteMaterial ConcreteMaterial, IRebarMaterial RebarMaterial, double A_s_TopBottom, double A_s_LeftRight, double c_centerTopBottom, double c_centerLeftRight, ConfinementReinforcementType ConfinementReinforcement, bool IsPrestressed = false) { CalcLog log = new CalcLog(); RebarLine topLine = new RebarLine(A_s_TopBottom, new Point2D(-Width / 2.0 + c_centerLeftRight, Height / 2.0 - c_centerTopBottom), new Point2D(Width / 2.0 - c_centerLeftRight, Height / 2.0 - c_centerTopBottom), RebarMaterial, false); RebarLine botLine = new RebarLine(A_s_TopBottom, new Point2D(-Width / 2.0 + c_centerLeftRight, -Height / 2.0 + c_centerTopBottom), new Point2D(Width / 2.0 - c_centerLeftRight, -Height / 2.0 + c_centerTopBottom), RebarMaterial, false); RebarLine leftLine = new RebarLine(A_s_LeftRight, new Point2D(-Width / 2.0 + c_centerLeftRight, -Height / 2.0 + c_centerTopBottom), new Point2D(-Width / 2.0 + c_centerLeftRight, Height / 2.0 - c_centerTopBottom), RebarMaterial, true); RebarLine rightLine = new RebarLine(A_s_LeftRight, new Point2D(Width / 2.0 - c_centerLeftRight, -Height / 2.0 + c_centerTopBottom), new Point2D(Width / 2.0 - c_centerLeftRight, Height / 2.0 - c_centerTopBottom), RebarMaterial, true); List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); LongitudinalBars.AddRange(topLine.RebarPoints); LongitudinalBars.AddRange(botLine.RebarPoints); LongitudinalBars.AddRange(leftLine.RebarPoints); LongitudinalBars.AddRange(rightLine.RebarPoints); return(this.GetRectangularCompressionMember(Width, Height, ConcreteMaterial, LongitudinalBars, ConfinementReinforcement, log, IsPrestressed)); }
/// <summary> /// Constructor used for flexure and axial load analysis. /// </summary> public ConcreteSectionFlexure(IConcreteSection Section, List <RebarPoint> LongitudinalBars, ICalcLog log, ConfinementReinforcementType ConfinementReinforcementType) : base(Section, LongitudinalBars, log, ConfinementReinforcementType) { }
public ReinforcedConcreteBeamNonprestressed(IConcreteSection Section, ConfinementReinforcementType ConfinementReinforcementType, ICalcLog log) { this.ConcreteSection = Section; this.Log = log; this.ConfinementReinforcementType = ConfinementReinforcementType; }
// public ConcreteSectionFlexure GetRectangularSectionWithBoundaryZones(double b, double h, //double A_sBoundary, double L_Boundary, RebarDesignation curtainBar, double s_curtain, int N_curtains, IConcreteMaterial mat, IRebarMaterial rebarMaterial, // ConfinementReinforcementType ConfinementReinforcementType, int NumberOfSubdivisions = 20) // { // double YTop = h / 2.0 - c_centTopBottom; // double YBottom = -h / 2.0 + c_centTopBottom; // double XLeft = -b / 2.0 + c_centLeftRight; // double XRight = b / 2.0 - c_centLeftRight; // Point2D P1 = new Point2D(XLeft, YTop); // Point2D P2 = new Point2D(XRight, YTop); // Point2D P3 = new Point2D(XRight, YBottom); // Point2D P4 = new Point2D(XLeft, YBottom); // RebarLine topLine = null; // RebarLine bottomLine = null; // RebarLine leftLine = null; // RebarLine rightLine = null; // if (NumberOfSubdivisions == 0) // { // topLine = new RebarLine(A_sTopBottom, P1, P2, rebarMaterial, false); // bottomLine = new RebarLine(A_sTopBottom, P3, P4, rebarMaterial, false); // if (A_sLeftRight > 0) // { // leftLine = new RebarLine(A_sLeftRight, P2, P3, rebarMaterial, true); // rightLine = new RebarLine(A_sLeftRight, P4, P1, rebarMaterial, true); // } // } // else // { // topLine = new RebarLine(A_sTopBottom, P1, P2, rebarMaterial, false, false, NumberOfSubdivisions); // bottomLine = new RebarLine(A_sTopBottom, P3, P4, rebarMaterial, false, false, NumberOfSubdivisions); // if (A_sLeftRight > 0) // { // leftLine = new RebarLine(A_sLeftRight, P2, P3, rebarMaterial, true, false, NumberOfSubdivisions); // rightLine = new RebarLine(A_sLeftRight, P4, P1, rebarMaterial, true, false, NumberOfSubdivisions); // } // } // List<RebarPoint> LongitudinalBars = new List<RebarPoint>(); // if (topLine != null) LongitudinalBars.AddRange(topLine.RebarPoints); // if (bottomLine != null) LongitudinalBars.AddRange(bottomLine.RebarPoints); // if (leftLine != null) LongitudinalBars.AddRange(leftLine.RebarPoints); // if (rightLine != null) LongitudinalBars.AddRange(rightLine.RebarPoints); // CrossSectionRectangularShape section = new CrossSectionRectangularShape(mat, null, b, h); // CalcLog log = new CalcLog(); // ConcreteSectionFlexure sectionFlexure = new ConcreteSectionFlexure(section, LongitudinalBars, log, ConfinementReinforcementType); // return sectionFlexure; // } public ConcreteSectionFlexure GetRectangularSectionFourSidesDistributed(double b, double h, double A_sTopBottom, double A_sLeftRight, double c_centTopBottom, double c_centLeftRight, IConcreteMaterial mat, IRebarMaterial rebarMaterial, ConfinementReinforcementType ConfinementReinforcementType, int NumberOfSubdivisions = 0) { double YTop = h / 2.0 - c_centTopBottom; double YBottom = -h / 2.0 + c_centTopBottom; double XLeft = -b / 2.0 + c_centLeftRight; double XRight = b / 2.0 - c_centLeftRight; Point2D P1 = new Point2D(XLeft, YTop); Point2D P2 = new Point2D(XRight, YTop); Point2D P3 = new Point2D(XRight, YBottom); Point2D P4 = new Point2D(XLeft, YBottom); RebarLine topLine = null; RebarLine bottomLine = null; RebarLine leftLine = null; RebarLine rightLine = null; if (NumberOfSubdivisions == 0) { topLine = new RebarLine(A_sTopBottom, P1, P2, rebarMaterial, false); bottomLine = new RebarLine(A_sTopBottom, P3, P4, rebarMaterial, false); if (A_sLeftRight > 0) { leftLine = new RebarLine(A_sLeftRight, P2, P3, rebarMaterial, true); rightLine = new RebarLine(A_sLeftRight, P4, P1, rebarMaterial, true); } } else { topLine = new RebarLine(A_sTopBottom, P1, P2, rebarMaterial, false, false, NumberOfSubdivisions); bottomLine = new RebarLine(A_sTopBottom, P3, P4, rebarMaterial, false, false, NumberOfSubdivisions); if (A_sLeftRight > 0) { leftLine = new RebarLine(A_sLeftRight, P2, P3, rebarMaterial, true, false, NumberOfSubdivisions); rightLine = new RebarLine(A_sLeftRight, P4, P1, rebarMaterial, true, false, NumberOfSubdivisions); } } List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); if (topLine != null) { LongitudinalBars.AddRange(topLine.RebarPoints); } if (bottomLine != null) { LongitudinalBars.AddRange(bottomLine.RebarPoints); } if (leftLine != null) { LongitudinalBars.AddRange(leftLine.RebarPoints); } if (rightLine != null) { LongitudinalBars.AddRange(rightLine.RebarPoints); } CrossSectionRectangularShape section = new CrossSectionRectangularShape(mat, null, b, h); CalcLog log = new CalcLog(); ConcreteSectionFlexure sectionFlexure = new ConcreteSectionFlexure(section, LongitudinalBars, log, ConfinementReinforcementType); return(sectionFlexure); }
public ConcreteFlexuralStrengthResult GetFlexuralDesignStrength(List <RebarPoint> LongitudinalBars, FlexuralCompressionFiberPosition CompressionFiber, ConfinementReinforcementType ConfinementReinforcementType) { ConcreteSectionFlexure s = new ConcreteSectionFlexure(this.ConcreteSection, LongitudinalBars, Log, ConfinementReinforcementType); return(s.GetDesignFlexuralStrength(CompressionFiber)); }
public PrestressedConcreteSection(IPrestressedConcreteSection Section, List <RebarPoint> LongitudinalBars, CrossSectionLocationType LocationType, MemberClass MemberClass, ICalcLog log, ConfinementReinforcementType ConfinementReinforcementType) : base(Section, LongitudinalBars, log, ConfinementReinforcementType) { this.crossSectionLocationType = LocationType; this.memberClass = MemberClass; this.prestressedSection = Section; }
public ConcreteSectionFlexure GetNonPrestressedDoublyReinforcedRectangularSection(double b, double h, double A_s1, double A_s2, double c_cntr1, double c_cntr2, double A_s_prime1, double A_s_prime2, double c_cntr_prime1, double c_cntr_prime2, ConcreteMaterial concrete, IRebarMaterial rebar, ConfinementReinforcementType ConfinementReinforcementType) { CrossSectionRectangularShape Section = new CrossSectionRectangularShape(concrete, null, b, h); List <RebarPoint> LongitudinalBars = new List <RebarPoint>(); Rebar bottom1 = new Rebar(A_s1, rebar); RebarPoint pointBottom1 = new RebarPoint(bottom1, new RebarCoordinate() { X = 0, Y = -h / 2.0 + c_cntr1 }); LongitudinalBars.Add(pointBottom1); if (A_s2 != 0) { Rebar bottom2 = new Rebar(A_s2, rebar); RebarPoint pointBottom2 = new RebarPoint(bottom2, new RebarCoordinate() { X = 0, Y = -h / 2.0 + c_cntr2 }); LongitudinalBars.Add(pointBottom2); } if (A_s_prime1 != 0) { Rebar top1 = new Rebar(A_s_prime1, rebar); RebarPoint pointTop1 = new RebarPoint(top1, new RebarCoordinate() { X = 0, Y = h / 2.0 - c_cntr_prime1 }); LongitudinalBars.Add(pointTop1); } if (A_s_prime2 != 0) { Rebar top2 = new Rebar(A_s_prime2, rebar); RebarPoint pointTop2 = new RebarPoint(top2, new RebarCoordinate() { X = 0, Y = h / 2.0 - c_cntr_prime2 }); LongitudinalBars.Add(pointTop2); } CalcLog log = new CalcLog(); ConcreteSectionFlexure beam = new ConcreteSectionFlexure(Section, LongitudinalBars, log, ConfinementReinforcementType); return(beam); }
public ConcreteSectionFlexure GetNonPrestressedDoublyReinforcedRectangularSection(double b, double h, double A_s1, double A_s2, double c_cntr1, double c_cntr2, ConcreteMaterial concreteMaterial, IRebarMaterial rebarMaterial, ConfinementReinforcementType ConfinementReinforcementType) { return(GetNonPrestressedDoublyReinforcedRectangularSection(b, h, A_s1, A_s2, c_cntr1, c_cntr2, 0, 0, 0, 0, concreteMaterial, rebarMaterial, ConfinementReinforcementType)); }
public PrestressedBeamSectionBase(IConcreteSection Section, List <RebarPoint> LongitudinalBars, ICalcLog log, ConfinementReinforcementType ConfinementReinforcementType) : base(Section, LongitudinalBars, log, ConfinementReinforcementType) { }
public ConcreteSectionCompression GetConcreteCompressionMember(double Width, double Height, double fc, List <RebarPoint> LongitudinalBars, ConfinementReinforcementType ConfinementReinforcementType) { CalcLog log = new CalcLog(); IConcreteSection Section = GetRectangularSection(Width, Height, fc); IConcreteFlexuralMember fs = new ConcreteSectionFlexure(Section, LongitudinalBars, new CalcLog(), ConfinementReinforcementType); ConcreteSectionCompression column = new ConcreteSectionCompression(fs as IConcreteSectionWithLongitudinalRebar, ConfinementReinforcementType, log); return(column); }
public ConcreteFlexuralStrengthResult GetFlexuralDesignStrength(List<RebarPoint> LongitudinalBars, FlexuralCompressionFiberPosition CompressionFiber, ConfinementReinforcementType ConfinementReinforcementType) { ConcreteSectionFlexure s = new ConcreteSectionFlexure(this.ConcreteSection, LongitudinalBars, Log); return s.GetDesignFlexuralStrength(CompressionFiber, ConfinementReinforcementType); }
public ConcreteCompressionStrengthResult GetDesignMomentWithCompressionStrength(double P_u, FlexuralCompressionFiberPosition FlexuralCompressionFiberPosition, ConfinementReinforcementType ConfinementReinforcementType) { double P_o = GetMaximumForce(); StrengthReductionFactorFactory ff = new StrengthReductionFactorFactory(); double phiAxial = ff.Get_phiFlexureAndAxial(FlexuralFailureModeClassification.CompressionControlled, ConfinementReinforcementType, 0, 0); double phiP_n = phiAxial * P_o; if (P_u > phiP_n) { throw new Exception("Axial forces exceeds maximum axial force."); } IStrainCompatibilityAnalysisResult nominalResult = this.GetNominalMomentResult(P_u, FlexuralCompressionFiberPosition); ConcreteCompressionStrengthResult result = new ConcreteCompressionStrengthResult(nominalResult, FlexuralCompressionFiberPosition, this.Section.Material.beta1); StrengthReductionFactorFactory f = new StrengthReductionFactorFactory(); FlexuralFailureModeClassification failureMode = f.GetFlexuralFailureMode(result.epsilon_t, result.epsilon_ty); double phi = f.Get_phiFlexureAndAxial(failureMode, ConfinementReinforcementType, result.epsilon_t, result.epsilon_ty); double phiM_n = phi * nominalResult.Moment; result.phiM_n = phiM_n; result.FlexuralFailureModeClassification = failureMode; return(result); }