# 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

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.

##### 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.

##### 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.

### 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.

### 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.

### Plates

##### 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)
##### T-Stubs

A T-Stub is a plate/flange under flexure in a connection due to bolts tension forces. As explained in EC3 Art 6.2.4.1 , 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.

##### Stiffeners

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

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)