/// <summary>
        /// Returns the list of lines for calculation of punching shear perimeter properties
        /// </summary>
        /// <param name="Configuration">Configuration of punching perimeter</param>
        /// <param name="c_x">Column dimension parallel to X-axis</param>
        /// <param name="c_y">Column dimension  parallel to Y-axis</param>
        /// <param name="d"> Effective depth of punching shear perimeter</param>
        /// <param name="b_xCant">Slab cantilever extension beyond column face (along axis X)</param>
        /// <param name="b_yCant">Slab cantilever extension beyond column face (along axis Y)</param>
        /// <returns></returns>
        public PunchingPerimeterData GetPerimeterData(PunchingPerimeterConfiguration Configuration, double c_x, double c_y, double d,
                                                      double b_xCant, double b_yCant, Point2D ColumnCenter)
        {
            List <PerimeterLineSegment> PerimeterSegments = GetPerimeterSegments(Configuration, c_x, c_y, d, b_xCant, b_yCant);

            return(new PunchingPerimeterData(PerimeterSegments, ColumnCenter));
        }
 /// <summary>
 /// Two-way shear section
 /// </summary>
 /// <param name="Material">Concrete material</param>
 /// <param name="Segments">Shear perimeter segments</param>
 /// <param name="d">Effective slab section</param>
 /// <param name="b_x">Column dimension (normal to slab edge for edge column)</param>
 /// <param name="b_y">Column dimension (parallel to slab edge for edge column)</param>
 /// <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>
 /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
 public ConcreteSectionTwoWayShear(IConcreteMaterial Material, List <PerimeterLineSegment> Segments, double d,
                                   double b_x, double b_y, bool AtColumnFace, PunchingPerimeterConfiguration ColumnType, Point2D ColumnCenter)
 {
     this.Material     = Material;
     this.Segments     = Segments;
     this.d            = d;
     this.b_x          = b_x;
     this.b_y          = b_y;
     this.AtColumnFace = AtColumnFace;
     this.ColumnType   = ColumnType;
     this.ColumnCenter = ColumnCenter;
 }
 /// <summary>
 /// Two-way shear section
 /// </summary>
 /// <param name="Material">Concrete material</param>
 /// <param name="Segments">Shear perimeter segments</param>
 /// <param name="d">Effective slab section</param>
 /// <param name="b_x">Column dimension (normal to slab edge for edge column)</param>
 /// <param name="b_y">Column dimension (parallel to slab edge for edge column)</param>
 /// <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>
 /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
 public ConcreteSectionTwoWayShear(IConcreteMaterial Material, List<PerimeterLineSegment> Segments, double d,
     double b_x, double b_y, bool AtColumnFace, PunchingPerimeterConfiguration ColumnType, Point2D ColumnCenter)
 {
     this.Material    =Material      ;
     this.Segments    =Segments      ;
     this.d           =d             ;
     this.b_x         =b_x           ;
     this.b_y         =b_y           ;
     this.AtColumnFace=AtColumnFace  ;
     this.ColumnType = ColumnType    ;
     this.ColumnCenter = ColumnCenter;
 }
        /// <summary>
        /// Two-way shear section (constructor used for stress calculation)
        /// </summary>
        /// <param name="Material">Concrete material</param>
        /// <param name="Perimeter">Shear perimeter</param>
        /// <param name="d">Effective slab section</param>
        /// <param name="c_x">Column dimension (along X axis)</param>
        /// <param name="c_y">Column dimension (along Y axis)</param>
        /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
        ///  <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>

        public ConcreteSectionTwoWayShear(IConcreteMaterial Material, PunchingPerimeterData Perimeter, double d,
                                          double c_x, double c_y, PunchingPerimeterConfiguration ColumnType, bool AtColumnFace = true)
        {
            this.Material     = Material;
            this.Segments     = Perimeter.Segments;
            this.d            = d;
            this.c_x          = c_x;
            this.c_y          = c_y;
            this.ColumnType   = ColumnType;
            this.ColumnCenter = Perimeter.ColumnCentroid;
            this.AtColumnFace = AtColumnFace;
            cen = PunchingPerimeterCentroid;
            CalculatePerimeterProperties();
        }
Пример #5
0
        /// <summary>
        /// Returns the list of lines for calculation of punching shear perimeter properties
        /// </summary>
        /// <param name="Configuration">Configuration of punching perimeter</param>
        /// <param name="c_x">Column dimension parallel to X-axis</param>
        /// <param name="c_y">Column dimension  parallel to Y-axis</param>
        /// <param name="d"> Effective depth of punching shear perimeter</param>
        /// <returns></returns>
        public List<PerimeterLineSegment> GetPerimeterSegments(PunchingPerimeterConfiguration Configuration, double c_x, double c_y, double d)
        {
            double b_x; // punching perimeter dimension perpendicular to free edge
            double b_y; // punching perimeter dimension parallel to free edge 
            Point2D p1  =null;
            Point2D p2  =null;
            Point2D p3  =null;
            Point2D p4 = null;


            if (Configuration == PunchingPerimeterConfiguration.Interior)
	        {
		        b_x = c_x + d;
                b_y = c_y + d;

                p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
                p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
                p3 = new Point2D(b_x / 2.0, b_y / 2.0);
                p4 = new Point2D(b_x / 2.0, -b_y / 2.0);
	        }
            else if (Configuration == PunchingPerimeterConfiguration.EdgeLeft || Configuration == PunchingPerimeterConfiguration.EdgeRight)
            {
                b_x = c_x + d / 2.0;
                b_y = c_y + d;

                p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
                p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
                p3 = new Point2D(b_x / 2.0, b_y / 2.0);
                p4 = new Point2D(b_x / 2.0, -b_y / 2.0);
            }
            else if (Configuration == PunchingPerimeterConfiguration.EdgeTop || Configuration == PunchingPerimeterConfiguration.EdgeBottom)
            {
                b_x = c_x + d;
                b_y = c_y + d / 2.0;
            }
            else
            {
                b_x = c_x + d / 2.0;
                b_y = c_y + d/2.0;
            }


            p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
            p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
            p3 = new Point2D(b_x / 2.0, b_y / 2.0);
            p4 = new Point2D(b_x / 2.0, -b_y / 2.0);

            switch (Configuration)
            {
                case PunchingPerimeterConfiguration.Interior:
                   

                    return new List<PerimeterLineSegment>()
                    {
                        new PerimeterLineSegment(p1,p2 ),
                        new PerimeterLineSegment(p2,p3 ),
                        new PerimeterLineSegment(p3,p4 ),
                        new PerimeterLineSegment(p4,p1 )
                    };

                    break;
                case PunchingPerimeterConfiguration.EdgeLeft:


                    return new List<PerimeterLineSegment>()
                    {
                        new PerimeterLineSegment(p1,p4 ),
                        new PerimeterLineSegment(p4,p3 ),
                        new PerimeterLineSegment(p3,p2 ),
                    };

                case PunchingPerimeterConfiguration.EdgeRight:


                    return new List<PerimeterLineSegment>()
                    {
                        new PerimeterLineSegment(p4,p1 ),
                        new PerimeterLineSegment(p1,p2 ),
                        new PerimeterLineSegment(p2,p3 ),
                    };
                    break;

                case PunchingPerimeterConfiguration.EdgeTop:


                    return new List<PerimeterLineSegment>()
                    {
                        new PerimeterLineSegment(p2,p1 ),
                        new PerimeterLineSegment(p1,p4 ),
                        new PerimeterLineSegment(p4,p3 ),
                    };
                    break;

                case PunchingPerimeterConfiguration.EdgeBottom:


                    return new List<PerimeterLineSegment>()
                    {
                        new PerimeterLineSegment(p1,p2 ),
                        new PerimeterLineSegment(p2,p3 ),
                        new PerimeterLineSegment(p3,p4 ),
                    };
                    break;



                default:
                    throw new Exception("Unrecognized punching perimeter column type");
                    break;

                    throw new Exception("Corner cases were not implemented");
            }

        }
Пример #6
0
        /// <summary>
        /// Returns the list of lines for calculation of punching shear perimeter properties
        /// </summary>
        /// <param name="Configuration">Configuration of punching perimeter</param>
        /// <param name="c_x">Column dimension parallel to X-axis</param>
        /// <param name="c_y">Column dimension  parallel to Y-axis</param>
        /// <param name="d"> Effective depth of punching shear perimeter</param>
        /// <returns></returns>
        public List <PerimeterLineSegment> GetPerimeterSegments(PunchingPerimeterConfiguration Configuration, double c_x, double c_y, double d)
        {
            double  b_x; // punching perimeter dimension perpendicular to free edge
            double  b_y; // punching perimeter dimension parallel to free edge
            Point2D p1 = null;
            Point2D p2 = null;
            Point2D p3 = null;
            Point2D p4 = null;


            if (Configuration == PunchingPerimeterConfiguration.Interior)
            {
                b_x = c_x + d;
                b_y = c_y + d;

                p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
                p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
                p3 = new Point2D(b_x / 2.0, b_y / 2.0);
                p4 = new Point2D(b_x / 2.0, -b_y / 2.0);
            }
            else if (Configuration == PunchingPerimeterConfiguration.EdgeLeft || Configuration == PunchingPerimeterConfiguration.EdgeRight)
            {
                b_x = c_x + d / 2.0;
                b_y = c_y + d;

                p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
                p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
                p3 = new Point2D(b_x / 2.0, b_y / 2.0);
                p4 = new Point2D(b_x / 2.0, -b_y / 2.0);
            }
            else if (Configuration == PunchingPerimeterConfiguration.EdgeTop || Configuration == PunchingPerimeterConfiguration.EdgeBottom)
            {
                b_x = c_x + d;
                b_y = c_y + d / 2.0;
            }
            else
            {
                b_x = c_x + d / 2.0;
                b_y = c_y + d / 2.0;
            }


            p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
            p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
            p3 = new Point2D(b_x / 2.0, b_y / 2.0);
            p4 = new Point2D(b_x / 2.0, -b_y / 2.0);

            switch (Configuration)
            {
            case PunchingPerimeterConfiguration.Interior:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                    new PerimeterLineSegment(p3, p4),
                    new PerimeterLineSegment(p4, p1)
                });

                break;

            case PunchingPerimeterConfiguration.EdgeLeft:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p4),
                    new PerimeterLineSegment(p4, p3),
                    new PerimeterLineSegment(p3, p2),
                });

            case PunchingPerimeterConfiguration.EdgeRight:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p4, p1),
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                });

                break;

            case PunchingPerimeterConfiguration.EdgeTop:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p2, p1),
                    new PerimeterLineSegment(p1, p4),
                    new PerimeterLineSegment(p4, p3),
                });

                break;

            case PunchingPerimeterConfiguration.EdgeBottom:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                    new PerimeterLineSegment(p3, p4),
                });

                break;



            default:
                throw new Exception("Unrecognized punching perimeter column type");
                break;

                throw new Exception("Corner cases were not implemented");
            }
        }
        List <PerimeterLineSegment> GetPerimeterSegments(PunchingPerimeterConfiguration Configuration, double c_x, double c_y, double d,
                                                         double b_xCant = 0, double b_yCant = 0)
        {
            double  b_x; // punching perimeter dimension perpendicular to free edge
            double  b_y; // punching perimeter dimension parallel to free edge
            Point2D p1 = null;
            Point2D p2 = null;
            Point2D p3 = null;
            Point2D p4 = null;


            switch (Configuration)
            {
            case PunchingPerimeterConfiguration.Interior:
                b_x = c_x + d;
                b_y = c_y + d;

                p1 = new Point2D(-b_x / 2.0, -b_y / 2.0);
                p2 = new Point2D(-b_x / 2.0, b_y / 2.0);
                p3 = new Point2D(b_x / 2.0, b_y / 2.0);
                p4 = new Point2D(b_x / 2.0, -b_y / 2.0);

                break;

            case PunchingPerimeterConfiguration.EdgeLeft:
                b_y = c_y + d;

                p1 = new Point2D(-c_x / 2.0 - b_xCant, -b_y / 2.0);
                p2 = new Point2D(-c_x / 2.0 - b_xCant, b_y / 2.0);
                p3 = new Point2D(c_x / 2.0 + d / 2.0, b_y / 2.0);
                p4 = new Point2D(c_x / 2.0 + d / 2.0, -b_y / 2.0);
                break;

            case PunchingPerimeterConfiguration.EdgeRight:
                b_y = c_y + d;

                p1 = new Point2D(-c_x / 2.0 - d / 2.0, -b_y / 2.0);
                p2 = new Point2D(-c_x / 2.0 - d / 2.0, b_y / 2.0);
                p3 = new Point2D(c_x / 2.0 + b_xCant, b_y / 2.0);
                p4 = new Point2D(c_x / 2.0 + b_xCant, -b_y / 2.0);
                break;

            case PunchingPerimeterConfiguration.EdgeTop:
                b_x = c_x + d;
                p1  = new Point2D(-b_x / 2.0, -c_y / 2.0 - d / 2.0);
                p2  = new Point2D(-b_x / 2.0, c_y / 2.0 + b_yCant);
                p3  = new Point2D(b_x / 2.0, c_y / 2.0 + b_yCant);
                p4  = new Point2D(b_x / 2.0, -c_y / 2.0 - d / 2.0);
                break;

            case PunchingPerimeterConfiguration.EdgeBottom:
                b_x = c_x + d;
                p1  = new Point2D(-b_x / 2.0, -c_y / 2.0 - b_yCant);
                p2  = new Point2D(-b_x / 2.0, c_y / 2.0 + d / 2.0);
                p3  = new Point2D(b_x / 2.0, c_y / 2.0 + d / 2.0);
                p4  = new Point2D(b_x / 2.0, -c_y / 2.0 - b_yCant);
                break;

            case PunchingPerimeterConfiguration.CornerLeftTop:
                p1 = new Point2D(-c_x / 2.0 - b_xCant, -c_y / 2.0 - d / 2.0);
                p2 = new Point2D(-c_x / 2.0 - b_xCant, c_y / 2.0 + b_yCant);
                p3 = new Point2D(c_x / 2.0 + d / 2.0, c_y / 2.0 + b_yCant);
                p4 = new Point2D(c_x / 2.0 + d / 2.0, -c_y / 2.0 - d / 2.0);
                break;

            case PunchingPerimeterConfiguration.CornerRightTop:
                p1 = new Point2D(-c_x / 2.0 - d / 2.0, -c_y / 2.0 - d / 2.0);
                p2 = new Point2D(-c_x / 2.0 - d / 2.0, c_y / 2.0 + b_yCant);
                p3 = new Point2D(c_x / 2.0 + b_xCant, c_y / 2.0 + b_yCant);
                p4 = new Point2D(c_x / 2.0 + b_xCant, -c_y / 2.0 - d / 2.0);
                break;

            case PunchingPerimeterConfiguration.CornerRightBottom:
                p1 = new Point2D(-c_x / 2.0 - d / 2.0, -c_y / 2.0 - b_yCant);
                p2 = new Point2D(-c_x / 2.0 - d / 2.0, c_y / 2.0 + d / 2.0);
                p3 = new Point2D(c_x / 2.0 + b_xCant, c_y / 2.0 + d / 2.0);
                p4 = new Point2D(c_x / 2.0 + b_xCant, -c_y / 2.0 - b_yCant);
                break;

            case PunchingPerimeterConfiguration.CornerLeftBottom:
                p1 = new Point2D(-c_x / 2.0 - b_xCant, -c_y / 2.0 - b_yCant);
                p2 = new Point2D(-c_x / 2.0 - b_xCant, +c_y / 2.0 + d / 2.0);
                p3 = new Point2D(c_x / 2.0 + d / 2.0, c_y / 2.0 + b_yCant);
                p4 = new Point2D(c_x / 2.0 + d / 2.0, -c_y / 2.0 - b_yCant);
                break;

            default:
                break;
            }


            switch (Configuration)
            {
            case PunchingPerimeterConfiguration.Interior:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                    new PerimeterLineSegment(p3, p4),
                    new PerimeterLineSegment(p4, p1)
                });

                break;

            case PunchingPerimeterConfiguration.EdgeLeft:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p4),
                    new PerimeterLineSegment(p4, p3),
                    new PerimeterLineSegment(p3, p2),
                });

            case PunchingPerimeterConfiguration.EdgeRight:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p4, p1),
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                });

                break;

            case PunchingPerimeterConfiguration.EdgeTop:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p2, p1),
                    new PerimeterLineSegment(p1, p4),
                    new PerimeterLineSegment(p4, p3),
                });

                break;

            case PunchingPerimeterConfiguration.EdgeBottom:


                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                    new PerimeterLineSegment(p3, p4),
                });

                break;

            case PunchingPerimeterConfiguration.CornerLeftTop:

                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p3, p4),
                    new PerimeterLineSegment(p4, p1),
                });

                break;

            case PunchingPerimeterConfiguration.CornerRightTop:

                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p4, p1),
                    new PerimeterLineSegment(p1, p2),
                });

                break;

            case PunchingPerimeterConfiguration.CornerLeftBottom:

                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p2, p3),
                    new PerimeterLineSegment(p3, p4),
                });

                break;

            case PunchingPerimeterConfiguration.CornerRightBottom:

                return(new List <PerimeterLineSegment>()
                {
                    new PerimeterLineSegment(p1, p2),
                    new PerimeterLineSegment(p2, p3),
                });

                break;

            default:
                throw new Exception("Unrecognized punching perimeter column type");
                break;

                throw new Exception("Corner cases were not implemented");
            }
        }
        /// <summary>
        /// Two-way shear section (constructor used for stress calculation)
        /// </summary>
        /// <param name="Perimeter">Shear perimeter</param>
        /// <param name="d">Effective slab section</param>
        /// <param name="c_x">Column dimension (along X axis)</param>
        /// <param name="c_y">Column dimension (along Y axis)</param>
        /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
        ///  <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>

        public ConcreteSectionTwoWayShear(PunchingPerimeterData Perimeter, double d,
                                          double c_x, double c_y, PunchingPerimeterConfiguration ColumnType, bool AtColumnFace = true) : this(null,
                                                                                                                                              Perimeter, d, c_x, c_y, ColumnType, AtColumnFace)
        {
        }
 /// <summary>
 /// Two-way shear section
 /// </summary>
 /// <param name="Material">Concrete material</param>
 /// <param name="Segments">Shear perimeter segments</param>
 /// <param name="d">Effective slab section</param>
 /// <param name="b_x">Column dimension (normal to slab edge for edge column)</param>
 /// <param name="b_y">Column dimension (parallel to slab edge for edge column)</param>
 /// <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>
 /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
 public ConcreteSectionTwoWayShear(IConcreteMaterial Material, List <PerimeterLineSegment> Segments, double d,
                                   double b_x, double b_y, bool AtColumnFace, PunchingPerimeterConfiguration ColumnType)
     : this(Material, Segments, d, b_x, b_y, AtColumnFace, ColumnType, new Point2D(0.0, 0.0))
 {
 }
        /// <summary>
        /// Two-way shear section
        /// </summary>
        /// <param name="Material">Concrete material</param>
        /// <param name="Segments">Shear perimeter segments</param>
        /// <param name="d">Effective slab section</param>
        /// <param name="b_x">Column dimension (normal to slab edge for edge column)</param>
        /// <param name="b_y">Column dimension (parallel to slab edge for edge column)</param>
        /// <param name="AtColumnFace">Identifies if the section is adjacent to column face (typical) or away from column face (as is the case with shear studs away from the face)</param>
        /// <param name="ColumnType">Identifies if the column is located at the interior, slab edge, or slab corner</param>
        public ConcreteSectionTwoWayShear(IConcreteMaterial Material, List<PerimeterLineSegment> Segments, double d,
            double b_x, double b_y, bool AtColumnFace, PunchingPerimeterConfiguration ColumnType)
            :this(Material,Segments,d,b_x,b_y,AtColumnFace,ColumnType, new Point2D(0.0,0.0))
        {

        }