Introducing dx-punch

An open-source python package for punching-shear design with Eurocode

Georgia Stavropoulou
d-e weblog
7 min readMar 8, 2019

--

Since July 2018, we have been working on developing software for the structural design of concrete slabs and footings in punching shear.

The were two main objectives put forward at the conceptual stage:

  1. To make an open-source software module.
  2. To provide an extensive coverage of technical use-cases.

A few months later, after extensive testing, and the baptism by fire in the design of a running structural project, we are pleased to announce the release of version 1.0.0 of the package dx-punch, written in Python.

The design checks on the raft slab of the Metro Hotel.

The reason for opening the source-code is simple: Anyone can use it, anyone can contribute.

Building a community of open-source engineering software may accommodate collaboration in the field, advance the quality of existing solutions, and bring engineering practice up-to-speed with the organizational and technical status of the digital era.

A short walk through the implementation

The goal of punching-shear design is to ensure that the shear-stress capacity of a slab or footing satisfies the respective demand due to the direct act of column forces. Imagine a piece of cardboard, and a pencil standing on that piece of cardboard. Also imagine a program that checks whether the pencil will punch the cardboard if we put a given load on the pencil. dx-punch does exactly that check but for a slab and a column instead of a cardboard box and a pencil.

A pencil on a cardboard (or for that matter, a cardboard on several pencils) doesn’t work that much differently from a column on a slab.

This proves to be a problem of rather geometric nature: the design quantities depend heavily on the geometry of the column relative to the slab.

Hence the program has been built on top of existing python libraries that support geometric operations and vector manipulation, such as mathutils from blender and matplotlib. As we say in the open-source world we’re standing on the shoulders of giants. This means that we are not trying to reinvent things that others already did quite well.

dx-punch is the top package on a stack of python packages, all developed in this context separately to increase the modularity of the solution. The resulting hierarchy is the following:

Each package has a different scope, specializing from top to the bottom.

At the higher level, dx-punch supports the following features, with reference to Eurocode 2:

  1. Evaluation of basic control perimeters (§6.4.2, Eurocode 2):
  • Support for columns of arbitrary polygonal shape.
  • Support for drop panels. Drop panels are thicker parts of the slab over columns (like ancient column capitals) that help the slab bear the punching force. They are usually used when additional reinforcement bars are not enough to control the punching shear. .
  • Automatic classification of columns into internal, edge, and corner.
This sketch shows automatic classification of the columns and the areas of the slab that punching shear is affecting in each case (control perimeters).

2. Evaluation of design shear stress for bi-axial eccentricity of all classes of columns, using three methods:

  • Analytical via numerical evaluation of the perimeter modulus W1 (6.40, Eurocode 2) in both directions.
  • Approximate through Eq. (6.43, Eurocode 2).
  • Simplified through §6.4.3(6), Eurocode 2.

3. Design checks according to §6.4.4, Eurocode 2:

  • Support for declaration of soil-pressure on raft-slabs (lowest basement slabs, that is):

> Uniform
> Discrete pressure field

4. Evaluation of a code-compliant shear-cage layout according to provisions of §6.4.5, Eurocode 2.

Furthermore, dx-punch provides nice sketches of the slab in question using matplotlib and outputs the results in tabular reports through pandas. The programming interface also allows programmatic access to these visualization and reporting utilities.

Not yet supported:

  • Slab openings near the columns (near enough to intrude into the control perimeters) [§6.4.2(3)].
  • Favorable effect of in-plane normal stresses in Eq. (6.47).
  • Evaluation of radial layout of shear reinforcement (Fig. 6.22A).

How to use it or contribute?

Have a look at the page where the source code lives.

You can also read the documentation to see all the functions and them in your own code.

Full documentation here.

A short example

Let’s try to solve a slab together, step by step. You will need to edit some files that look like code, but don’t worry, it’s not that scary and we’ll guide you all the way through.

The easiest way to try out dx-punch is by using binder. Visit this link to start up a temporary instance.

When your instance launches you should see the following screen:

A bit about what we are seeing here

The first block of code sets up a few things. These are needed for our program to perform its calculations. You can see that it uses matplotlib, dx_punch and other libraries.

Right about the middle of the page you can see a plan view of our slab.

The slab before our modifications.

The slab and columns are described in the second box named A tentative input data structure. Scroll up a little to see it.

See those numbers in green? These are the input values. If you want to change for example the thickness of the slab just edit the thickness variable.

Editing slab thickness.

Then you can see the parameters of the materials used as well as the slab reinforcement bars.

Following are the columns on the slab: if you want to add another column just add a new column section as follows: copy the part between the curly brackets (including the brackets) and edit the various values (most notably the origin).

Adding a new column in dx-punch.

See? Piece of cake.

Notice that matching brackets go green when you click on them. Also do not forget to add a comma between the two columns.

Now it’s time to run the program again. Click in the second box (where you added the new column) and press ⏯ Run in the toolbar above. You will notice that the focus will shift one box below.

Running a jupyter cell.

Repeat this until you reach the cell with the slab plan. Click on Run again and you will see the new column we added displayed below.

New column appears.

Now the plan view of our slab looks like this:

Slab with the new column.

Hit Run one last time and you will get the results of the calculation printed just below. The results for Column 1 look like this:

==> Column 1:
-> Column “C9432”:
— Results:
* Position: corner
* Geometry:
+ Centroid:
— x [m]: 0.125
— y [m]: 11.325
+ Bounding box:
— bx [mm]: 250.0
— by [mm]: 250.0
* Effective depth [mm]: 280.0
* Tensile Reinforcement:
+ Effective tensile region:
— bx [mm]: 1090.0
— by [mm]: 1090.0
— Centroid (offset):
* dx [mm]: 420.0
* dy [mm]: -420.0
+ x-axis: T10@200 + T10@200
+ y-axis: T10@200 + T10@200
+ ρx: 0.0028
+ ρy: 0.0028
+ ρl: 0.0028
* Design:
+ Perimeter u0:
— Most adverse loadcase:
* name: LC0
* Ved [kN]: 111.0
* Mex [kN.m]: 25.0
* Mey [kN.m]: 22.0
* ex [mm]: -198.2
* ey [mm]: 225.2
— β: 2.919
— ved [kPa]: 2314.4
— vrd [kPa]: 5280.0
— DCR (ved/vrd): 0.438
+ Perimeter u1:
— Most adverse loadcase:
* name: LC0
* Ved [kN]: 111.0
* Mex [kN.m]: 25.0
* Mey [kN.m]: 22.0
* ex [mm]: -198.2
* ey [mm]: 225.2
— β: 1.407
— ved [kPa]: 404.3
— vrd [kPa]: 480.5
— DCR (ved/vrd): 0.841

This approach means that you can easily solve many slabs by just editing the numbers and using copy and paste. However a graphical user interface is in the works, at least for a single column. Unfortunately we can’t promise if and when it will be ready. For now you can create your own jupyter notebooks in binder using the example above as a template. You can even make them pretty enough to be presented as reports. You can find more information on how to do all that in the help menu.

Our references:

--

--