internal RebarPoint(double A_b, double X_shp, double Y_shp, RebarMaterial RebarMaterial) { wosadAci.Rebar b = new wosadAci.Rebar(A_b, RebarMaterial.Material); this.RebarPointLData = new wosadAci.RebarPoint(b, new wosadAci.RebarCoordinate() { X = X_shp, Y = Y_shp }); }
public static Dictionary<string, object> StraightBarTensionLapSpliceLengthDetailed(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b1, double d_b2, RebarMaterial RebarMaterial, string RebarSpliceClass, string RebarCoatingType, string RebarCastingPosition, double s_clear, double c_c, double A_tr, double s_tr, double n, string Code = "ACI318-14") { //Default values double l_st = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = false; switch (RebarCoatingType) { case "Uncoated": IsEpoxyCoated = false; break; case "EpoxyCoated": IsEpoxyCoated = true; break; default: throw new Exception("Unrecognized rebar coating. Please check string input"); break; } Rebar rebar1 = new Rebar(d_b1, IsEpoxyCoated, mat); Rebar rebar2 = new Rebar(d_b2, IsEpoxyCoated, mat); bool IsTopRebar = false; switch (RebarCastingPosition) { case "Other": IsTopRebar = false; break; case "Top": IsTopRebar = true; break; default: throw new Exception("Unrecognized rebar casting position. Please check string input"); break; } TensionLapSpliceClass _RebarSpliceClass; bool IsValidRebarSpliceClass = Enum.TryParse(RebarSpliceClass, true, out _RebarSpliceClass); if (IsValidRebarSpliceClass == false) { throw new Exception("Failed to convert string. RebarSpliceClass not recognzed (A and B are acceptable inputs). Please check input"); } CalcLog log = new CalcLog(); TensionLapSplice ls = new TensionLapSplice(ConcreteMaterial.Concrete,rebar1,rebar2, s_clear, c_c, IsTopRebar,A_tr,s_tr,n, _RebarSpliceClass, log); l_st = ls.Length; return new Dictionary<string, object> { { "l_st", l_st } }; }
public static Dictionary <string, object> CompressionLapSpliceLength(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, bool HasConfiningReinforcement = false, string Code = "ACI318-14") { //Default values double l_sc = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; Rebar rebar = new Rebar(d_b, false, mat); return(new Dictionary <string, object> { { "l_sc", l_sc } }); }
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; }
internal RectangularSectionSinglyReinforced(double b, double h, double A_s, double c_cntr, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool hasTies=false) { CrossSectionRectangularShape shape = new CrossSectionRectangularShape(ConcreteMaterial.Concrete, null, b, h); base.ConcreteMaterial = ConcreteMaterial; //duplicate save of concrete material into base Dynamo class List<wosadAci.RebarPoint> LongitudinalBars = new List<wosadAci.RebarPoint>(); wosadAci.Rebar thisBar = new wosadAci.Rebar(A_s, LongitudinalRebarMaterial.Material); wosadAci.RebarPoint point = new wosadAci.RebarPoint(thisBar, new wosadAci.RebarCoordinate() { X = 0, Y = -h / 2.0 + c_cntr }); LongitudinalBars.Add(point); wosadAci.IConcreteFlexuralMember fs = new wosadAci14.ConcreteSectionFlexure(shape, LongitudinalBars, new CalcLog()); this.FlexuralSection = fs; }
public static Dictionary<string, object> CompressionLapSpliceLength(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, bool HasConfiningReinforcement = false, string Code = "ACI318-14") { //Default values double l_sc = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; Rebar rebar = new Rebar(d_b, false, mat); return new Dictionary<string, object> { { "l_sc", l_sc } }; }
public static Dictionary<string, object> StraightBarTensionDevelopmentLengthDetailed(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, string RebarCoatingType, string RebarCastingPosition, double ExcessRebarRatio, double s_clear, double c_c, double A_tr, double s_tr, double n, string Code = "ACI318-14") { //Default values double l_d = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = false; switch (RebarCoatingType) { case "Uncoated": IsEpoxyCoated = false; break; case "EpoxyCoated": IsEpoxyCoated = true; break; default: throw new Exception("Unrecognized rebar coating. Please check string input"); break; } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); bool IsTopRebar = false; switch (RebarCastingPosition) { case "Other": IsTopRebar = false; break; case "Top": IsTopRebar = true; break; default: throw new Exception("Unrecognized rebar casting position. Please check string input"); break; } CalcLog log = new CalcLog(); DevelopmentTension d = new DevelopmentTension(ConcreteMaterial.Concrete,rebar,s_clear,c_c,IsTopRebar,ExcessRebarRatio,true,log); l_d = d.GetTensionDevelopmentLength(A_tr,s_tr,n); return new Dictionary<string, object> { { "l_d", l_d } }; }
public static Dictionary<string, object> CompressionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, bool HasConfiningReinforcement=false, string Code = "ACI318-14") { //Default values double l_dc = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; Rebar rebar = new Rebar(d_b, false, mat); CalcLog log = new CalcLog(); DevelopmentCompression cd = new DevelopmentCompression(ConcreteMaterial.Concrete, rebar, log, HasConfiningReinforcement); l_dc = cd.Length; return new Dictionary<string, object> { { "l_dc", l_dc } }; }
public static Dictionary <string, object> CompressionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, bool HasConfiningReinforcement = false, string Code = "ACI318-14") { //Default values double l_dc = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; Rebar rebar = new Rebar(d_b, false, mat); CalcLog log = new CalcLog(); DevelopmentCompression cd = new DevelopmentCompression(ConcreteMaterial.Concrete, rebar, log, HasConfiningReinforcement); l_dc = cd.Length; return(new Dictionary <string, object> { { "l_dc", l_dc } }); }
public static Dictionary<string, object> StandardHookTensionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, double ExcessRebarRatio = 1.0, string RebarCoatingType = "Uncoated",string Code = "ACI318-14") { //Default values double l_dh = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = true; if (RebarCoatingType.ToLower() == "uncoated") { IsEpoxyCoated=false; } else if (RebarCoatingType.ToLower() == "epoxycoated") { IsEpoxyCoated =true; } else { throw new Exception("Unrecognized rebar coating string."); } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); CalcLog log = new CalcLog(); StandardHookInTension hook = new StandardHookInTension(ConcreteMaterial.Concrete, rebar, log, ExcessRebarRatio); l_dh = hook.GetDevelopmentLength(); return new Dictionary<string, object> { { "l_dh", l_dh } }; }
public static Dictionary <string, object> ShearFrictionStrength(string ShearFrictionSurfaceTypeId, ConcreteMaterial ConcreteMaterial, double A_c, RebarMaterial RebarMaterial, double A_v, double alpha = 90, double F_comp = 0) { //Default values //Calculation logic: double phiV_n = 0.0; ShearFrictionSurfaceType _ShearFrictionSurfaceType; bool IsValidShearFrictionSurfaceTypeString = Enum.TryParse(ShearFrictionSurfaceTypeId, true, out _ShearFrictionSurfaceType); if (IsValidShearFrictionSurfaceTypeString == false) { throw new Exception("Failed to convert string. ShearFrictionSurfaceType variable needs to be MonolithicConcrete, HardenedRoughenedConcrete, HardenedNonRoughenedConcrete or ConcreteAgainstSteel. Please check input"); } ConcreteSectionShearFriction sec = new ConcreteSectionShearFriction(_ShearFrictionSurfaceType, ConcreteMaterial.Concrete, A_c, RebarMaterial.Material, A_v, alpha, F_comp); phiV_n = sec.GetShearFrictionStrength() / 1000.0; //convert back to ksi units return(new Dictionary <string, object> { { "phiV_n", phiV_n } }); }
/// <summary> /// Rectangular section singly reinforced (Use where ConcreteSection type is required) /// </summary> /// <param name="b">Width of compression face of member</param> /// <param name="h">Overall thickness, height, or depth of member</param> /// <param name="A_s">Area of nonprestressed longitudinal tension reinforcement</param> /// <param name="c_cntr">Concrete cover to tension rebar centroid</param> /// <param name="ConcreteMaterial">Concrete material</param> /// <param name="LongitudinalRebarMaterial">Rebar material for longitudinal bars</param> /// <returns name="RectangularSectionSinglyReinforced"> Section [OBJECT] </returns> public static RectangularSectionSinglyReinforced ByWidthHeigthAndReinforcementArea(double b, double h, double A_s, double c_cntr, ConcreteMaterial ConcreteMaterial,RebarMaterial LongitudinalRebarMaterial) { return new RectangularSectionSinglyReinforced(b, h, A_s, c_cntr, ConcreteMaterial, LongitudinalRebarMaterial); }
internal RectangularSectionFourSideReinforced(double b, double h, double A_sTopBottom, double A_sLeftRight, double c_cntrTopBottom, double c_cntrLeftRight, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool hasTies = false) { KodestructAci.ConfinementReinforcementType ConfinementReinforcementType; if (hasTies == true) { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; } else { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.NoReinforcement; } base.ConcreteMaterial = ConcreteMaterial; //duplicate save of concrete material into base Dynamo class FlexuralSectionFactory flexureFactory = new FlexuralSectionFactory(); ConcreteSectionFlexure fs = flexureFactory.GetRectangularSectionFourSidesDistributed(b, h, A_sTopBottom, A_sLeftRight, c_cntrTopBottom, c_cntrLeftRight, ConcreteMaterial.Concrete, LongitudinalRebarMaterial.Material, ConfinementReinforcementType); this.FlexuralSection = fs; }
public static Dictionary <string, object> StraightBarTensionLapSpliceLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b1, double d_b2, RebarMaterial RebarMaterial, string RebarSpliceClass = "B", string RebarCoatingType = "Uncoated", string RebarCastingPosition = "Top", double ExcessRebarRatio = 1.0, bool MeetsRebarSpacingAndEdgeDistance = true, bool HasMinimumTransverseReinforcement = false, string Code = "ACI318-14") { //Default values double l_st = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = false; switch (RebarCoatingType) { case "Uncoated": IsEpoxyCoated = false; break; case "EpoxyCoated": IsEpoxyCoated = true; break; default: throw new Exception("Unrecognized rebar coating. Please check string input"); } Rebar rebar1 = new Rebar(d_b1, IsEpoxyCoated, mat); Rebar rebar2 = new Rebar(d_b2, IsEpoxyCoated, mat); bool IsTopRebar = false; switch (RebarCastingPosition) { case "Other": IsTopRebar = false; break; case "Top": IsTopRebar = true; break; default: throw new Exception("Unrecognized rebar casting position. Please check string input"); } TensionLapSpliceClass _RebarSpliceClass; bool IsValidRebarSpliceClass = Enum.TryParse(RebarSpliceClass, true, out _RebarSpliceClass); if (IsValidRebarSpliceClass == false) { throw new Exception("Failed to convert string. RebarSpliceClass not recognzed (A and B are acceptable inputs). Please check input"); } CalcLog log = new CalcLog(); TensionLapSplice d = new TensionLapSplice(ConcreteMaterial.Concrete, rebar1, rebar2, MeetsRebarSpacingAndEdgeDistance, HasMinimumTransverseReinforcement, IsTopRebar, _RebarSpliceClass, log); l_st = d.Length; return(new Dictionary <string, object> { { "l_st", l_st } }); }
private List <KodestructAci.RebarPoint> GetWallBars(double h, double t_w, string RebarSizeId, double N_curtains, double s, double c_edge, RebarMaterial LongitudinalRebarMaterial) { RebarDesignation des; bool IsValidString = Enum.TryParse(RebarSizeId, true, out des); if (IsValidString == false) { throw new Exception("Rebar size is not recognized. Check input."); } RebarSection sec = new RebarSection(des); double A_b = sec.Area; int NBarLines = (int)Math.Floor(h / s); double A_s = NBarLines * N_curtains * A_b; RebarLine Line = new RebarLine(A_s, new Point2D(0.0, -h / 2.0 + c_edge), new Point2D(0.0, h / 2.0 - c_edge), LongitudinalRebarMaterial.Material, false, false, NBarLines); return(Line.RebarPoints); }
public static Dictionary <string, object> StandardHookTensionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, double ExcessRebarRatio = 1.0, string RebarCoatingType = "Uncoated", string Code = "ACI318-14") { //Default values double l_dh = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = true; if (RebarCoatingType.ToLower() == "uncoated") { IsEpoxyCoated = false; } else if (RebarCoatingType.ToLower() == "epoxycoated") { IsEpoxyCoated = true; } else { throw new Exception("Unrecognized rebar coating string."); } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); CalcLog log = new CalcLog(); StandardHookInTension hook = new StandardHookInTension(ConcreteMaterial.Concrete, rebar, log, ExcessRebarRatio); l_dh = hook.GetDevelopmentLength(); return(new Dictionary <string, object> { { "l_dh", l_dh } }); }
private List <KodestructAci.RebarPoint> GetBoundaryZoneBars(BoundaryZone BoundaryZone, RebarMaterial LongitudinalRebarMaterial, Point2D BzCentroid, bool IsTop) { Point2D topPoint; Point2D botPoint; if (IsTop == true) { topPoint = new Point2D(0, BzCentroid.Y + (BoundaryZone.h / 2.0 - BoundaryZone.c_cntrEdge)); botPoint = new Point2D(0, BzCentroid.Y - (BoundaryZone.h / 2.0 - BoundaryZone.c_cntrInterior)); } else { topPoint = new Point2D(0, BzCentroid.Y + (BoundaryZone.h / 2.0 - BoundaryZone.c_cntrInterior)); botPoint = new Point2D(0, BzCentroid.Y - (BoundaryZone.h / 2.0 - BoundaryZone.c_cntrEdge)); } RebarLine Line = new RebarLine(BoundaryZone.A_s, botPoint, topPoint, LongitudinalRebarMaterial.Material, false, false, (int)BoundaryZone.N_Bar_Rows - 1); return(Line.RebarPoints); }
public static Dictionary <string, object> StandardHookTensionDevelopmentLengthDetailed(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, string HookType = "Degree90", string RebarCoatingType = "Uncoated", double ExcessRebarRatio = 1.0, double c_side = 1.5, double c_extension = 1.5, string EnclosingRebarDirection = "Parallel", double s_enclosing = 12, string Code = "ACI318-14") { //Default values double l_dh = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = true; if (RebarCoatingType.ToLower() == "uncoated") { IsEpoxyCoated = false; } else if (RebarCoatingType.ToLower() == "epoxycoated") { IsEpoxyCoated = true; } else { throw new Exception("Unrecognized rebar coating string."); } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); CalcLog log = new CalcLog(); StandardHookInTension hook = new StandardHookInTension(ConcreteMaterial.Concrete, rebar, log, ExcessRebarRatio); HookType _HookType; bool IsValidHookTypeString = Enum.TryParse(HookType, true, out _HookType); if (IsValidHookTypeString == false) { throw new Exception("Failed to convert string. Check HookType string. Please check input"); } bool enclosingRebarIsPerpendicular = false; if (EnclosingRebarDirection.ToLower() == "perpendicular") { enclosingRebarIsPerpendicular = true; } else if (EnclosingRebarDirection.ToLower() == "parallel") { enclosingRebarIsPerpendicular = false; } else { throw new Exception("Failed to convert string. Check EnclosingRebarDirection string. Please check input"); } l_dh = hook.GetDevelopmentLength(_HookType, c_side, c_extension, enclosingRebarIsPerpendicular, s_enclosing); return(new Dictionary <string, object> { { "l_dh", l_dh } }); }
public static Dictionary <string, object> RequiredTransverseTorsionAndShearRebar(ConcreteFlexureAndAxiaSection ConcreteSection, double T_u, RebarMaterial RebarMaterial, double c_transv_ctr, double s, double theta = 45, string Code = "ACI318-14") { //Default values double A_v = 0; //Calculation logic: TorsionShapeFactory tss = new TorsionShapeFactory(); ConcreteSectionFlexure sec = (ConcreteSectionFlexure)ConcreteSection.FlexuralSection; IConcreteTorsionalShape shape = tss.GetShape(sec.Section.SliceableShape, ConcreteSection.ConcreteMaterial.Concrete, c_transv_ctr); ConcreteSectionTorsion secT = new ConcreteSectionTorsion(shape); double T_u_lb_in = T_u * 1000.0; //internally Kodestruct uses lb - in units for concrete A_v = secT.GetRequiredTorsionTransverseReinforcementArea(T_u_lb_in, s, RebarMaterial.Material.YieldStress, theta); return(new Dictionary <string, object> { { "A_v", A_v } }); }
public static Dictionary <string, object> StraightBarTensionLapSpliceLengthDetailed(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b1, double d_b2, RebarMaterial RebarMaterial, string RebarSpliceClass = "B", string RebarCoatingType = "Uncoated", string RebarCastingPosition = "Top", double s_clear = 3, double c_c = 1.5, double A_tr = 0.44, double s_tr = 12, double n = 5, string Code = "ACI318-14") { //Default values double l_st = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = false; switch (RebarCoatingType) { case "Uncoated": IsEpoxyCoated = false; break; case "EpoxyCoated": IsEpoxyCoated = true; break; default: throw new Exception("Unrecognized rebar coating. Please check string input"); break; } Rebar rebar1 = new Rebar(d_b1, IsEpoxyCoated, mat); Rebar rebar2 = new Rebar(d_b2, IsEpoxyCoated, mat); bool IsTopRebar = false; switch (RebarCastingPosition) { case "Other": IsTopRebar = false; break; case "Top": IsTopRebar = true; break; default: throw new Exception("Unrecognized rebar casting position. Please check string input"); break; } TensionLapSpliceClass _RebarSpliceClass; bool IsValidRebarSpliceClass = Enum.TryParse(RebarSpliceClass, true, out _RebarSpliceClass); if (IsValidRebarSpliceClass == false) { throw new Exception("Failed to convert string. RebarSpliceClass not recognzed (A and B are acceptable inputs). Please check input"); } CalcLog log = new CalcLog(); TensionLapSplice ls = new TensionLapSplice(ConcreteMaterial.Concrete, rebar1, rebar2, s_clear, c_c, IsTopRebar, A_tr, s_tr, n, _RebarSpliceClass, log); l_st = ls.Length; return(new Dictionary <string, object> { { "l_st", l_st } }); }
/// <summary> /// /// </summary> /// <param name="h_total">Total height (including boundary zones)</param> /// <param name="t_w">Wall web thickness</param> /// <param name="RebarSizeId">Rebar Id</param> /// <param name="N_curtains">Number of rebar curtains</param> /// <param name="s">Bar spacing</param> /// <param name="c_edge">Concrete cover to center of rebar at wall ege</param> /// <param name="BoundaryZoneTop">Boundary zone object</param> /// <param name="BoundaryZoneBottom">Boundary zone object</param> /// <param name="ConcreteMaterial">Concrete material</param> /// <param name="LongitudinalRebarMaterial">Rebar material</param> /// <returns></returns> public static ShearWallSection ByWallGeometryAndBoundaryZones(double h_total, double t_w, string RebarSizeId, double N_curtains, double s, double c_edge, BoundaryZone BoundaryZoneTop, BoundaryZone BoundaryZoneBottom, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial) { return(new ShearWallSection(h_total, t_w, RebarSizeId, N_curtains, s, c_edge, BoundaryZoneTop, BoundaryZoneBottom, ConcreteMaterial, LongitudinalRebarMaterial)); }
private List <KodestructAci.RebarPoint> GetLongitudinalBars(KodestructSection.Interfaces.ISectionI shape, double h_total, double t_w, string RebarSizeId, double N_curtains, double s, double c_edge, BoundaryZone BoundaryZoneTop, BoundaryZone BoundaryZoneBottom, RebarMaterial LongitudinalRebarMaterial) { List <KodestructAci.RebarPoint> BzTopBars = GetBoundaryZoneBars(BoundaryZoneTop, LongitudinalRebarMaterial, new Point2D(0.0, shape.d / 2.0 - BoundaryZoneTop.h / 2.0), true); List <KodestructAci.RebarPoint> BzBottomBars = GetBoundaryZoneBars(BoundaryZoneBottom, LongitudinalRebarMaterial, new Point2D(0.0, -(shape.d / 2.0) + BoundaryZoneTop.h / 2.0), false); List <KodestructAci.RebarPoint> retBars = null; if (N_curtains != 0) { List <KodestructAci.RebarPoint> WallBars = GetWallBars(h_total - (BoundaryZoneTop.h + BoundaryZoneBottom.h), t_w, RebarSizeId, N_curtains, s, c_edge, LongitudinalRebarMaterial); retBars = BzTopBars.Concat(BzBottomBars).Concat(WallBars).ToList(); } else { retBars = BzTopBars.Concat(BzBottomBars).ToList(); } return(retBars); }
/// <summary> /// Rectangular section with reinforcement doubly reinforced /// </summary> /// <param name="b">Width of compression face of member</param> /// <param name="h">Overall thickness, height, or depth of member</param> /// <param name="A_sTop">Total area of top reinforcement</param> /// <param name="A_sBot">Total area of bottom reinforcement</param> /// <param name="c_cntr">Concrete cover to tension rebar centroid</param> /// <param name="ConcreteMaterial">Concrete material</param> /// <param name="LongitudinalRebarMaterial">Rebar material for longitudinal bars</param> /// <param name="hasTies">Identifies if member has ties around longitudinal reinforcement</param> /// <returns name="RectangularSectionDoublyReinforced"> Section [OBJECT] </returns> public static RectangularSectionDoublyReinforced ByWidthHeigthAndReinforcementArea(double b, double h, double A_sTop, double A_sBot, double c_cntr, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool hasTies = true) { return(new RectangularSectionDoublyReinforced(b, h, A_sTop, A_sBot, c_cntr, ConcreteMaterial, LongitudinalRebarMaterial)); }
/// <summary> /// Rectangular section with reinforcement on 4-sides /// </summary> /// <param name="b">Width of compression face of member</param> /// <param name="h">Overall thickness, height, or depth of member</param> /// <param name="A_sTopBottom">Total area of top/bottom reinforcement (per face)</param> /// <param name="A_sLeftRight">Total area of reinforcement on left-hand/right-hand side face (per face)</param> /// <param name="c_cntrTopBottom">Concrete cover to tension rebar centroid (top or bottom face)</param> /// <param name="c_cntrLeftRight">Concrete cover to tension rebar centroid (side faces)</param> /// <param name="ConcreteMaterial">Concrete material</param> /// <param name="LongitudinalRebarMaterial">Rebar material for longitudinal bars</param> /// <param name="hasTies">Identifies if member has ties around longitudinal reinforcement</param> /// <returns name="RectangularSectionFourSideReinforced"> Section [OBJECT] </returns> public static RectangularSectionFourSideReinforced ByWidthHeigthAndReinforcementArea(double b, double h, double A_sTopBottom, double A_sLeftRight, double c_cntrTopBottom, double c_cntrLeftRight, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool HasTies = true) { return(new RectangularSectionFourSideReinforced(b, h, A_sTopBottom, A_sLeftRight, c_cntrTopBottom, c_cntrLeftRight, ConcreteMaterial, LongitudinalRebarMaterial, HasTies)); }
public static Dictionary <string, object> StraightBarTensionDevelopmentLengthDetailed(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, string RebarCoatingType = "Uncoated", string RebarCastingPosition = "Top", double ExcessRebarRatio = 1.0, double s_clear = 3, double c_c = 1.5, double A_tr = 0.44, double s_tr = 12, double n = 5, string Code = "ACI318-14") { //Default values double l_d = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = false; switch (RebarCoatingType) { case "Uncoated": IsEpoxyCoated = false; break; case "EpoxyCoated": IsEpoxyCoated = true; break; default: throw new Exception("Unrecognized rebar coating. Please check string input"); break; } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); bool IsTopRebar = false; switch (RebarCastingPosition) { case "Other": IsTopRebar = false; break; case "Top": IsTopRebar = true; break; default: throw new Exception("Unrecognized rebar casting position. Please check string input"); break; } CalcLog log = new CalcLog(); DevelopmentTension d = new DevelopmentTension(ConcreteMaterial.Concrete, rebar, s_clear, c_c, IsTopRebar, ExcessRebarRatio, true, log); l_d = d.GetTensionDevelopmentLength(A_tr, s_tr, n); return(new Dictionary <string, object> { { "l_d", l_d } }); }
public static Dictionary <string, object> TwoWayShearStrengthProvidedByReinforcedSection(PunchingShearPerimeter PunchingShearPerimeter, ConcreteMaterial ConcreteMaterial, RebarMaterial RebarMaterial, double A_v, double s, string PunchingReinforcementType) { //Default values double phi_v_n = 0; //Calculation logic: Kodestruct.Concrete.ACI.ACI318_14.SectionalStrength.Shear.TwoWay.PunchingReinforcementType ReinforcementType; bool IsValidInputString = Enum.TryParse(PunchingReinforcementType, true, out ReinforcementType); if (IsValidInputString == false) { throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input"); } ReinforcedSectionTwoWayShear sec = new ReinforcedSectionTwoWayShear(ConcreteMaterial.Concrete, RebarMaterial.Material, PunchingShearPerimeter.PerimeterData, A_v, s, ReinforcementType); phi_v_n = sec.GetTwoWayStrength() / 1000.0; //convert to ksi return(new Dictionary <string, object> { { "phi_v_n", phi_v_n } }); }
public static Dictionary<string, object> StandardHookTensionDevelopmentLengthBasic(Concrete.ACI318.General.Concrete.ConcreteMaterial ConcreteMaterial, double d_b, RebarMaterial RebarMaterial, string HookType, string RebarCoatingType, double ExcessRebarRatio, double c_side, double c_extension, string EnclosingRebarDirection, double s_enclosing, string Code = "ACI318-14") { //Default values double l_dh = 0; //Calculation logic: IRebarMaterial mat = RebarMaterial.Material; bool IsEpoxyCoated = true; if (RebarCoatingType.ToLower() == "uncoated") { IsEpoxyCoated=false; } else if (RebarCoatingType.ToLower() == "epoxycoated") { IsEpoxyCoated =true; } else { throw new Exception("Unrecognized rebar coating string."); } Rebar rebar = new Rebar(d_b, IsEpoxyCoated, mat); CalcLog log = new CalcLog(); StandardHookInTension hook = new StandardHookInTension(ConcreteMaterial.Concrete, rebar, log, ExcessRebarRatio); HookType _HookType; bool IsValidHookTypeString = Enum.TryParse(HookType, true, out _HookType); if (IsValidHookTypeString == false) { throw new Exception("Failed to convert string. Check HookType string. Please check input"); } bool enclosingRebarIsPerpendicular = false; if (EnclosingRebarDirection.ToLower()=="perpendicular") { enclosingRebarIsPerpendicular = true; } else if (EnclosingRebarDirection.ToLower() == "parallel") { enclosingRebarIsPerpendicular = false; } else { throw new Exception("Failed to convert string. Check EnclosingRebarDirection string. Please check input"); } l_dh = hook.GetDevelopmentLength(_HookType, c_side, c_extension, enclosingRebarIsPerpendicular,s_enclosing); return new Dictionary<string, object> { { "l_dh", l_dh } }; }
/// <summary> /// Rebar point object by area /// </summary> /// <param name="A_b"> Area of an individual bar or wire </param> /// <param name="X_shp"> Point coordinate X (in shape coordinate system) </param> /// <param name="Y_shp"> Point coordinate Y (in shape coordinate system) </param> /// <param name="RebarMaterial"> Rebar material (object) </param> /// <returns name="RebarPoint"> Rebar point object. Create the object using input parameters first </returns> public static RebarPoint ByArea(double A_b, double X_shp, double Y_shp, RebarMaterial RebarMaterial) { return new RebarPoint(A_b,X_shp,Y_shp,RebarMaterial); }
internal RectangularSectionDoublyReinforced(double b, double h, double A_sTop, double A_sBot, double c_cntr, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool hasTies = false) { CrossSectionRectangularShape shape = new CrossSectionRectangularShape(ConcreteMaterial.Concrete, null, b, h); base.ConcreteMaterial = ConcreteMaterial; //duplicate save of concrete material into base Dynamo class KodestructAci.ConfinementReinforcementType ConfinementReinforcementType; if (hasTies == true) { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.Ties; } else { ConfinementReinforcementType = KodestructAci.ConfinementReinforcementType.NoReinforcement; } List <KodestructAci.RebarPoint> LongitudinalBars = new List <KodestructAci.RebarPoint>(); KodestructAci.Rebar TopRebar = new KodestructAci.Rebar(A_sTop, LongitudinalRebarMaterial.Material); KodestructAci.RebarPoint TopPoint = new KodestructAci.RebarPoint(TopRebar, new KodestructAci.RebarCoordinate() { X = 0, Y = h / 2.0 - c_cntr }); LongitudinalBars.Add(TopPoint); KodestructAci.Rebar BottomRebar = new KodestructAci.Rebar(A_sBot, LongitudinalRebarMaterial.Material); KodestructAci.RebarPoint BottomPoint = new KodestructAci.RebarPoint(BottomRebar, new KodestructAci.RebarCoordinate() { X = 0, Y = -h / 2.0 + c_cntr }); LongitudinalBars.Add(BottomPoint); KodestructAci.IConcreteFlexuralMember fs = new KodestructAci14.ConcreteSectionFlexure(shape, LongitudinalBars, new CalcLog(), ConfinementReinforcementType); this.FlexuralSection = fs; }
/// <summary> /// Rectangular section singly reinforced /// </summary> /// <param name="b">Width of compression face of member</param> /// <param name="h">Overall thickness, height, or depth of member</param> /// <param name="A_s">Area of nonprestressed longitudinal tension reinforcement</param> /// <param name="c_cntr">Concrete cover to tension rebar centroid</param> /// <param name="ConcreteMaterial">Concrete material</param> /// <param name="LongitudinalRebarMaterial">Rebar material for longitudinal bars</param> /// <param name="HasTies">Indicates if member has ties/strirrups</param> /// <returns name="RectangularSectionSinglyReinforced"> Section [OBJECT] </returns> public static RectangularSectionSinglyReinforced ByWidthHeigthAndReinforcementArea(double b, double h, double A_s, double c_cntr, ConcreteMaterial ConcreteMaterial, RebarMaterial LongitudinalRebarMaterial, bool HasTies = false) { return(new RectangularSectionSinglyReinforced(b, h, A_s, c_cntr, ConcreteMaterial, LongitudinalRebarMaterial, HasTies)); }