예제 #1
0
        public void CornerSlabReturnsPunchingShearStressEqualForConfigurations()
        {
            IConcreteMaterial mat          = this.GetConcreteMaterial(4000, false);
            PerimeterFactory  f            = new PerimeterFactory();
            double            d            = 5.62;
            double            cx           = 20.00;
            double            cy           = 14.0;
            Point2D           ColumnCenter = new Point2D(0, 0);

            //_UpperRight
            PunchingPerimeterData      data_UpperRight = f.GetPerimeterData(PunchingPerimeterConfiguration.CornerLeftTop, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec_UpperRight  = new ConcreteSectionTwoWayShear(data_UpperRight, d, cx, cy, PunchingPerimeterConfiguration.CornerRightTop);
            double v_u_UpperRight = sec_UpperRight.GetCombinedShearStressDueToMomementAndShear(0 * 1000, 1326 * 1000, 0, 1.0, 1.0).v_max;

            //_LowerLeft
            PunchingPerimeterData      data_LowerLeft = f.GetPerimeterData(PunchingPerimeterConfiguration.CornerLeftTop, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec_LowerLeft  = new ConcreteSectionTwoWayShear(data_LowerLeft, d, cx, cy, PunchingPerimeterConfiguration.CornerLeftBottom);
            double v_u_LowerLeft = sec_LowerLeft.GetCombinedShearStressDueToMomementAndShear(0 * 1000, 1326 * 1000, 0, 1.0, 1.0).v_max;

            //_LowerRight
            PunchingPerimeterData      data_LowerRight = f.GetPerimeterData(PunchingPerimeterConfiguration.CornerLeftTop, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec_LowerRight  = new ConcreteSectionTwoWayShear(data_LowerRight, d, cx, cy, PunchingPerimeterConfiguration.CornerRightBottom);
            double v_u_LowerRight = sec_LowerRight.GetCombinedShearStressDueToMomementAndShear(0 * 1000, 1326 * 1000, 0, 1.0, 1.0).v_max;


            //_UpperLeft
            PunchingPerimeterData      data_UpperLeft = f.GetPerimeterData(PunchingPerimeterConfiguration.CornerLeftTop, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec_UpperLeft  = new ConcreteSectionTwoWayShear(data_UpperLeft, d, cx, cy, PunchingPerimeterConfiguration.CornerLeftTop);
            double v_u_UpperLeft = sec_UpperLeft.GetCombinedShearStressDueToMomementAndShear(0 * 1000, 1326 * 1000, 0, 1.0, 1.0).v_max;

            Assert.Equal(v_u_UpperRight, v_u_LowerLeft);
            Assert.Equal(v_u_UpperRight, v_u_LowerRight);
            Assert.Equal(v_u_UpperRight, v_u_UpperLeft);
        }
예제 #2
0
        internal PunchingShearPerimeter(string PunchingPerimeterConfiguration, double c_x, double c_y, double d,
                                        double b_xCant, double b_yCant, double X_ColumnCenter, double Y_ColumnCenter)
        {
            PunchingPerimeterConfiguration Configuration;
            bool IsValidInputString = Enum.TryParse(PunchingPerimeterConfiguration, true, out Configuration);

            if (IsValidInputString == false)
            {
                throw new Exception("Failed to convert string. Examples of acceptable values are Interior, EdgeLeft, CornerLeftTop. Please check input");
            }

            this.Configuration  = PunchingPerimeterConfiguration;
            this.c_x            = c_x;
            this.c_y            = c_y;
            this.d              = d;
            this.b_xCant        = b_xCant;
            this.b_yCant        = b_yCant;
            this.X_ColumnCenter = X_ColumnCenter;
            this.Y_ColumnCenter = Y_ColumnCenter;

            PerimeterFactory factory = new PerimeterFactory();

            this.PerimeterData = factory.GetPerimeterData(Configuration, c_x, c_y, d,
                                                          b_xCant, b_yCant, new Point2D(X_ColumnCenter, Y_ColumnCenter));
        }
예제 #3
0
        public void SlabPunchingConcentricReturnsValue()
        {
            IConcreteMaterial           mat      = this.GetConcreteMaterial(3000, false);
            PerimeterFactory            f        = new PerimeterFactory();
            double                      d        = 4.75;
            double                      b_1      = 26.0;
            double                      b_2      = 12.0;
            List <PerimeterLineSegment> segments = f.GetPerimeterSegments(PunchingPerimeterConfiguration.Interior, b_1, b_2, d);
            ConcreteSectionTwoWayShear  sec      = new ConcreteSectionTwoWayShear(mat, segments, d, b_1, b_2, true, PunchingPerimeterConfiguration.Interior);
            double                      phi_v_c  = sec.GetTwoWayStrengthForUnreinforcedConcrete() / 1000.0; //convert to kips

            double refValue        = 71.3 / d / 95.0;                                                       //from example
            double actualTolerance = EvaluateActualTolerance(phi_v_c, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
예제 #4
0
        public void EdgeSlabReturnsPerimeterJ_yPropertyFor3SidedPerimeterEdgeLeft()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 18.0;
            double                     cy           = 18.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.EdgeLeft, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.EdgeLeft);
            double                     J_y          = sec.GetJy(sec.AdjustedSegments);

            double refValue        = 17630; //from example  (page 19)
            double actualTolerance = EvaluateActualTolerance(J_y, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
예제 #5
0
        public void InteriorSlabReturnsPerimeter_gamma_vy_Property()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 12.0;
            double                     cy           = 20.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.Interior, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.Interior);
            double                     gamma_vy     = sec.Get_gamma_vy(cx + d, cy + d);

            double refValue        = 0.36; //from example
            double actualTolerance = EvaluateActualTolerance(gamma_vy, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
예제 #6
0
        public void EdgeSlabReturnsPunchingShearStressFor3SidedPerimeterEdgeLeft()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 18.0;
            double                     cy           = 18.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.EdgeLeft, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.EdgeLeft);
            double                     v_u          = sec.GetCombinedShearStressDueToMomementAndShear(0 * 1000, 1720 * 1000, 36000).v_min;

            double refValue        = -338; //from example  (page 19)
            double actualTolerance = EvaluateActualTolerance(v_u, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
        public void InteriorSlabReturnsPerimeterJ_yProperty()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 12.0;
            double                     cy           = 20.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.Interior, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.Interior);
            double                     J_y          = sec.GetJy(sec.AdjustedSegments);

            double refValue        = 27474; //from example  (page 19)
            double actualTolerance = EvaluateActualTolerance(J_y, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
        public void EdgeSlabReturnsPerimeterJ_yPropertyFor3SidedPerimeterMG()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3500, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.5;
            double                     cx           = 12.0;
            double                     cy           = 16.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.EdgeLeft, cx, cy, d, 4.0, 4.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.EdgeLeft);
            double                     J_y          = sec.GetJy(sec.AdjustedSegments);

            double refValue        = 13200.0;
            double actualTolerance = EvaluateActualTolerance(J_y, refValue);

            Assert.LessOrEqual(actualTolerance, tolerance);
        }
예제 #9
0
        public void SlabPunchingStrengthReturnsValue()
        {
            IConcreteMaterial     mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory      f            = new PerimeterFactory();
            double                d            = 4.75;
            double                b_1          = 26.0;
            double                b_2          = 12.0;
            Point2D               ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData perimeter    = f.GetPerimeterData(PunchingPerimeterConfiguration.Interior, b_1, b_2, d, 0, 0, ColumnCenter);
            //ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(mat, perimeter, d, b_1, b_2, true, PunchingPerimeterConfiguration.Interior);
            ConcreteSectionTwoWayShear sec = new ConcreteSectionTwoWayShear(mat, perimeter, d, b_1, b_2, PunchingPerimeterConfiguration.Interior);
            double phi_v_c = sec.GetTwoWayStrengthForUnreinforcedConcrete() / 1000.0; //convert to kips

            double refValue        = 71.3 / d / 95.0;                                 //from example
            double actualTolerance = EvaluateActualTolerance(phi_v_c, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
예제 #10
0
        public void InteriorSlabReturnsPunchingShearStress()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 12.0;
            double                     cy           = 20.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.Interior, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.Interior);
            double                     gamma_vx     = 0.0;
            double                     gamma_vy     = 0.36; //from example
            double                     v_u          = sec.GetCombinedShearStressDueToMomementAndShear(0, 600 * 1000, 110 * 1000, gamma_vx, gamma_vy).v_max;

            double refValue        = 294; //from example
            double actualTolerance = EvaluateActualTolerance(v_u, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
예제 #11
0
        public void SlabPunchingMomentAndShearReturnsStressMG()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.5;
            double                     cx           = 12.0;
            double                     cy           = 16.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.EdgeLeft, cx, cy, d, 4.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.EdgeLeft);
            double                     gamma_v      = 1.0 - 0.616;
            double                     M_u          = 6400.0 / gamma_v * 12;
            double                     V_u          = 35300.0;
            double                     phi_v_c      = sec.GetCombinedShearStressDueToMomementAndShear(0, M_u, V_u, 0, gamma_v).v_max / 1000.0; //note: moment is adjusted to be at column centroid

            double refValue        = 0.144;                                                                                                    //from example
            double actualTolerance = EvaluateActualTolerance(phi_v_c, refValue);

            Assert.True(actualTolerance <= tolerance);
        }
예제 #12
0
        public void CornerSlabReturnsPunchingShearStress()
        {
            IConcreteMaterial          mat          = this.GetConcreteMaterial(3000, false);
            PerimeterFactory           f            = new PerimeterFactory();
            double                     d            = 5.62;
            double                     cx           = 20.00;
            double                     cy           = 20.0;
            Point2D                    ColumnCenter = new Point2D(0, 0);
            PunchingPerimeterData      data         = f.GetPerimeterData(PunchingPerimeterConfiguration.CornerLeftTop, cx, cy, d, 0.0, 0.0, ColumnCenter);
            ConcreteSectionTwoWayShear sec          = new ConcreteSectionTwoWayShear(data, d, cx, cy, PunchingPerimeterConfiguration.CornerLeftTop);
            double                     M_uy         = -381.0 * 1000; // moment with adjustment for perimeter eccentricity
            double                     M_ux         = 195.0 * 1000;  // moment with adjustment for perimeter eccentricity

            double v_u = sec.GetCombinedShearStressDueToMomementAndShear(M_ux, M_uy, 6000.0, 0.4, 0.267).v_max;

            double refValue        = 192.0; //from example
            double actualTolerance = EvaluateActualTolerance(v_u, refValue);

            Assert.True(actualTolerance <= tolerance);
        }