Calculation Engine


Braced Backend

We called our backend engine caleng. The web application works on top of this engine. Caleng engine is a powerfull set of tools to check steel structure connections parts. It is written in Python, and joint elements are represented as Python objects. It will be released as open source.

How does it work?

When solving a connection, each part of the connection has its own parameters stored as an object, and this object is responsible of checking itself. This means that we can have a very controlled and reliable code. Every enginesheet uses the same piece of code when checking a bolt or a plate. After all, it is only OOP.

Numbers are stored as Python Decimals and every magnitude stored is unit awareness. Probably you will see adimensional factors appearing with explicit units dimensionless. This approach gives us a unit consistency through the whole process. User inputs, database stored values, outputs and reports. It is not posible (at least very hard to happend) a unit conversion error.

Coordinate systems

Our coordinate system approach is based on frame coordinate system on SAP 2000 / Etabs. This is a mainstream standard in structural analysis software. See SAP2000 reference docs.

In a SAP2000 frame, there are three axis named 1-2-3. It is a right handed cartesian system. The first axis is directed along the length of the element at its centroid, and the second and third axis are aligned with the strong and weak axis of the frame section. In beams, SAP2000 assigns 2 to +Z and 3 to the horizontal. In columns, 2 is aligned with X and 3 with Y.

We also use SAP2000 Schema for Forces Inputs. In a SAP2000 frame, you have this set of forces: P,V2,V3,M2,M3,T. It is usefull if you want to dump frame forces to an enginesheet.

With Eurocode enginesheets, we use EC2 notations for distance between bolt rows and columns. They are usually identified with p1, p2, e1 and e2, being 1 the direction of load, and 2 the traversal. Ussualy, this approach differs from the SAP2000 numbered axis. Braced engine tries to align axis 2 with e2. Then, e1 can be switched between P and V3. Do not worry about this, it always will be checked both directions.

Similar approach applies to weldings. The system always tries to align V3 with the longitudinal direction of the main welding and V2 to the transversal direction of the welding. This is FYI, you may need it when you read a report.


Weldings are assumed to be made with at least same material grade as connected elements. A welded plate will check its weldings assuming his own material grade.

Bolt forces distribution

The calculation engine solves bolt forces distribution with the following methods:

Moments in a preloaded bolt group:

When a preloaded bolt group is set up, the tension force Ft,Ed of a bolt is solved as it folows:

If a moment is acting, it is assumed a plain stress distribution all over the bolt group. Then, each bolt i has a distance di to the centroid, and an area Ai. The bolt group inertia is I = Σ (Ai * di2).

Forces in each bolt will be Fi = M*di*Ai/I since tensions are σi = M*di/I. This is done for each moment, having Ft,Ed,M2 due to M2, Ft,Ed,M3 due to M3, and Ft,Ed,P due to P. The linear sum of this three is the value to check against Ft,Rd.

Preloaded bolt forces distribution schema

Moments in a snug-tight bolt group:

When a snug-tight bolt group is set up, the tension force Ft,Ed of a bolt is solved assuming that both, bolts and plates, are loaded by moments. Bolts working in tension and plates in compression.

Each bolt i has a distance di to the neutral line, and an area Ai. A virtual tension plate is created with a reduced width d = m * A / p, being m the number of columns, A the section area of the bolt, and p the distance between rows in the most loaded bolts.

The heigh of the compression zone will be c1 = (b-(d*b)1/2)/(b-d)*h. You obtain this from a simple statements: c1 + c = H and c1 / c = (d/b)1/2.

Having c1, the inertia of the connection is I = d * c3 / 3 + b * c13 / 3, and forces in each bolt will be Fi = M*c*Ai/I.

As in a preloaded bolt group, this is done for each direction of moment. The linear sum of the values is the resultant Ft,Ed to check against Ft,Rd.

Bolt forces distribution schema

Torsion in a bolt group:

The shear force Fv,Ed of a bolt is solved in the same way in both cases (snug-tight and preloaded). The approach is the same as with moments in preloaded bolt groups.

Each bolt i has a distance di to the centroid, and an area Ai. The bolt group inertia is I = Σ (Ai * di2).

Forces in each bolt will be Fv,i = M*di*Ai/I since tensions are σi = M*di/I. This value plus the two shear components is Fv,Ed.

Shear bolt forces distribution schema

Bolt Checking

Depending on the joint type, either all bolts are checked or only the worst one.

The following checks are done in snug-tight bolts:

Name Description Limit States Direction Check
Bolt Tension Bolt tension strength ULS Tension `F_(t,Ed) < F_(t,Rd)`
Bolt Shear Bolt shear strength ULS Shear `F_(v,Ed) < F_(v,Rd)`
Bolt Combo Combined bolt shear and tensions checking ULS Both shear and tension `F_(v,Ed)/F_(v,Rd) + F_(t,Ed)/(1.40*F_(t,Rd)) < 1.00`

Following checks are done in a preloaded bolt:

Name Description Limit States Direction Check
Bolt Tension Preloaded bolt tension strength ULS Tension `F_(t,Ed) < F_(t,Rd)`
Bolt Shear Bolt shear strength ULS Shear `F_(v,Ed) < F_(v,Rd)`
Bolt Sliding Bolt slip resistance SLS or/and ULS Shear `F_(v,Ed) < F_(s,Rd)`
Bolt Combo Sliding check with tension forces SLS or/and ULS Both shear and tension `F_(v,Ed) < F_(s,Rd,comb)`

Bolted plates will be checked according to the Plates Section.

Section position

When a profile is welded to a frontplate, it is located center-to-center unless a explicit eccentricity is given. The insertion point of a plate is at its center of gravity. The insertion point of a profile is sometimes located in a more usefull place as shown in the drawing.

Rotation and 2-axis movement can be provided. If both are provided, the section is first rotated and then traslated.

Profile positioning

Clash checking

When a clash check is needed between profiles/plates and bolts, a reference polygon is created to check if the bolt is inside (fail) or outside (pass). The typical offset is m = 2 * diameter. Then, each bolt axis must be outside the reference polygon.

For example, if you have a 100 mm pipe, and 20 mm diameter bolts, a 140 mm diameter shape will be created. If you have a H shape, you will have a contour as shown in the drawing.

If you have a section with corners, an arch is created. This is not the default behaviour of drawing tools (like AutoCad, Revit, etc), but it is the right approach to get a usefull clash check. The folowing picture shows a H shape profile with its boundary.

Clash check schema


Bolted Plates

For any bolted plate the following corporations are performed:

Name Description Limit States Direction Check
Dimensions Check bolt-to-edge, bolt-to-bolt and bolt-to-element distances --- 1-1, 2-2 ` e_min < e1, e2 < e_max`
` p_min < p1, p2 < p_max`
Plate Bearing Hole bearing due to a snug-tight bolt with shear loads.
Happens in SLS sliding preloaded joints too.
ULS Bolt Shear dir. `F_(b,Ed) = k_1 * alfa_b * f_u * d * t / Y_(M2)`
`F_(v,Ed) < F_(b,Ed)`
Block Tearing Plate block tearing. A piece of plate can be ripped by a group of bolts. ULS Bolt Shear dir. `V_(eff,Ed) < V_(eff,Rd)`
Punching Bolt holes punching. ULS Bolt Tension dir. `F_(t,Ed) < B_(p,Rd)`

A T-Stub is a plate/flange under flexure in a connection due to bolts tension forces. As explained in EC3 Art , an equivalent T-Stub may be used to model the design resistance of the following basic components:

  1. Column flange in bending
  2. End-plate in bending
  3. Flange cleat in bending
  4. Base plate in bending under tension

When solving the T-Stub, it is divided into single plate elements rounding each bolt. Each of them is then solved as a Simple T-Stub (having only 1 stiffened side) or a Corner T-Stub (having 2 stiffened sides). Each simple element is solved according the choosen code.

Corner rounding and weldings are ommited staying in the security side. The m decrement may be added in the future for more accurate results.

T-Stubs schema

Stiffeners will be continuous welded. Shall be checked assuming a buckling length of `0.75 * h_w` and the eurocode `c` buckling curve. For now, the calculation engine will only check if the stiffener is ultrastiff, meaning that it have an ineartia greater than:

If `a/h_w lt sqrt 2:` `I_(st) ge (1.5*h_w^3*t_w^3)/(a^2)`

If `a/h_w ge sqrt 2:` `I_(st) ge 0.75*h_w^3*t_w^3`

Stiffener inertia

If your beam is carrying out `V_(Ed)>V_(Rd)`, check a stiffener with P005 considering both the over-shear and the external load. This is your load:

`N_(Ed) = V_(Ed) - V_(b,Rd) + F_(Ed)`