Biagini Nava-Master Thesis

Download as pdf or txt
Download as pdf or txt
You are on page 1of 477

POLITECNICO DI MILANO

School of Civil, Environmental and Territorial Engineering


Master’s Degree in Structural Engineering

Form-Finding and Mechanical


Behaviour of Cable and Membrane
Structures

Relator: Prof. Giorgio NOVATI

Master’s Thesis developed by:


Andrea Luca BIAGINI (Matr. 878180)
Alessio NAVA (Matr. 863396)

Academic Year 2017/2018


Form-Finding and Mechanical
Behaviour of Cable and Membrane
Structures

Sep 27, 2018


Table of Contents

1 Introduction 3
1.1 Cables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Membranes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 Form finding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Programming language and FEM software . . . . . . . . . . . . . . . . . . . 8
1.4.1 Python and PyCharm . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 GMSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4.3 CalculiX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.4 Code_Aster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.4.5 Dlubal RFEM5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5 Examples of tensile structures . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 Force density method 17


2.1 Mathematical formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Surface stress density method 21


3.1 Mathematical formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2 Orthogonality of the forces in the elements . . . . . . . . . . . . . . . . . . . 24
3.2.1 Method which employs the equivalent nodal loads . . . . . . . . . . . 24
3.2.2 Method which employ the principle of virtual works . . . . . . . . . 27

4 Dynamic relaxation method 31


4.1 Mathematical formulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 Convergence control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.1 Mass and viscous damping . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.2 Kinematic damping . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

5 Finite element analysis 37


5.1 Modelling and discretization . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Finite elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.1 Cable modellization . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2.2 Membrane modellization . . . . . . . . . . . . . . . . . . . . . . . . 40
5.3 Non-linear analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

i
5.3.1 Newton-Raphson method . . . . . . . . . . . . . . . . . . . . . . . . 44
5.3.2 Newton-Krylov method . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.4 Constitutive models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.1 Isotropic liner elastic material . . . . . . . . . . . . . . . . . . . . . 49
5.4.2 Orthotropic linear elastic material . . . . . . . . . . . . . . . . . . . 51
5.4.3 Isotropic elasto-plastic material . . . . . . . . . . . . . . . . . . . . . 52
5.4.3.1 One dimensional elasto-plastic constitutive law . . . . . . . . 52
5.4.3.2 Three dimensional elasto-plastic constitutive law . . . . . . . 54

6 Cutting pattern 59
6.1 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.1.1 Hypar membrane . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.1.2 Hexagonal membrane . . . . . . . . . . . . . . . . . . . . . . . . . . 63

7 Analytical form-finding for cable structures 65


7.1 Form finding for the catenary cable . . . . . . . . . . . . . . . . . . . . . . . 65
7.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
7.1.2 Analytical formulation . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.1.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.1.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.1.5 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.1.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.2 Inverse form-finding for a cable under a distributed load . . . . . . . . . . . . 73
7.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
7.2.2 Analytical formulation . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.2.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
7.2.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.2.5 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
7.2.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

8 Cables and membranes analysed with FEM 83


8.1 Catenary cable under its own weight . . . . . . . . . . . . . . . . . . . . . . . 83
8.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.1.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.1.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.1.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.1.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.1.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.2 Parabola cable under a distributed load . . . . . . . . . . . . . . . . . . . . . 96
8.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.2.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
8.2.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
8.2.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.2.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.2.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
8.3 Cable under a concentrated load . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.3.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
8.3.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

ii
8.3.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.3.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.3.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
8.4 Plastic cable under a concentrated load . . . . . . . . . . . . . . . . . . . . . 121
8.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8.4.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
8.4.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.4.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.4.5 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
8.5 Cable net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.5.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.5.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
8.5.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.5.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.5.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8.6 Plane membrane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.6.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
8.6.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
8.6.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
8.6.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.6.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.7 Plane orthotropic membrane . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.7.1 Intoduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.7.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
8.7.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8.7.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.7.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.7.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
8.8 Plastic plane membrane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.8.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
8.8.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
8.8.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.8.5 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.9 Plane membrane with collaborating cables . . . . . . . . . . . . . . . . . . . 220
8.9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8.9.2 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
8.9.3 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
8.9.4 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.9.5 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
8.9.6 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246

9 Form-finding for pretensioned cable and membrane structures 247


9.1 Code structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
9.1.1 Command line interface . . . . . . . . . . . . . . . . . . . . . . . . 248
9.1.2 Main entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

iii
9.1.3 Input parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.1.4 Output parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
9.1.5 Example problem definition . . . . . . . . . . . . . . . . . . . . . . 258
9.1.6 Test functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
9.1.7 Example run . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
9.1.8 Auxiliary functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
9.1.8.1 Lenght as norm . . . . . . . . . . . . . . . . . . . . . . . . 261
9.1.8.2 Area with Erone’s formula . . . . . . . . . . . . . . . . . . 262
9.1.8.3 Normal to the TRIA3 element . . . . . . . . . . . . . . . . . 263
9.1.8.4 Nodal forces for the membrane . . . . . . . . . . . . . . . . 265
9.1.9 Dirchlet boundary equations . . . . . . . . . . . . . . . . . . . . . . 265
9.1.10 Free equations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9.1.10.1 Cables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9.1.10.2 Membrane . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
9.1.11 Wrapper for the objective function . . . . . . . . . . . . . . . . . . . 269
9.1.12 Form-finding objective function . . . . . . . . . . . . . . . . . . . . 271

10 Verification of the form-finding algorithm 277


10.1 Cable net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10.1.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10.1.2 Test definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10.1.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.1.4 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
10.1.5 Solution deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
10.1.6 Orchestrating scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 285
10.1.7 Form-finding geometry . . . . . . . . . . . . . . . . . . . . . . . . . 287
10.1.8 Modified deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
10.1.9 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
10.1.10 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
10.1.11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
10.2 Anticlastic net . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.2.2 Test definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.2.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
10.2.4 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
10.2.5 Solution deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
10.2.6 Orchestrating scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 301
10.2.7 Form-finding geometry . . . . . . . . . . . . . . . . . . . . . . . . . 303
10.2.8 Modified deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
10.2.9 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
10.2.10 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
10.2.11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
10.3 Hypar membrane with fixed edges . . . . . . . . . . . . . . . . . . . . . . . . 311
10.3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
10.3.2 Test definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
10.3.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
10.3.4 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
10.3.5 Solution deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317

iv
10.3.6 Orchestrating scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 318
10.3.7 Form-finding geometry . . . . . . . . . . . . . . . . . . . . . . . . . 321
10.3.8 Modified deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
10.3.9 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
10.3.10 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
10.3.11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
10.4 Plane membrane with cables on the borders . . . . . . . . . . . . . . . . . . . 336
10.4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
10.4.2 Test definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
10.4.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
10.4.4 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
10.4.5 Solution deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
10.4.6 Orchestrating scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 343
10.4.7 Form-finding geometry . . . . . . . . . . . . . . . . . . . . . . . . . 345
10.4.8 Modified deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
10.4.9 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
10.4.10 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
10.4.11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
10.5 Hypar membrane with cables on the borders . . . . . . . . . . . . . . . . . . 365
10.5.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
10.5.2 Test definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
10.5.3 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
10.5.4 Problem definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
10.5.5 Solution deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
10.5.6 Orchestrating scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 372
10.5.7 Form-finding geometry . . . . . . . . . . . . . . . . . . . . . . . . . 375
10.5.8 Modified deck . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
10.5.9 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
10.5.10 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
10.5.11 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385

11 Form-finding and live loads 391


11.1 Hexagonal membrane with cables . . . . . . . . . . . . . . . . . . . . . . . . 391
11.1.1 Pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
11.1.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
11.1.3 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
11.1.4 Dlubal comparison . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
11.1.5 Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417

12 Generalised finite element optimization 427


12.1 Statical optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
12.1.1 Serialization class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
12.1.2 Wrapper for the execution . . . . . . . . . . . . . . . . . . . . . . . 429
12.1.3 Optimization objective function . . . . . . . . . . . . . . . . . . . . 430
12.1.4 Problem setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
12.1.5 Mesh pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . 432
12.1.6 The deck in code_aster . . . . . . . . . . . . . . . . . . . . . . . . . 433
12.1.7 Example run of the program . . . . . . . . . . . . . . . . . . . . . . 438

v
12.1.8 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
12.1.9 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
12.2 Topological optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
12.2.1 Serialization class . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
12.2.2 Wrapper for the execution . . . . . . . . . . . . . . . . . . . . . . . 442
12.2.3 Optimization objective function . . . . . . . . . . . . . . . . . . . . 443
12.2.4 Problem setup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444
12.2.5 Mesh pre-processing . . . . . . . . . . . . . . . . . . . . . . . . . . 446
12.2.6 The deck in code_aster . . . . . . . . . . . . . . . . . . . . . . . . . 447
12.2.7 Example run of the program . . . . . . . . . . . . . . . . . . . . . . 452
12.2.8 Post-processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
12.2.9 Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

Bibliography 457

Index 461

vi
List of Figures

1.1 London Olympic Velodrome - London (United Kingdom) - 2012 - [ArJ402] . . 4


1.2 Wire rope scheme - [Tri409] . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Structural strand scheme - [Tri409] . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Full locked cable scheme - [Tri409] . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Khalifa International Stadium - Doha (Qatar) - 2014 - [AS403] . . . . . . . . . 5
1.6 Wrap and Weft - [Hen304] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.7 Example of a ETFE Cushion - [AGC401] . . . . . . . . . . . . . . . . . . . . 7
1.8 Example of the different shapes of the same topology - [MaTe407] . . . . . . . 7
1.9 Python programming code logo . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.10 PyCharm logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.11 GMSH logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.12 CalculiX logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.13 Code_Aster logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.14 Dlubal logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.15 GOSiR Stadium - Gdynia (Poland) - 2009 - [Maf406] . . . . . . . . . . . . . . 12
1.16 Marseille Vélodrome - Marseille (France) - 2011 - [Maf406] . . . . . . . . . . 12
1.17 Odense CA Arena - Odense (Denmark) - 2013 - [Maf406] . . . . . . . . . . . . 13
1.18 F1-YAS Marina Circuit - Abu Dhabi (United Arab Emirates) - 2008 - [Maf406] 13
1.19 Tarxien Shelter - Tarxien (Malta) - 2014 - [Maf406] . . . . . . . . . . . . . . . 14
1.20 Jamarat Bridge - Makkah (Saudi Arabia) - 2009 - [Maf406] . . . . . . . . . . 14
1.21 Rottweil Test Tower - Rottweil (Germany) - 2014 - [Pin410] . . . . . . . . . . 15

3.1 Nodal forces in the elements of a membrane - [MaMo211] . . . . . . . . . . . 22


3.2 Graphical representation of the internal force for a node in a membrane -
[MaMo211] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Example of the domain for the SSDM - [Bia302] . . . . . . . . . . . . . . . . . 24
3.4 Stress distribution over the element side - [Bia302] . . . . . . . . . . . . . . . 25
3.5 Graphical representation of the nodal forces for the SSDM - [Bia302] . . . . . 26
3.6 Enlargement of a node for the calculation of the nodal forces - [Bia302] . . . . 26
3.7 Nodal displacements for the SSDM - [Bia302] . . . . . . . . . . . . . . . . . . 27

4.1 Displacement diagram for a 1 dof system for the DRM - Edited from [Wiki411] 34

1
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

4.2 Trend of the kinetic energy in the DRM - [Hen304] . . . . . . . . . . . . . . . 35


4.3 Kinetic energy in the neighbourhood of the peak for the DRM - [Hen304] . . . 36

5.1 Discretization of a finite element model . . . . . . . . . . . . . . . . . . . . . 38


5.2 Cable element: two nodes which can be subject only to axial force - [Nas007] . 39
5.3 Graphical representation of the tangent and secant apparent modulus of elas-
ticity. - [Mal117] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.4 Membrane element and its reference system - [Hen304] . . . . . . . . . . . . . 41
5.5 Cruciform specimen for biaxial test - [ASCE100] . . . . . . . . . . . . . . . . 41
5.6 Stress-strain curve of fibergalss - [ASCE100] . . . . . . . . . . . . . . . . . . 42
5.7 Stress-strain curve of polyester - [ASCE100] . . . . . . . . . . . . . . . . . . 42
5.8 Biaxial Stress–Strain Curve of Fiberglass with Linearization Lines - [ASCE100] 43
5.9 Two iterations of the Newton-Raphson procedure for a system with a single
DOF - Edited form [Kim114] . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.10 Snap-through behaviour of inclined slender beams - [Kim114] . . . . . . . . . 47
5.11 Modified Newton-Raphson Method (left) and Incremental Secant Method
(right) - Edited from [Kim114] . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.12 General deformable continuum - [CoTa105] . . . . . . . . . . . . . . . . . . . 49
5.13 One-dimensional elasto-plasticity with strain-hardening - [Kim114] . . . . . . 52
5.14 Plastic behaviour according to the value of 𝐸T - [Kim114] . . . . . . . . . . . 54
5.15 The Tresca and Von Mises yield surfaces in principal stress space - [DePeOw106] 58
5.16 The 𝜋-plane in principal stress space (a), and, the 𝜋-plane representation of
the Tresca and von Mises yield surfaces (b) - [DePeOw106] . . . . . . . . . . . 58

6.1 Cutting Pattern - Edited from [GaLe206] . . . . . . . . . . . . . . . . . . . . . 59

7.1 Displacement shape obtained varying the external load for a catenary cable. . 70
7.2 Displacement shape obtained varying the pretension for a catenary cable. . . . 71
7.3 Geometric quantities for the parabola cable - [Mal117] . . . . . . . . . . . . . 73
7.4 Reaction forces for the cable a under a distributed load. . . . . . . . . . . . . . 78
7.5 Tension in the cable under a distributed load. . . . . . . . . . . . . . . . . . . 79
7.6 Similarities between the parabola and catenary cables. . . . . . . . . . . . . . 80

8.1 Total displacements of the catenary cable under its own weight. . . . . . . . . 89
8.2 Displacements in the x and y-direction of the catenary cable. . . . . . . . . . . 89
8.3 Axial stress and elongation of the catenary cable. . . . . . . . . . . . . . . . . 90
8.4 Displacement of the mid-point of the catenary cable. . . . . . . . . . . . . . . 91
8.5 Axial stress and elongation of the mid-point of the catenary cable. . . . . . . . 92
8.6 Horizontal and vertical reactions of the catenary cable. . . . . . . . . . . . . . 93
8.7 Check of the displacements and tension in the cable. . . . . . . . . . . . . . . . 94
8.8 Check of the axial elongation of the cable. . . . . . . . . . . . . . . . . . . . . 95
8.9 Total displacements of the parabola cable under a distributed load. . . . . . . . 101
8.10 Displacements in the x and y-direction of the parabola cable. . . . . . . . . . . 101
8.11 Axial stress and axial elongation of the parabola cable under a distributed load. 102
8.12 Displacement of the mid-point of the parabola cable. . . . . . . . . . . . . . . 103
8.13 Axial stress and elongation of the mid-point of the parabola cable. . . . . . . . 104
8.14 Horizontal and vertical reactions of the the supports of the parabola cable. . . 105
8.15 Check of the displacements and tension in the cable. . . . . . . . . . . . . . . . 107
8.16 Check of the axial elongation of the cable. . . . . . . . . . . . . . . . . . . . . 108

2 List of Figures
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.17 Total displacements of the cable under a concentrated load. . . . . . . . . . . . 113


8.18 Displacements in the x and y-direction of the cable under a concentrated load. . 114
8.19 Stresses and strains for the cable under a concentrated load. . . . . . . . . . . 114
8.20 Vertical displacement of the point of application of the force. . . . . . . . . . . 115
8.21 Axial stress and elongation of the loaded point of the cable. . . . . . . . . . . . 116
8.22 Horizontal and vertical reactions of the supports of the cable. . . . . . . . . . . 117
8.23 Check of the displacements and the tension in the cable. . . . . . . . . . . . . . 119
8.24 Check of the axial elongation of the cable. . . . . . . . . . . . . . . . . . . . . 120
8.25 Total displacements of the plastic cable under a concentrated load. . . . . . . . 126
8.26 Displacements in the x and y-direction of the plastic cable. . . . . . . . . . . . 126
8.27 Axial stresses and strains of the plastic cable under a concentrated load. . . . . 127
8.28 Von-Mises equivalent plastic strain of the cable under a concentrated load. . . 127
8.29 Vertical displacement of the point of application of the load. . . . . . . . . . . 128
8.30 Axial stress and elongation of the loaded point of a plastic cable. . . . . . . . . 129
8.31 Horizontal and vertical reactions of the supports of a plastc cable. . . . . . . . 130
8.32 Von-Mises equivalent plastic strain for the loaded point. . . . . . . . . . . . . 131
8.33 Total displacements of the plane cable net. . . . . . . . . . . . . . . . . . . . . 137
8.34 Displacements in the x and y-direction of the plane cable net. . . . . . . . . . . 137
8.35 Axial force and elongation of the plane cable net. . . . . . . . . . . . . . . . . 138
8.36 Vertical and lateral displacement of the loaded point of the cable net. . . . . . 139
8.37 Check of the displacement and tension in the cable net. . . . . . . . . . . . . . 140
8.38 Check of the axial elongation of the cable net. . . . . . . . . . . . . . . . . . . 141
8.39 Mesh produced by gmsh of the plane membrane. . . . . . . . . . . . . . . . . . 144
8.40 Total displacements of plane membrane. . . . . . . . . . . . . . . . . . . . . . 151
8.41 Displacements in the x and y-direction of the plane membrane. . . . . . . . . . 152
8.42 Normal stresses in the x and y-direction of the plane membrane. . . . . . . . . 152
8.43 Normal strains in the x and y-direction of the plane membrane. . . . . . . . . . 152
8.44 Von-Mises stresses and strains of the plane membrane. . . . . . . . . . . . . . 153
8.45 Maximum vertical displacement of the plane membrane. . . . . . . . . . . . . 154
8.46 Normal stresses in the x and y-direction of the center point of the plane membrane.155
8.47 Normal stresses in the x and y-direction of the mid-point of the plane membrane. 156
8.48 Normal stresses in the x and y-direction of the pin of the plane membrane. . . . 157
8.49 Normal strains in the x and y-direction of the center point of the plane membrane.158
8.50 Normal strains in the x and y-direction of the mid-point of the plane membrane. 159
8.51 Normal strains in the x and y-direction of the pin of the plane membrane. . . . 160
8.52 Von-Mises stresses and strains of the center point of the plane membrane. . . . 161
8.53 Von-Mises stresses and strains of the mid-point of the plane membrane. . . . . 162
8.54 Von-Mises stresses and strains of the pin of the plane membrane. . . . . . . . . 163
8.55 Check of the displacements and the 𝜎x of the plane membrane. . . . . . . . . . 164
8.56 Check of 𝜎y and the 𝜎mises of the plane membrane. . . . . . . . . . . . . . . . 165
8.57 Check of 𝜀x and the 𝜀y of the plane membrane. . . . . . . . . . . . . . . . . . 166
8.58 Check of 𝜀mises of the plane membrane. . . . . . . . . . . . . . . . . . . . . . 167
8.59 Mesh produced by gmsh of the plane orthotropic membrane. . . . . . . . . . . 170
8.60 Total displacements of the orthotropic plane membrane. . . . . . . . . . . . . . 177
8.61 Displacements in the x and y-direction of the orthotropic plane membrane. . . . 178
8.62 Normal stresses in the x and y-direction of plane orthotropic plane membrane. . 178
8.63 Normal strains in the x and y-direction of the orthotropic plane membrane. . . 178
8.64 Von-Mises stresses and strains of the orthotropic plane membrane. . . . . . . . 179

List of Figures 3
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.65 Maximum displacement of the orthotropic plane membrane. . . . . . . . . . . 180


8.66 Normal stresses in the x and y-direction of the center point of the orthotropic
membrane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.67 Normal stresses in the x and y-direction of the mid-point of the orthotropic
membrane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
8.68 Normal stresses in the x and y-direction of the pin of the orthotropic membrane. 183
8.69 Normal strains in the x and y-direction of the center-point of the orthotropic
membrane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
8.70 Normal strains in the x and y-direction of the mid-point of the orthotropic mem-
brane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.71 Normal strains in the x and y-direction of the pin of the orthotropic membrane. 186
8.72 Von-Mises stresses and strains of the center point of the orthotropic membrane. 187
8.73 Von-Mises stresses and strains of the mid-point of the orthotropic membrane. . 188
8.74 Von-Mises stresses and strains of the pin of the orthotropic membrane. . . . . . 189
8.75 Check of the displacements and the 𝜎x of the plane membrane. . . . . . . . . . 190
8.76 Check of 𝜎y and the 𝜎mises of the plane membrane. . . . . . . . . . . . . . . . 191
8.77 Check of 𝜀x and the 𝜀y of the plane membrane. . . . . . . . . . . . . . . . . . 192
8.78 Check of 𝜀mises of the plane membrane. . . . . . . . . . . . . . . . . . . . . . 193
8.79 Mesh produced by gmsh of the plastic membrane. . . . . . . . . . . . . . . . . 196
8.80 Total displacements of the plastic membrane. . . . . . . . . . . . . . . . . . . 203
8.81 Displacements in the x and y-direction of the plastic membrane. . . . . . . . . 204
8.82 Normal stresses in the x and y-direction of the plastic membrane. . . . . . . . . 204
8.83 Normal strains in the x and y-direction of the plastic membrane. . . . . . . . . 204
8.84 Von-Mises stresses and strains of the plastic membrane. . . . . . . . . . . . . . 205
8.85 Von-Mises equivalent plastic strain of the plane plastic membrane. . . . . . . . 205
8.86 Maximum displacement of the plastic membrane. . . . . . . . . . . . . . . . . 206
8.87 Normal stresses in the x and y-direction of the center point of the plastic mem-
brane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
8.88 Normal stresses in the x and y-direction of the mid-point of the plastic membrane.208
8.89 Normal stresses in the x and y-direction of the pin of the plastic membrane. . . 209
8.90 Normal strains in the x and y-direction of the center point of the plastic membrane.210
8.91 Normal strains in the x and y-direction of the mid-point of the plastic membrane. 211
8.92 Normal strains in the x and y-direction of the pin of the plastic membrane. . . . 212
8.93 Von-Mises stresses and strains of the center-point of the plastic membrane. . . . 213
8.94 Von-Mises stresses and strains of the mid-point of the plastic membrane. . . . . 214
8.95 Von-Mises stresses and strains of the pin of the plastic membrane. . . . . . . . 215
8.96 Von-Mises equivalent plastic strain of the center point of the membrane. . . . . 216
8.97 Von-Mises equivalent plastic strain of the mid-point of the membrane. . . . . . 217
8.98 Von-Mises equivalent plastic strain of the pin of the membrane. . . . . . . . . . 218
8.99 Mesh produced by Calculix of the plane membrane with collaborating cables. . 221
8.100Total displacements of the plane membrane with collaborating cables. . . . . . 230
8.101Displacements in the x and y-direction of the membrane with cables. . . . . . . 230
8.102Normal stresses in the x and y-direction of the membrane with cables. . . . . . 231
8.103Normal strains in the x and y-direction of the membrane with cables. . . . . . . 231
8.104Von-Mises stresses and strains of the membrane with cables. . . . . . . . . . . 231
8.105Maximum displacement of the plane membrane with cables. . . . . . . . . . . 232
8.106Normal stresses in the x and y-direction of the center point of the cabled mem-
brane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233

4 List of Figures
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.107Normal stresses in the x and y-direction of the mid-point of the cabled membrane.234
8.108Normal stresses in the x and y-direction of the pin of the cabled membrane. . . 235
8.109Normal strains in the x and y-direction of the center point of the cabled membrane.236
8.110Normal strains in the x and y-direction of the mid-point of the cabled membrane. 237
8.111Normal strains in the x and y-direction of the pin of the cabled membrane. . . . 238
8.112Von-Mises stresses and strains of the center point of the membrane with cables. 239
8.113Von-Mises stresses and strains of the mid-point of the membrane with cables. . 240
8.114Von-Mises stresses and strain of the pin of the membrane with cables. . . . . . 241
8.115Check of the deformations and the 𝜎x of the membrane with cables. . . . . . . 242
8.116Check of the 𝜎y and the 𝜎mises of the membrane with cables. . . . . . . . . . . 243
8.117Check of the 𝜀x and the 𝜀y of the membrane with cables. . . . . . . . . . . . . 244
8.118Check of the 𝜀mises of the membrane and the tension in the cables. . . . . . . . 245

9.1 Example run of the form-finding algorithm in a colored terminal. . . . . . . . . 261

10.1 Topology of the plane cable net. . . . . . . . . . . . . . . . . . . . . . . . . . 281


10.2 Total displacements of the plane cable net. . . . . . . . . . . . . . . . . . . . . 291
10.3 Displacements in the x and y-direction of the plane cable net. . . . . . . . . . . 291
10.4 Axial force and axial elongation of the plane cable net. . . . . . . . . . . . . . 292
10.5 Check of the displacements and tension of a plane cable net. . . . . . . . . . . 293
10.6 Topology of the anticlastic cable net. . . . . . . . . . . . . . . . . . . . . . . . 297
10.7 Total displacements of the anticlastic cable net. . . . . . . . . . . . . . . . . . 308
10.8 Displacements in the x and y-direction of the anticlastic cable net. . . . . . . . 308
10.9 Axial force and axial elongation of the anticlastic cable net. . . . . . . . . . . 309
10.10Check of the form-finding of the anticlastic cable net. . . . . . . . . . . . . . . 310
10.11Topology of the hypar membrane with fixed edges. . . . . . . . . . . . . . . . . 313
10.12Total displacements of the hypar membrane with fixed edges. . . . . . . . . . . 328
10.13Displacements in the x and y-direction of the hypar membrane with fixed edges. 328
10.14Normal stresses in the x and y-direction of the hypar membrane with fixed edges. 329
10.15Normal strains in the x and y-direction of the hypar membrane with fixed edges. 329
10.16Von-Mises stresses and strains of the hypar membrane with fixed edges. . . . . 330
10.17Check of the displacements and the 𝜎x of the hypar membrane with fixed edges. 332
10.18Check of 𝜎y and the 𝜎mises of the hypar membrane with fixed edges. . . . . . . 333
10.19Check of 𝜀x and the 𝜀y of the hypar membrane with fixed edges. . . . . . . . . 334
10.20Check of 𝜀mises of the hypar membrane with fixed edges. . . . . . . . . . . . . 335
10.21Topology for the form-finding of a plane membrane with cables. . . . . . . . . 338
10.22Total displacements of the plane membrane with cables. . . . . . . . . . . . . . 357
10.23Displacements in the x and y-direction of the plane membrane with cables. . . . 357
10.24Normal stresses in the x and y-direction of the plane membrane with cables. . . 358
10.25Normal strains in the x and y-direction of the plane membrane with cables. . . 358
10.26Von-Mises stresses and strains of the plane membrane with cables. . . . . . . . 359
10.27Check of the displacements and the 𝜎x of the plane membrane with cables. . . . 361
10.28Check of 𝜎y and the 𝜎mises of the plane membrane with cables. . . . . . . . . . 362
10.29Check of 𝜀x and the 𝜀y of the plane membrane with cables. . . . . . . . . . . . 363
10.30Check of 𝜀mises of the plane membrane with cables. . . . . . . . . . . . . . . . 364
10.31Topology of the hypar membrane with cables. . . . . . . . . . . . . . . . . . . 367
10.32Total displacements of the hypar membrane with cables. . . . . . . . . . . . . 382
10.33Displacements in the x and y-direction of the hypar membrane with cables. . . 382
10.34Normal stresses in the x and y-direction of the hypar membrane with cables. . . 383

List of Figures 5
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.35Normal strains in the x and y-direction of the hypar membrane with cables. . . 383
10.36Von-Mises stresses and strains of the hypar membrane with cables. . . . . . . . 384
10.37Check of the displacement and the 𝜎x of the hypar membrane with cables. . . . 386
10.38Check of 𝜎y and the 𝜎mises of the hypar membrane with cables. . . . . . . . . . 387
10.39Check of 𝜀x and the 𝜀y of the hypar membrane with cables. . . . . . . . . . . . 388
10.40Check of 𝜀mises and of the internal action in the cable of the hypar membrane
with cables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389

11.1 Topology for the form-finding of a hexagonal membrane with cables. . . . . . . 393
11.2 Total displacements of the hexagonal membrane under the live loads. . . . . . . 408
11.3 Displacements in the x and y-direction of the hexagonal membrane. . . . . . . 408
11.4 Normal stresses in the x and y-direction of the hexagonal membrane. . . . . . . 409
11.5 Normal strains in the x and y-direction of the hexagonal membrane. . . . . . . 409
11.6 Von-Mises stresses and strains of the hexagonal membrane under the live loads. 409
11.7 Displacements for the front and middle membrane of the hex structure. . . . . . 410
11.8 Normal stresses in the x and y-direction of the front membrane. . . . . . . . . . 411
11.9 Normal stresses in the x and y-direction of the middle membrane. . . . . . . . . 412
11.10Normal strains in the x and y-direction of the front membrane. . . . . . . . . . 413
11.11Normal strains in the x and y-direction of the middle membrane. . . . . . . . . 414
11.12Von-Mises stresses and strains of the front membrane of the hexagonal structure. 415
11.13Von-Mises stresses and strains of the middle membrane of the hexagonal struc-
ture. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
11.14Check of the form-finding: shape and 𝜎x . . . . . . . . . . . . . . . . . . . . . 418
11.15Check of the form-finding: 𝜎y and 𝜎mises . . . . . . . . . . . . . . . . . . . . . 419
11.16Check of the form-finding: 𝜀x and 𝜀y . . . . . . . . . . . . . . . . . . . . . . . 420
11.17Check of the form-finding: 𝜀mises and the tension in the cables . . . . . . . . . 421
11.18Check after the application of a live load:: displacements and 𝜎x . . . . . . . . 422
11.19Check after the application of a live load: 𝜎y and 𝜎mises . . . . . . . . . . . . 423
11.20Check after the application of a live load: 𝜀x and 𝜀y . . . . . . . . . . . . . . . 424
11.21Check after the application of a live load: 𝜀mises and the tension in the cables . 425

12.1 Magnitude of the displacements after the statical optimization. . . . . . . . . . 439


12.2 Displacements in the x and y-direction after the statical optimization. . . . . . 439
12.3 Internal actions in the membrane after the statical optimization. . . . . . . . . 440
12.4 Magnitude of the displacements after the topological optimization . . . . . . . 453
12.5 Displacements in the x and z-direction after the topological optimization. . . . 454
12.6 Internal actions in the cables after the topological optimization. . . . . . . . . 454

6 List of Figures
Abstract
This master thesis is intended to inspect taut cable and membrane structures from different
perspectives.
From the structural point of view, the materials and structural elements of tensile structures are
extremely durable and the lightweight nature of membranes and cables ensures an extraordi-
nary efficiency towards ambitious projects, specifically when long spans without columns are
to be designed. The structural stiffness of this elements stems from the applied pretension,
being the flexural and shear stiffness absolutely negligible. As a consequence, out of plane
loads determine large displacements and eventually deformations which force the engineer to
employ the methods of nonlinear analysis even in the presence of linear elastic materials. For
this reason, finite element non-linear analysis is an essential ingredient in the design of this
structures.
Having analysed cables and membranes individually from the production process to the struc-
tural applications, we then concentrate on the mechanical properties of the membranes. We in-
troduce different constitutive law models such as both isotropic and orthotropic, combined with
both linear elastic and elasto-plastic behaviour. These choices have been developed due to the
composition of the fabrics which consist of two elements: the warp, which are straight threads
weaved with the weft that runs from one side to the other, determining a typical orthotropic
behaviour; all covered with an impermeable plastic material (coating) that also guarantees the
possibility to connect multiple fabric portions together.
Once the material and the structural properties have been exhaustively investigated, we focus on
the so-called form-finding, which is a pre-processing procedure intended to the define the shape
of the structure under a prescribed set of pretension loads and kinematic constrains. We also
underline how the prescription of a stress state of uniform tension in the cables and membranes
guarantees a better performance under both dead and live loads. At the same time, we stress
out how the form-finding process allows the design of beautiful architectural shapes, avoiding
the membranes to becoming slack when slightly detensioned.
As final step towards a complete analysis of taut structures, we highlight the limits of the tra-
ditional form-finding procedure which cannot perform an actual structural optimization in the
case of nonlinear constitutive laws or in presence of a significant interaction with the primary
structure. We therefore introduce a new generalized finite element approach based on the con-
strained optimization of a convex function which defines the target for one or more specific
static or geometric quantities.
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2 List of Figures
CHAPTER 1

Introduction

Pure taut structures are made mainly with cables combined with membranes. This kind of ele-
ments allow to develop extremely various typologies of structures and architectures providing
many benefits and advantages. First, under the aesthetics point of view, the flexible character-
istics of the membrane allows to design almost unlimited forms and shapes and their unique
translucency, that offers soft diffused natural light, transform this kind of structures in authentic
artworks. On the other hand, as far as the structural aspects are concerned, the excellent dura-
bility of the materials and structural elements involved, for instance ETFE film, PVC or PTFE
fiberglass, combined with the lightweight nature of membranes and cables, make this kind of
structures an extremely efficient solution towards ambitious projects when long spans without
supports are to be designed. Moreover, a great amount of recurring elements are prefabricated,
therefore, the construction process is much easier and faster if compared to an equivalent-sized
conventional building, thanks to the light weight but stiff nature of membrane and cable el-
ements. The structural stiffness of this elements come from the pretension applied on them,
in fact they are not able to bear bending moments or compression of any kind. Finally, ten-
sile architecture determines some important environmental benefits, since the aforementioned
translucency reduces the daily costs for lighting and the high sun reflectivity and low absorption
determine a significant drop in the electrical energy required by the building.

1.1 Cables

During the sixties and early seventies, it was common thought that the architectural and eco-
nomic potential of cable roof structures would lead to an increasing demand for this type of
building. Consequently, a great deal of work was carried out world-wide to study the behaviour
of different types of structural system. The interest in cable structures also stimulated an in-
creasing interest in the use and development of numerical methods for solving large systems
of nonlinear equations, made possible by the emergence of the high-speed electronic computer
[Buc103].

3
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.1: London Olympic Velodrome - London (United Kingdom) - 2012 - [ArJ402]

Cables, as structural elements, are characterized by great flexibility and negligible bending
stiffness. However, they are able to carry transversal loads if properly pre-stressed, thus being
able to span very long distances with minimal cross-sectional area. Cables are a construction of
wire strands, laid (i.e. twisted) helically around a core, to form a tension member of symmetri-
cal cross section. Cables have a high strength-to-weight ratio as the wire strands are drawn to
high strengths and laid to carry tensile loads efficiently.
The construction and subsequent mechanical properties are determined by the wire pattern and
wire size used for the core and outer strands. Generally speaking, cables can be classified as
[Tri409]:
• Wire Rope:

1.2: Wire rope scheme - [Tri409]

For a given strength, the wire rope is larger in diameter and lower in stiffness than structural
strands or solid rods, so it may not be the most cost-effective product for static, tension load-
carrying structural members, but it is commonly used for “flexible structures”. However, in
cases where a relatively high stretch is desired, or where the cable are used with pullies wire
ropes may be the appropriate choice.
• Structural Strand:

1.3: Structural strand scheme - [Tri409]

4 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The structural strand is the cable construction most commonly used in structural applications.
It offers an economical combination of strength and stiffness for structures. As cables become
larger in diameter, the number of strands increases.
• Full Locked Cable:

1.4: Full locked cable scheme - [Tri409]

A variation for larger galvanized cables is the “full locked cable”. These cables have their
outer strands drawn in a “Z” shape so that they interlock and form a smoother outside layer
of strands. The interlocking strands also yield a denser cross section and therefore a higher
effective elastic modulus.

1.2 Membranes

1.5: Khalifa International Stadium - Doha (Qatar) - 2014 - [AS403]

The membranes taken here into consideration are fabrics which are flat, thin and with a flexible
surface created by a network of fibres perpendicular to each other according to a plain weave
pattern. Thanks to these characteristics they are suitable where large areas have to be covered.
The membrane is a composite material consisting of fabric and coating. The coating has various
roles: it protects the woven fabric against moisture, UV radiation, attack by fungi, etc. But it
also guarantees water-tightness and stabilizes the fabric configuration, giving shear stiffness
to the membrane. Furthermore, it makes possible to join two membrane portions (welded or
glued seams, etc.), with gradual load transfer between the two fabrics. The simplest possible
constitutive model that can be adopted for membrane is a plane stress elastic orthotropic model.
Such modelling is still used in the design offices even if

1.2. Membranes 5
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.6: Wrap and Weft - [Hen304]

Due to the low compressive and bending stiffness of their surface, membrane constructions only
withstand tensile stresses and the plane surfaces react sensitively to the deformation imposed
by external loads.
If subjected to vertical loads as snow or water, they are prone to flutter and create zones of
load concentrations, which in extreme cases can lead to the failure of the construction. Thus,
the stabilization of plane areas requires high pre-stressing and for this reason, double curved
constructions are more commonly used. In addition to the tensile stresses, tangential stresses
are developed inside the membrane surface, which contribute to support the applied load. The
combined action of traction and shear gives rise to a surface structure that can carry the loads
according to a funicular mechanism, at least as long as the applied loads do not cause the
occurrence of compressive stresses, which are caused by means of folds in the membrane.
Therefore, the fundamental principle underlying the design of membrane structures is that the
surface must be maintained in a state of traction under any conditions.
The conceptual design and realisation of taut constructions are based, at least in the first phases,
on different principles with respect to more standard building structures. In fact, the more
evident difference is that membranes and taut structures are developed in general according to
self-regulations, engineers are not guided by any normative during the design process. Another
peculiar difference is that the final shape is extremely influenced by the boundary conditions
assigned and the load to which it is subjected [Meh408].
We shall now describe the two main types of membrane structures mentioned before:
the boundary tensioned structures and the pneumatic structures.
This is a particular type of structure with a thin, flexible surface that carries loads primarily
through tensile stresses. Taut membrane structures are characterized by a shape that is deter-
mined by tension in the textile material and the geometry of the support structure (boundary
conditions). The stress demands turn to be a central point in the construction and patterning of
each taut structure element, from the membrane to the anchors.
New applications for an extremely versatile material, the Ethylene TetraFluoroEthylene
(ETFE), have been recently discovered, an acronym which stands for ETFE and is a partially
fluorinated polymer, which is a plastic material that contains fluorine. It has been used in ar-
chitecture since the ’80s due to its exceptional characteristics. In fact, ETFE is transparent like
glass but, compared to it, it is lighter, stronger, and simple and economical to install. Aside
from its lightweight nature, the ETFE is totally permeable to light and UV rays and is totally
recyclable.

6 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.7: Example of a ETFE Cushion - [AGC401]

ETFE cushions consist of a two layers of membrane (enclosing pressured air in between) sup-
ported by a small pressure different between the inside and outside. Since external loads are
usually quite small, the required internal pressures may be small. The air chamber also con-
tributes to the thermal insulation of the system. Along the entire closed perimeter of the area
where the cushion is located, an extruded aluminium frame is placed. The frame is connected
to the main supporting structure through plates and bolts. The cushions are fixed to valves
connected to the pumps of the pressurization system which, once the system is installed, will
start working by inflating the membranes up to the pressure required.

1.3 Form finding

1.8: Example of the different shapes of the same topology - [MaTe407]

Seldom a field in the construction field requires such a close collaboration between all the com-
ponents involved in design, manufacture and execution, as construction with textile materials.
From the design process to the production and the erection, the collaboration between archi-
tects, engineers and the construction companies becomes unavoidable and essential to obtain
the desired result. The design of tensioned membrane and cables net follows a three-stage
procedure:

1.3. Form finding 7


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• Form-Finding;
• Cutting Pattern (procedure which determine the template from which the parts of a mem-
brane are traced onto fabric before being cut out and assembled);
• Static Analysis, generally highly nonlinear, under external (environmental) loads.
The form-finding represents the first step to be executed, being the pre-processing procedure
leading to the definition of the shape which the structure will attain according to the pretension
assigned to each element. More precisely, the form-finding calculation will provide a surface
geometry (or a length in the case of cables) which is equilibrated with the boundary condi-
tions and the desired pretension provided by the designer. The results obtained are completely
independent from the particular mechanical behaviour of the materials used, but, as already
mentioned, depend only upon the pre-stress magnitude and the boundaries conditions. This
computation is unavoidable due to the fact that, initially, membrane and cables have negligi-
ble stiffness which does not allow to have an initial shape, but it increases with the growth of
the deformations. Moreover, prescribing a uniform tension in the membranes guarantees bet-
ter performances in structural terms, in fact, they are less likely to wrinkle or fail by fatigue
[GaLe206].
This problem can be solved thanks to three different methods:
• Force Density Method (FDM): a procedure used for the design of cable structures;
• Surface Stress Density Method (SSDM): analogous method that considers only shapes
made up by mebranes;
• Dynamic Relaxation Method (DRM): step by step method that determines the equilib-
rium position starting from an initial configuration through a pseudo-dynamic analysis.
As final remark, it must be pointed out that we will refer to the term “mesh”, meaning the
connections between each node of the structure. The initial “mesh file” in the analysis code
must be interpreted as an initial topology, that should not be misunderstood with the initial
configuration, which is actually the aim of the form finding.

1.4 Programming language and FEM software

The mindset at the base of the development of this master’s thesis was to employ mainly open-
source software with the aim to give evidences of the potentialities and the great hard work
carried out (and freely shared) by enthusiasts programmers all around the world.

1.4.1 Python and PyCharm

The programming code selected is Python, a general-purpose programming code, which can
be used to build almost anything, from a web site to a rocket launcher system. It is supported
by an active community and great corporate sponsors, for example, Google has developed in
Python most of its platforms and applications since 2006. This aspect is extremely relevant, in
fact, if a company like Google wants their development teams, to work with a programming
code, they will create a vast amount of guide, tutorials and tools, which contributes to enlarge

8 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.9: Python programming code logo

exponentially the list of documentation and support. Python has amazing libraries which allow
to save time and reduce the initial development cycle, for example in our code we take advan-
tage of NumPy, the most famous library (with SciPy) for scientific purposes. Furthermore, it
is extremely reliable and efficient, in fact Python can work in almost any environment without
any loss of performances. Last but not least, Python is incredibly easy to learn and use, it is
considered one of the most accessible programming language available, its syntax is close to
the natural language if compared with other code. For this reasons, young developers around
the world are investing their resources and time in learning this fresh and new way of coding.
Equally, we decided to follow this trend.

1.10: PyCharm logo

PyCharm is the IDE (Integrated Development Environment) which was chosen to develop the
python code for solve the Form-Finding. It is an IDE for Python full featured, it is developed
by JetBrains in two versions: The Free Community Edition, freely downloadable, and the com-
mercial one which targets enterprise developers (we used the Community Edition). PyCharm
has also become famous thanks to companies like Twitter, Groupon, Spotify and eBay, which
use it to develop their applications. Most features are available in the free version, such as in-
telligent code completion, particularly intuitive project navigation, error checking/fixing, smart
refactoring, Graphical debugger and test runner.

1.4.2 GMSH

1.11: GMSH logo

The best description of this program comes directly from the words of its two developers,
Christophe Geuzaine and Jean-François Remacle.

1.4. Programming language and FEM software 9


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

“Gmsh is a free 3D finite element mesh generator with a built-in CAD engine and post-
processor. Its design goal is to provide a fast, light and user-friendly meshing tool with paramet-
ric input and advanced visualization capabilities. Gmsh is built around four modules: geometry,
mesh, solver and post-processing. The specification of any input to these modules is done either
interactively using the graphical user interface, in ASCII text files using Gmsh’s own scripting
language (.geo files), or using the C++, C, Python or Julia API” - [Gms006].

1.4.3 CalculiX

1.12: CalculiX logo

It is a powerful and versatile open-source package developed to solve field problems imple-
menting the finite element method. CalculiX takes advantage of the Abaqus input format,
which allows to use commercial pre-processors, but it is also offers a built-in interactive 3D-
tool which employs the openGL API. The solver has been designed to perform static, dynamic
and thermal analysis, solving both linear and non-linear systems. To emphasise the versa-
tility of this software, we underline that the pre-processor is able to write mesh related data
for Nastran, Abaqus, Ansys, code-aster and for the free CFD codes dolfyn, duns, ISAAC and
OpenFOAM.
The CalculiX package has been developed by a team of engineers employed at MTU Aero
Engines in Munich (Germany), who, motivated by their passion, regularly improve the code in
their spare time.

1.4.4 Code_Aster

1.13: Code_Aster logo

The direct competitor of CalculiX is Code_Aster, a free software for numerical simulation
of materials and mechanical structures, developed mainly by the “Analyses Mécaniques et

10 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Acoustiques” department of the Recherche et Développement service of EDF - Électricité de


France.
ASTER means “Analyses des Structures et Thermo-mécanique pour des Études et des
Recherches”. It is a complex software, whose realization began in 1989, to meet the inter-
nal needs of EDF. It was made available under the GNU GPL in October 2001. The core
system is built in Fortran, and many complementary add-ons are written in Python. It has over
a million and a half lines of code, numerous test cases, as well as enormous documentation,
written mainly in French. The stable versions are made public about twice a year as a com-
piled package. These versions can be updated weekly with the latest development version. The
solver is based on the theory of continuum mechanics, which uses the finite element method
to solve different types of mechanical, thermal, acoustic, seismic problems, both linear and
non-linear.

1.4.5 Dlubal RFEM5

1.14: Dlubal logo

The RFEM structural analysis program is a commercial finite element software which is the
foundation of a modular structural engineering software system. The main program was de-
signed to analyse structures and materials for slabs, shells, beams and rods. Additional modules
can be used to perform further analyses and projects according to different standards. This soft-
ware was chosen because of its module dedicated to the Form-Finding, in order to validate the
code written in Python. The RF-FORM-FINDING add-on module searches for the equilib-
rium shapes of taut structures that are subject to a predefined pretensioning, such as cable and
membrane structures. The shape is calculated through the balance between the surface tension
(prestressing and other loads such as own weight, pressure, etc.) and the computed constrain
reactions. For structural analysis, the new pre-stressing form is then used as in the initial state
for the application of the live loads.
The materialization of the membrane structures can also be determined with the additional RF-
CUTTING-PATTERN module. The cutting pattern module are not analysed in this master’s
thesis, since we focused on the form finding problem solution.

1.5 Examples of tensile structures

In recent years, taut structures have been widely employed mainly with the aim of roofing
residential and industrial areas due to all the favorable properties previously presented.
Here are listed some interesting examples of structures which implements tensile elements.

1.5. Examples of tensile structures 11


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.15: GOSiR Stadium - Gdynia (Poland) - 2009 - [Maf406]

1.16: Marseille Vélodrome - Marseille (France) - 2011 - [Maf406]

12 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.17: Odense CA Arena - Odense (Denmark) - 2013 - [Maf406]

1.18: F1-YAS Marina Circuit - Abu Dhabi (United Arab Emirates) - 2008 - [Maf406]

1.5. Examples of tensile structures 13


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.19: Tarxien Shelter - Tarxien (Malta) - 2014 - [Maf406]

1.20: Jamarat Bridge - Makkah (Saudi Arabia) - 2009 - [Maf406]

14 Chapter 1. Introduction
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1.21: Rottweil Test Tower - Rottweil (Germany) - 2014 - [Pin410]

1.5. Examples of tensile structures 15


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

16 Chapter 1. Introduction
CHAPTER 2

Force density method

The force density method (FDM) represents an excellent approach for a direct study of the
possible shapes that a pretensioned net of cables can attain. In the initial phases of the project,
since some important data about the structure may often be lacking (for instance, the materials
and/or the cross sections), the FDM procedure could suggest the designer a possible final shape
of the structure, by imposing a certain desired pretension state. Examples of use of this method
can be found in the Mannheim Multihalle (Frei Otto, Germany, 1975) or in the Solemar Therme
(Bad Durrheim, Switzerland 1987) [Bia302].

2.1 Mathematical formulation

As developed more in detail later in the thesis, the FDM concept focuses on the linearization
and decoupling of the system of equilibrium equations for the nodes through a simple escamo-
tage: rather than considering the tension assigned in each cable, a force density (for each stretch
of the ropes) is considered, defined as a relationship between the final tension and the deformed
length:
𝑇
𝑞= (2.1)
𝐿
For a system characterised by multiple nodes, as could be a cable net, the equation number
may become extremely large; therefore, it is appropriate to describe the problem with a matrix
formulation. The final coordinates of each node are influenced by the physical quantities (coor-
dinates and density of force) that comes from the immediately adjacent nodes and by the traits
that connect them. Therefore, it is necessary to construct a matrix containing the topological
information of the various nodes which describes also the way in which they are connected.
The incident matrix, C, a extension of the concept of boolean matrix, serves this purpose; it is

17
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

composed only by 0, +1 or -1 and the generic element is constructed as follows:



⎨+1, if the cable ends ∈ node i

𝐶 = −1, if the cable starts ∈ node i (2.2)


0, otherwise

The resulting matrix is not necessarily symmetrical and has no prerequisites of regularity: it
strongly depends on the numbering of the nodes (that is absolutely arbitrary) and can have
a different number of elements in each column. It is important to underline the fact that the
incident matrix contains only topological and not geometric information, because according to
the FDM, the initial configuration of the system does not influence the final results, because
the initial coordinates of the nodes do not even exist; only the topology, which means how the
nodes are connected and related to each other, is crucial in defining the geometry returned by
the form-finding process.
We introduce now the following vectors whose meaning is clearly self-explanatory:


⎨x = [𝑥i ]
y = [𝑦i ] (2.3)


z = [𝑧i ]


⎨u = [𝑥k − 𝑥i ]
v = [𝑦k − 𝑦i ] (2.4)


w = [𝑧k − 𝑧i ]
With 𝑘, 𝑖 = 1, 2, ...𝑛n , the vectors x, y, z containing the nodal coordinates and u, v, w the
distances between adjacent nodes.
It is immediate to understand that the vectors u, v, w originate from the product of C and x, y,
z:


⎨u = C x
v = Cy (2.5)


w = Cz

Assuming for a certain topology n nodes with 𝑛f of them constrained, and m cables, the size of
the incident matrix will be (𝑚, 𝑛) . It is useful to partition the C-matrix (and consequently also
the coordinate vectors) into two sub-matrices:
• 𝐶N containing the the free nodes;
• 𝐶F containing the fixed nodes.
In order to reduce the computational cost of the problem, we can also write:


⎪ C = [CN CF ]

⎨x = [x x ]
N F
(2.6)

⎪ y = [yN yF ]


z = [zN zF ]

18 Chapter 2. Force density method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

So that equation (2.5) becomes:




⎨u = CN xN + CF xF
v = CN yN + CF yF (2.7)


w = CN zN + CF zF
In order to introduce the force density in the formulation, it is necessary to write the equilibrium
equations in matrix form. For instance, gathering in a vector the multiplicative terms of the 𝐹k
forces, we obtain:
[︂ ]︂
−𝑥k − 𝑥0
𝑗i = (2.8)
𝑙k
where the pedix i refers to the component of the vector and varies from 1 and the number of
convergent elements in the node. Undoubtedly, the resulting matrix which contains the versors
of each element is:
j = CTN U L−1 (2.9)
• U is the diagonal matrix associated to the vector u, and similarly for V and W.
• L−1 is the diagonal matrix associated to the vector that contains the length of each cable:
√︀
L = U2 + V2 + W2 (2.10)
Therefore, the equilibrium equation becomes:
CTN U L−1 f − px = 0 (2.11)
with f, vector which contains the tensions inside the segments.
In addition, remembering the definition of force density (2.1), the equilibrium equation is futher
modified in:
CTN U q − px = 0 (2.12)
This equation can be simplified assuming that Q is the diagonal matrix associated to the vector
q, and noticing that:
U q = Q u = Q Cx (2.13)
And also partitioning the matrix C, after dropping the underlines, it results:
CTN QCN xN + CTF QCF xF − px = 0 (2.14)
and assuming:
{︃
DN = CTN QCN
(2.15)
DF = CTF QCF
The final solving system is:
DN xN = px − DF xF (2.16)
The explicit solution of each nodal coordinate is:

−1

⎨xN = DN (︀(px − DF xF ))︀
yN = D−1N py − DF yF (2.17)

⎩ −1
zN = DN (pz − DF zF )

2.1. Mathematical formulation 19


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

20 Chapter 2. Force density method


CHAPTER 3

Surface stress density method

The surface stress density method is introduced to consider, in addition to cables, also taut
membranes, which are particulartly important elements of tensile structures. The purpose of
the chapter is the development of a sound structural theory capable of interpreting the strong
non-linearities induced by the mechanical properties of membranes. The SSDM follows the
same principles of the FDM but allows the combination of study of mixed cable and membrane
structures thanks to the application of a stress density for the area elements in conjunction with
a force density for the linear elements.

3.1 Mathematical formulation

The stress state defined by the designer is relative to a system of local coordinates (x,y), typical
of each element and composed by two perpendicular tension: 𝜎x and 𝜎y . Without any loss of
generality, an isotropic stress state with 𝜎x = 𝜎y = 𝜎0 and zero shear is defined, in order to
guarantee that the membrane is nowhere subject to compression or torsion that may sag some
portions, compromising its structural properties against the application of live loads. This
peculiarity has also the advantage of ensuring that the resulting forces that the border elements
of the membrane exert on a node are directed orthogonally to the opposite side (this can be
verified by applying the principle of virtual works explained in section 3.2) as shown in the
following figure 3.1:
The expression of these forces can be obtained from the stress state associated with the element.
Provided that the geometric properties of the element and of the membrane are known, such as
the length of the sides and the thickness:
1
𝑇i = 𝐿i 𝑡𝜎 (3.1)
2
The corresponding matrix formulation is (considering node c):
Tc = 𝑇i n (3.2)

21
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

3.1: Nodal forces in the elements of a membrane - [MaMo211]

with n the versor perpendicular to the side opposite to the considered node. By means of this
versor, it is possible to calculate the coordinates of point H (point of intersection between the
side opposite the node and orthogonal to the side passing through the same node); they can be
calculated knowing the positions of the two extreme points of the opposite side to the consid-
ered node and making a simple proportion. Another faster alternative is to employ the definition
of scalar and vector product as explained in detail in the implementation of the algorithm.

3.2: Graphical representation of the internal force for a node in a membrane - [MaMo211]

The versor n can be calculated as:


ch
n= (3.3)
𝐻
Where the coordinates of the point h are:

l

⎨𝑥h = 𝑥a + L (𝑥b − 𝑥a )
𝑦h = 𝑦a + Ll (𝑦b − 𝑦a ) (3.4)


𝑧h = 𝑧a + Ll (𝑧b − 𝑧a )

So, the equation (3.2) becomes:


(︂ )︂
1
Tc = 𝐿i 𝑡𝜎0 n (3.5)
2
The area of the triangular element is:
𝐻𝐿
𝐴= (3.6)
2

22 Chapter 3. Surface stress density method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

So that the solving equation becomes:


(︁ 𝜎 )︁
0
Tc = 𝐿2i ch = 𝐿2i 𝑄s 𝑐h (3.7)
𝐴
In which the quantity 𝑄s is the stress density.
The next step is to select a node and impose the equilibrium (the form-finding procedure is
a pre-processing step, so the equilibrium equation on the node does not involve any external
load). For instance, it is enough to add all the forces that converge on the node and project them
in their components along the global coordinate axis:
⎧ ∑︀ ∑︀ 2
⎪ 2
⎨𝑅C𝑥 = ∑︀ 𝑇C𝑥𝑖 = ∑︀ (𝐿i 𝑄si 𝑋H𝑖 − 𝐿i 𝑄si 𝑋C ) = 0
𝑅 C𝑦 = 𝑇C𝑦𝑖 = (𝐿2i 𝑄si 𝑌H𝑖 − 𝐿2i 𝑄si 𝑌C ) = 0 (3.8)

⎩ ∑︀ ∑︀
𝑅 C𝑧 = 𝑇C𝑧𝑖 = (𝐿2i 𝑄si 𝑍H𝑖 − 𝐿2i 𝑄si 𝑍C ) = 0

By imposing the resultant in the three directions equal to zero for equilibrium, the coordinates
of the considered point are obtained. The iterative process consists of two cycles (one “internal”
and one “external”) rather than the classical procedure seen in many other methods. The cycle
called ”internal” works on the single node keeping unchanged the positions of the other nodes
and updating each time only the one considered until the resultant of the forces in the three
directions is null (or it is reasonable to consider it null). The “external” cycle instead operates
only when, at the end of the inner one, the i-th node is balanced so passing to the next and
repeating the internal one for each node. Once all the nodes are scrolled, the iteration restarts
checking again if the residual of the forces at the node are greater than the fixed threshold
(convergence tolerance). The convergence criterion is based on displacements, checking when
the difference between the position in an iteration and the one in the previous is lower than the
desired tolerance .
The formulation just presented is the most intuitive one, but it can be modified and written more
compactly witht he following:

𝑈t+1 = 𝐴𝑈t + 𝐵 (3.9)

In which 𝑈t+1 and 𝑈t are vectors of the nodal coordinates at the iteration t+1 and t, A is the
matrix of coefficients, a symmetric matrix that depends only on the coordinates of the other
two nodes belonging to the same element of the analysed node. Finally, B is a vector which
contains the constant terms. They are expressed as follows:
⎧ ∑︀

⎪ 𝐴 xx = 𝑞i (𝑥bi − 𝑥ai )2

⎪ ∑︀


⎪ 𝐴yy = 𝑞i (𝑦bi − 𝑥ai )2

⎨𝐴 = ∑︀
zz 𝑞i (𝑧bi − 𝑥ai )2
∑︀ (3.10)

⎪ 𝐴xy = 𝑞 i (𝑥bi − 𝑥ai ) (𝑦bi − 𝑦ai )

⎪ ∑︀

⎪ 𝐴xz = 𝑞i (𝑥bi − 𝑥ai ) (𝑧bi − 𝑧ai )

⎪ ∑︀

𝐴yz = 𝑞i (𝑦bi − 𝑦ai ) (𝑧bi − 𝑧ai )
⎧ ∑︀

⎨𝐵x = ∑︀ 𝑞i [(𝑦bi − 𝑦ai ) (𝑥bi 𝑦ai − 𝑥ai 𝑦bi ) + (𝑧ai − 𝑧bi ) (𝑥bi 𝑧ai − 𝑥ai 𝑧bi )]
𝐵y = 𝑞i [(𝑥bi − 𝑥ai ) (𝑦bi 𝑥ai − 𝑦ai 𝑥bi ) + (𝑧ai − 𝑧bi ) (𝑦bi 𝑧ai − 𝑦ai 𝑧bi )] (3.11)

⎩ ∑︀
𝐵z = 𝑞i [(𝑥bi − 𝑥ai ) (𝑧bi 𝑥ai − 𝑧ai 𝑥bi ) + (𝑦ai − 𝑦bi ) (𝑧bi 𝑦ai − 𝑥ai 𝑦bi )]

3.1. Mathematical formulation 23


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

It can be shown that for infinite iterations the terms of matrix A vanish and the difference
between 𝑈t+1 and 𝑈t is reduced, so the process converges [MaMo211]. As the iterations grow,
a limit can be identified in terms of the solution described by:
𝑈t→∞ = (𝐼𝑑 − 𝐴)−1 𝐵 (3.12)
(With Id the identity matrix 3x3)
This last formulation of the problem allows to significantly streamline the process in terms of
steps to be made and consequently in terms of memory and computational cost required. The
previous “internal cycle” has been removed due to the possibility of using the aforementioned
equation to directly calculate the position to which the node tends without the need for itera-
tions. In any case, the cycles executed remain two and are one that runs through the nodes in
the same iteration and one that causes the computation to start again at the first node once the
other node is completed.

3.2 Orthogonality of the forces in the elements

The explanation of the orthogonality of the forces can be performed in two very similar ways.
The first consists in computing the equivalent nodal loads of the stress state and checks that
the equilibrium of each element is satisfied. The other method employs the principle of virtual
works. However, in a first phase both will follow a completely identical procedure.

3.2.1 Method which employs the equivalent nodal loads

First of all, the domain taken in consideration must be defined. Without any loss of generality,
a generic triangle has been chosen as example of the domain, with different side lengths and
angles:

3.3: Example of the domain for the SSDM - [Bia302]

The numbering followed was to call the sides as the opposite node; a similar reasoning has
been made for the lengths of the sides and angles: the side of length c is opposite to the angle
𝛾. The first step performed is the determination of the shape functions of the nodes: a quick
rule is to divide the implicit equation of the straight line passing through the two other nodes
of the element than the one for which the shape function is being calculated, for the distance
between this straight line and the node considered in the calculation. For example, the shape
function for node 1 can be calculated with the following:
{︃ (︁ )︁
b sin γ
−𝑦 − c cos β 𝑥 + sinb γ = 0
(3.13)
ℎ = sinb γ

24 Chapter 3. Surface stress density method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Therefore, the shape function is:


b b sin γ
sin γ
− c cos β
𝑥 −𝑦
𝑁1 = b
(3.14)
sin γ

Following the same procedure, the other shape functions is:


𝑥 tan 𝛾 − 𝑦
𝑁2 =
𝑎 tan 𝛾
𝑦 (3.15)
𝑁3 =
𝑏 sin 𝛾
The element is loaded by an isotropic stress state, without any tangential stresses to ensure
that there are no areas in compression. Therefore, the stress must be constant for any chosen
direction and for any point inside the element; as a consequence, it schematized as following:

3.4: Stress distribution over the element side - [Bia302]

To highlight the forces transmitted to the nodes, it is necessary to calculate the equivalent nodal
loads associated to the distributed one. The calculation will be shown for a single node (the
others are analogous). Taking for example node 3, these are the equivalent loads derived from
side 1 and from side 2:
∫︁ c
𝐹13 = 𝑁3 𝜎0 sin 𝛽 d𝑦 (3.16)
0

where 𝐹13 is the equivalent nodal force on the 1st node due to the load applied along side 3.
Therefore:
∫︁ c
𝑦
𝐹13 = 𝜎0 sin 𝛽 d𝑦
0 𝑏 sin 𝛾
∫︁ c
𝜎0
= 𝑦 d𝑦
0 𝑐 (3.17)
[︁ 𝜎 ]︁c
0 2
= 𝑦
2𝑐 0
𝑐
= 𝜎0
2
This force has the same direction of the distributed load and with an analogous procedure it is
possible to determine also the equivalent nodal force on the 2nd node due to the load applied

3.2. Orthogonality of the forces in the elements 25


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

along side 3:
∫︁ b
𝑦
𝐹23 = 𝜎0 sin 𝛾 d𝑦
0 𝑏 sin 𝛾
∫︁ b
𝜎0
= 𝑦 d𝑦
0 𝑐 (3.18)
[︁ 𝜎 ]︁b
0 2
= 𝑦
2𝑏 0
𝑏
= 𝜎0
2
The other forces are:
• node 1:
𝑏
𝐹21 = 𝜎0
2 (3.19)
𝑎
𝐹31 = 𝜎0
2
• node 2:
𝑏
𝐹32 = 𝜎0
2 (3.20)
𝑐
𝐹12 = 𝜎0
2

3.5: Graphical representation of the nodal forces for the SSDM - [Bia302]

Enlarging the area around node 3:

3.6: Enlargement of a node for the calculation of the nodal forces - [Bia302]

26 Chapter 3. Surface stress density method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Summing the parallel and perpendicular components (with respect to side 3) of each force:


⎪ 𝐹13 sin 𝛽 − 𝐹23 sin 𝛾 =



⎪ = (︁2c 𝜎0 sin 𝛽 − 2b 𝜎0 )︁
sin 𝛾 =



⎪ sin γ
⎪ c b
⎪= 2 𝜎0 − 2 𝜎0 sin β sin 𝛽 =



=0
(3.21)







⎪ 𝐹13 cos 𝛽 + 𝐹23 cos 𝛾 =


⎪= c 𝜎0 cos 𝛽 + b 𝜎0 cos 𝛾 =


⎪ 2 2
⎩= a 𝜎
2 0

This result is in accordance with what has been stated previously. For the remaining nodes the
same procedure is applied: the forces in the orthogonal and parallel directions to the opposite
side are added to check, as in this case, that the two parallel components vanish whereas the two
orthogonal ones are added together and equal to half of the resulting distributed load applied
on the opposite side.

3.2.2 Method which employ the principle of virtual works

In the setup of the problem we will refer to the first phase followed in the previous sub-section:
the studied domain is the same as reported in figure 3.3, therefore, the same shape functions
as in the equations (3.14) and (3.15) are employed. From the latter the displacement field
represented in figure 3.7 is constructed:

3.7: Nodal displacements for the SSDM - [Bia302]

⎡ ⎤
𝑈1
⎢ ⎥
[︂ ]︂ [︂ ]︂ ⎢𝑈2 ⎥
𝑢(𝑥, 𝑦) 𝑁1 𝑁2 𝑁3 0 0 0 ⎢ ⎥
⎢ 𝑈3 ⎥
= (3.22)
𝑣(𝑥, 𝑦) 0 0 0 𝑁1 𝑁 2 ⎢
𝑁3 ⎢ 𝑉 1 ⎥⎥
⎣ 𝑉2 ⎦
𝑉3

3.2. Orthogonality of the forces in the elements 27


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

We obtain therefore the deformation field:


⎡ ⎤
𝑈1
⎡ ⎤ ⎡ ⎤ ⎢ 𝑈2 ⎥
𝜀x 𝑁1,x 𝑁2,x 𝑁3,x 0 0 0 ⎢ ⎥
⎢ 𝑈3 ⎥
⎣ 𝜀x ⎦ = ⎣ 0 0 0 𝑁1,y 𝑁2,y ⎦ ⎢
𝑁3,y ⎢ ⎥ (3.23)
𝑉1 ⎥
𝛾xy 𝑁1,y 𝑁2,y 𝑁3,y 𝑁1,x 𝑁2,x 𝑁3,x ⎢ ⎥
⎣ 𝑉2 ⎦
𝑉3

According to the PVW theory, the equilubrium is guaranteed by equating the work of the
external forces with the one related to the internal ones. In purely theoretical form we have:
∫︁ ∫︁
(︀ T )︀ (︀ T )︀
𝑃 𝛿𝑢 dΓ = 𝜎 𝛿𝜀 dΩ (3.24)
Γ Ω

where P represents the field of forces applied on the edge Γ of the element and with Ω the area
of the domain. Since we want to find the forces concentrated in the nodes (and verify their
direction) the first member of the equation is developed as:
∫︁
(︀ T )︀
𝑃 𝛿𝑢 dΓ = 𝐹1T 𝛿𝑢1 + 𝐹2T 𝛿𝑢2 + 𝐹3T 𝛿𝑢3 (3.25)
Γ

in which 𝐹1 , 𝐹2 and 𝐹3 are the vectors of the forces applied respectively in nodes 1, 2 and 3;
while 𝛿𝑢1 , 𝛿𝑢2 and 𝛿𝑢3 are the virtual displacement vectors of the same nodes. At this point it
is enough to displace one degree of freedom fixing the others, in order to find the components
of the forces at the node corresponding to the activated displacement. The derivatives of the
shape functions are explicitly calculated with respect to the two variables:
⎧ A1

⎪ 𝑁1,x = − B


1

⎪ 𝑁 1,y = − 1

⎪ B1
⎨𝑁 = 1
2,x a
1
(3.26)

⎪ 𝑁 2,y = −

⎪ aA 2

⎪𝑁3,x = 0



𝑁3,y = A13

In which:

sin γ


⎪ 𝐴1 = cb cos β

⎨𝐴
2 = tan 𝛾
(3.27)
⎪𝐴3
⎪ = 𝑏 sin 𝛾


⎩𝐵 b
= sinγ
1

An example will be proposed for one node (node 3) but the procedure is similar for the others.
Following the path previously described, the horizontal displacement of node 3 is activated to
compute the horizontal component of the force applied. The correspondent deformation vector
is:
[︀ 1
]︀
𝑈3 = 1 ⇒ 𝛿𝜀 = 0 0 A3 (3.28)

28 Chapter 3. Surface stress density method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Therefore, (3.24) becomes:


⎡ ⎤
∫︁
[︀ ]︀ 𝜎0
1 ⎣ ⎦
𝐹3x = 0 0 A3 𝜎0 dΩ = 0 (3.29)
Ω 0

As far as the vertical components are concerned, the vertical displacement is:
[︀ 1
]︀
𝑉3 = 1 ⇒ 𝛿𝜀 = 0 A3
0 (3.30)

So, the corresponding 𝐹3y :


⎡ ⎤
∫︁
[︀ ]︀ 𝜎0
𝐹3y = 0 A13 0 ⎣𝜎0 ⎦ dΩ =
Ω 0
𝜎0
= 𝐴elem = (3.31)
𝐴3
𝜎0 𝑎𝑏 sin 𝛾
= =
𝑏 sin 𝛾 2
𝑎
= 𝜎0
2
It is evident that the parallel component to the opposite side of node 3 is null, whereas the
perpendicular one is equal to half of the resulting distributed load.

3.2. Orthogonality of the forces in the elements 29


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

30 Chapter 3. Surface stress density method


CHAPTER 4

Dynamic relaxation method

The dynamic relaxation method is based on concepts which are fundamentally different from
the other two (FDM and SSDM). The DRM is in fact a step by step method that determines
the equilibrium position starting from an initial configuration through a pseudo-dynamic anal-
ysis. It must be underlined that the analysis performed is not for dynamic purposes, but purely
static. As a consequence, boundaries conditions and loads are applied on the structure to ob-
tain the static equilibrium. A fictitious displacement is assigned but it is completely irrelevant
for the achievement of the result. The dynamic component of the whole process is found in
the determination of the mass properties and fictitious damping assigned to all the points of
the discretization. These properties are arbitrary but a proper definition would lead to a faster
execution of of the program and a less intensive convergence towards the static solution.
Historically the DR was developed in 1965 by A.S. Day for the analysis of finite differences in
pressurized concrete tanks, although the concept was also known in earlier times by Rayleigh.
From 1970 onwards M.R. Barnes deepened the study of this method and implemented it for the
analysis and design of pure tensile structures. The method turns out to be particurarly efficient
for this structural typology due to the fact that every iteration always refers to the coordinates of
the various points of the mesh in the position calculated in the previous iteration; this allows the
method to automatically take into account large displacements (geometric linearity). Another
advantage is that it does not require the direct creation of an assembled stiffness matrix of the
structure, avoiding the formulation of a large system of nonlinear equations (non-linearity of
the material or geometry): the equations are solved point by point [Bia302].

4.1 Mathematical formulation

The main equation is the second Newton’s law:

𝐹 = 𝑀 𝑎 = 𝑀 𝑣˙ (4.1)

31
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

This equation would be written for every point of the discretization, assigning eventually dif-
ferent masses at different points if required to obtain a faster convergence. Conceptually, these
fictitious masses are associated to a fictitious damping, in particular a viscous damping, which
is proportional to the speed. The formulation becomes:

𝑅it = 𝑀i 𝑣˙ it + 𝐶i 𝑣it (4.2)

All the terms with the apex t are quantities computed at a determined time t. This equation can
be particularized in the three directions having different masses and damping coefficients in the
same point. Starting from an initial instant, the time is increased of a discretized quantity ∆𝑡,
small enough to improve the approximation of the solution. During the calculation velocities
are assumed linear on each interval ∆𝑡 and for each iteration the speed considered is the average
one, calculated starting from those in 𝑡 + ∆𝑡/2 and 𝑡 − ∆𝑡/2. Therefore, we can write:
1 (︁ t+ ∆𝑡 t− ∆𝑡
)︁
m
𝑣ix = 𝑣ix 2 + 𝑣ix 2 (4.3)
2
The accelerations are assumed constant:
t+ ∆𝑡 t− ∆𝑡
t 𝑣ix 2
− 𝑣ix 2
(4.4)
𝑣˙ ix =
∆𝑡
Therefore, the equation (4.2) becomes:
𝑀ix (︁ t+ ∆𝑡 t− ∆𝑡
)︁ 𝐶 (︁ ∆𝑡
ix t+ t− ∆𝑡
)︁
𝑅it = 𝑣ix 2 − 𝑣ix 2 + 𝑣ix 2 + 𝑣ix 2 (4.5)
∆𝑡 2
Taking advantage of the velocities computed in the time interval, the residual force on the node
has been computed and it is referred to the instant 𝑡 + ∆𝑡. From this equation it is possible to
compute also the value of the velocity for the next iteration:
(︃ )︃ (︃ )︃
M𝑖𝑥 C𝑖𝑥
t+ ∆𝑡 t− ∆𝑡
∆t
− 2 1
𝑣ix 2 = 𝑣ix 2 M𝑖𝑥 C𝑖𝑥
+ 𝑅it M𝑖𝑥 C𝑖𝑥 (4.6)
∆t
+ 2 ∆t
+ 2

The variation of the coordinate is then reconstructed and, simply adding this difference to the
previous position, the new coordinate becomes:
t+ ∆𝑡
∆𝑥it+∆t = ∆𝑡𝑣ix 2 (4.7)

t+ ∆𝑡
𝑥t+∆t
i = 𝑥ti + ∆𝑡𝑣ix 2 (4.8)
If properly assigned, an important part is played by the initial conditions (even if they are irrel-
evant for the equilibrium): fixing initial velocities different from zero is possible but not con-
venient; in fact, this would change the loads value on the membrane: loads are not the applied
ones but are modified by the introduction of the damping force. This represents undoubtedly a
useless complication in a practical sense.
Applying a null initial velocity:
∆𝑡
− ∆𝑡
𝑣ix2 = −𝑣ix 2 (4.9)

32 Chapter 4. Dynamic relaxation method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Then, introducing this equation in the (4.6) for the time ∆𝑡/2, the velocity at time ∆𝑡/2, that
is required in order to have a null initial velocity for time 𝑡 = 0 (as function of the mass and of
the external load) can be computed:
(︂ )︂ (︂ )︂
∆𝑡 𝑀ix 𝐶ix − ∆𝑡 𝑀ix 𝐶ix t
∆𝑡 ∆𝑡 𝐹ix
𝑣ix
2
+ = 𝑣ix 2
− + 𝑃ix 𝑣ix2 = (4.10)
∆𝑡 2 ∆𝑡 2 2𝑀ix
where 𝑃ix
t
represents the external load vector applied in the x-direction.
All the passages must be repeated for the other directions.

4.2 Convergence control

The success of the method is based on the kinetic energy of the structure remaining at the end
of the iterations: when the kinetic energy is lower than a certain fixed threshold (so that it is
possible to consider it null), the structure has reached the equilibrium condition and the iterative
process is concluded. The kinetic energy is calculated as:
{︃ ∑︀ ∑︀
𝑇k = ni m 2
j 𝑀ij 𝑣ij
(4.11)
𝑇k ≤ 𝑇0

where n is the number of nodes and the dimension of the problem.


This relationship can also be seen as a check on the residual forces in each node (which should
still be calculated individually); in fact, dynamically speaking, the acceleration and the velocity
are different from zero when there are unbalanced residual forces. On the other hand, if the
kinetic energy is null, which is a condition never met at machine precision, it can be reasonably
assumed that all the nodes are balanced.

4.2.1 Mass and viscous damping

The geometrical properties are defined a priori and are chosen based on the design requirements
and not for the purposes of the method; the characteristics that can be arbitrarily chosen during
this step are the time interval ∆𝑡, the nodal masses and the damping coefficient. The DR is gen-
erally satisfactory (it converges without encountering numerical instabilities) when the interval
∆𝑡 is not too large or when the masses are not too small; for this reason, by reducing the ∆𝑡
(i.e. by increasing the sampling points) and enlarging the masses (thus providing greater inertia
to the structure), it is possible to make the system more stable. This approach is consired “con-
ditionally stable”, whereas Barnes demonstrated that, by employing a time-dependent mass
value, the problem can become “unconditionally stable”:
∆𝑡2
𝑀ix = 𝐾ix (4.12)
2
where 𝑀ix is the x-directed stiffness in the node 𝑖th . This stiffness is calculated differently
depending on whether we are considering a network of cables or a membrane (or a combination
of the two).
• For cables or beams the elastic stiffness is found as:

4.2. Convergence control 33


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

𝐸𝐴i 𝑇i
𝐾i = + (4.13)
𝐿i 𝐿i
where 𝑇i is the tension in the 𝑖th element and 𝐿i its current length.
• Instead, in the case of a membrane, considering the texture discretized as triangular ele-
ments with constant thickness, it results:
(︂ )︂
3 𝐿2
𝐾iy = 𝐸𝑡𝑏 𝐿1 + (4.14)
2 𝐿 1 𝐿2
where E is Young modulus of the material, t is the thickness, b is the mean distance between
the nodes in the x-direction, 𝐿1 and 𝐿2 are the distances of the adjacent nodes in the y-direction
from the analysed node.
These process is executed for all directions (x,y,z) and the maximum of the three masses is
assumed for all the nodes, since for the form finding it is advantageous to have the largest
possible mass.

𝑀i = {𝑀ix ; 𝑀iy ; 𝑀iz } (4.15)

For what concerns the damping factor, it mitigates the vibration effects of the membrane, guid-
ing it towards the static equilibrium. So, based on its value, the convergence may present
different trends.

4.1: Displacement diagram for a 1 dof system for the DRM - Edited from [Wiki411]

Figure 4.1 displays the trends of the displacemenst according to different valuse of the damping
factor (𝜁 = 𝑐/𝑐cr ). The value which ensures the fastest convergence towards the solution is the
so called: “critical damping factor”, 𝜁cr = 1. For this value, the displacement pass the solution
and then tends to it asymptotically, after reversing its motion. For overdamped (𝜁 > 𝜁cr ) or
underdamped (𝜁 < 𝜁cr ) membranes the convergence is slower and therefore not optimized
from a computational point of view.
The value of the critical damping coefficient 𝑐cr is:
√︀
𝑐cr = 2 𝐾i 𝑀i (4.16)

34 Chapter 4. Dynamic relaxation method


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

which depends on the maximum stiffness of the system in each direction.


Another path to determine the damping coefficient is taking advantage of a pseudo-dynamic
analysis and determining the highest vibration frequency of the same structure without the
damping.

𝑐cr = 4𝜋𝑓max 𝑀i (4.17)

4.2.2 Kinematic damping

The kinematic damping can be used as an alternative to its viscous counterpart; the kinematic
damping is in addition often priviliged by the designer because it requires the definition of less
parameters. As already shown in (4.16), the viscous damping requires to know the various
nodal masses, the stiffnesses and the integration interval; the kinematic damping requires only
the masses and the time interval ∆𝑡; in fact, in this case, the factor which guides the conver-
gence is the kinetic energy. Cundall developed this method studying mechanically unstable
rocks, finding out that the DRM is extremely stable and fast as far as the resolution of large
displacement problems are concerned.
In practical applications, no damping coefficient is considered but the kinetic energy trend in
the case of an undamped system is drawn until the first maximum: at time 𝑡 + ∆𝑡 the kinetic
energy is less than the previous instant 𝑡, so that the velocity is fixed at 0 and a new iteration will
be performed. This procedure is motivated by the behaviour of 1 degree of freedom systems,
where the peak of the kinetic energy corresponds to the static equilibrium condition (for a
multi-degree of freedom system, it is necessary to let the velocity vanish in correspondence of
more than one peak until convergence is reached).

4.2: Trend of the kinetic energy in the DRM - [Hen304]

If the position of the peak coincides with the time 𝑡+∆𝑡/2, that is the instant in which velocities
are computed, the coordinates of the actual current position will be computed in the same
instant (remember that velocities are estimated at time 𝑡 + 𝑘∆𝑡/2, whereas the coordinates at
𝑡 + 𝑘∆𝑡). It can be demonstrated that carrying on with the iterations using this new position
may possibly lead to the divergence of the solution. Therefore, the coordinates computed at
time 𝑡 − ∆𝑡/2 are set as reference coordinates (they are related to the last velocity computed
before the peak). So, it results:
t+ ∆𝑡
𝑥t+∆t
i = 𝑥ti + ∆𝑡 𝑣ix 2 (4.18)

4.2. Convergence control 35


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

from which:
t+ ∆𝑡
𝑥ti = 𝑥it+∆t − ∆𝑡 𝑣ix 2 (4.19)

For the instant 𝑡 − ∆𝑡/2:

t− ∆𝑡 ∆𝑡 t− ∆𝑡
𝑥i 2
= 𝑥ti − 𝑣 2 (4.20)
2 ix
Replacing (4.19) in (4.20):
(︁ )︁ ∆𝑡
t− ∆𝑡 t+ ∆𝑡 t− ∆𝑡
𝑥i 2
= 𝑥it+∆t − ∆𝑡 𝑣ix 2 − 𝑣ix 2 (4.21)
2
Finally, replacing now (4.21) in (4.6) (for the case with 𝑐ix = 0), it results:
(︂ t )︂
t− ∆𝑡 3 (︁ t+ ∆𝑡 )︁ 1 𝑅ix
𝑥i 2
= 𝑥it+∆t
− 𝑣 2
∆𝑡 + ∆𝑡2 (4.22)
2 ix 2 𝑀ix

Now, when the analysis is restarted, the velocities must be computed in the middle point of the
previous interval:
(︂ t )︂
t+ ∆𝑡 1 𝑅ix
𝑥i 2
= ∆𝑡 (4.23)
2 𝑀ix

4.3: Kinetic energy in the neighbourhood of the peak for the DRM - [Hen304]

36 Chapter 4. Dynamic relaxation method


CHAPTER 5

Finite element analysis

The basic aim of the finite element method is to solve partial differential equations (PDEs),
or systems of coupled PDEs, numerically. Instead of finding the analytical solution of the
PDE, which is usually a function of the coordinates and therefore not trivial to develop, the
equation is solved numerically for a set of coordinates of grid points. For this purpose, the
continuum is discretized with a number of so-called finite elements which partition the body in
a mesh, which consists of both the defined grid nodes and elements. If the finite elements are
appropriately small, the solution of the PDE can be approximated with a simple function, the
so-called shape function, in each element, which acts as a contribution to the approximation
of the global solution of the PDE. Finally, a linear or non-linear system of equations must be
obtained. with the advantage that (non-)linear systems of equations can now be easily solved
by efficient computer algorithms [Hol405].

5.1 Modelling and discretization

In order to develop a thorough model of the problem at hand, some fundamental steps are
strictly required; each of them involves the inclusion of numerical errors found in the final
result.
The first two passages are:
1. Modelling:
This phase is present in all engineering studies: it translates the physical system
to a mathematical model, which abstracts some aspects of interest, focusing atten-
tion on a few aggregate variables and “filtering” the remaining ones. For example,
molecular interactions are not taken into account when calculating the bending
moment of a beam. The physical system, if complex, can be subdivided into sub-
systems, for example a ship or an airplane are composed by a lot of components,

37
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

where each of them can be considered as subsystem. The subsystem will then be
divided into finite elements that “carry” a mathematical model. It is necessary that
the chosen mathematical model is adequate to the simple geometries of the finite
elements. Choosing an element type in a software program is equivalent to an im-
plicit choice of the underlying mathematical model. The error that can lead the use
of a model must be evaluated with experimental tests, an operation that is generally
expensive in terms of time and resources.
2. Discretization:
In a numerical simulation it is necessary to pass from an infinite number of degrees
of freedom (which is a prerogative condition of the “continuum”) to a finite num-
ber (nodal variables). Discretization, in space or time, has the aim of obtaining a
discrete model characterized by a finite number of degrees of freedom. The error
is given by the discrepancy with the exact solution of the mathematical model. The
most important parameter of the discretization is the characteristic length, which
prescribes the desired size of the elements in the mesh. This size field can be uni-
form, specified by values associated with points in the geometry, or defined by
general “fields”. The definition of the characteristic length depends on the element
geometry and formulation and it is a typical length of a line across an element for a
first-order element; it is half of the same typical length for a second-order element.
For beams and trusses (and cables) it is the length of the element axis. For mem-
branes and shells it is a characteristic length in the reference surface. Elements that
have aspect ratios close to one are recommended, in fact elements with large aspect
ratios will have rather different behavior depending on the direction in which loads
are applied and so the solution is said to be mesh sensitive because of this aspect
[Aba001].

5.1: Discretization of a finite element model

5.2 Finite elements

We shall now give the reader a brief overlook of the basics of the finite element formulation for
cable and membrane elements, which will be later extensively employed in Calculix and Dlubal
for the solution of tensile structures, both in the pre-processing phase of the form-finding and
for the application of the additional live loads.

38 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.2.1 Cable modellization

The essential characteristic of the cables is that they are flexible structures which can undergo
great displacements, so the mechanical analysis carried out is highly nonlinear. From the me-
chanical point of view, a cable is able to sustain axial traction and acquires stiffness with respect
to compression if it was adequately pre-stressed (otherwise compression forces would result in
failure).

5.2: Cable element: two nodes which can be subject only to axial force - [Nas007]

The first aspect to be defined is the axial force acting in this particular finite element. The stress
condition is due to two parameters:
• the pre-stress assigned as a thermal load;
𝑁prestress = (𝛼𝐸𝐴) ∆𝑇 with ∆𝑇 > 0 (5.1)
• the elongation caused by the external loads.
So, the axial force is:

𝑁 = 𝐸𝐴 [𝜂 − 𝛼 (𝑇 − 𝑇0 )] (5.2)

with:
{︃
𝐸 > 0, if (𝑇 − 𝑇0 ) < 0
(5.3)
𝐸 = 0, if (𝑇 − 𝑇0 ) ≥ 0

where 𝐸t represents the tangent apparent elastic modulus or effective elastic modulus and is
equal to:
𝐸mat
𝐸t = 1 γ 2 l2 (5.4)
1+ 12 σ 3
𝐸mat

with 𝑙 the projection of the chord length on the horizontal plane. The latter expression is valid
for cables with supports either on the same level or inclined and is demonstrated by putting
small increases in stresses in relation with small increases in strains.
From the expression of the tangent apparent elastic modulus, we understand that 𝐸t is smaller
than 𝐸mat and the following limit holds:
𝐸mat
lim 𝐸t = lim 1 γ 2 l2
= 𝐸mat (5.5)
σ→+∞ σ→+∞ 1+ 12 σ 3
𝐸mat

As in figure, 𝐸t represents the tangent modulus to the 𝜎 − 𝜀* where 𝜀* = dl


l
is the apparent
deformation calculated with reference to the chord length.

5.2. Finite elements 39


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.3: Graphical representation of the tangent and secant apparent modulus of elasticity. -
[Mal117]

In case of finite increments, starting from a reference configuration, we can define the secant
apparent modulus as follows:
𝐸mat
𝐸s = (5.6)
γ 2 l2 (1+µ)4
1+ 3
12σ𝑚
· 16µ2
𝐸mat

The equivalent stress 𝜎 is a function 𝜇 = 𝜎i /𝜎s (respectively initial and final stresses) and the
mean stress 𝜎m = 𝜎s (1 + 𝜇)/2:
[︂ ]︂ 13
16𝜇2
𝜎 = 𝜎m · (5.7)
(1 + 𝜇)4

In a linearized structural analysis, 𝜎 can be used to compute the elastic tangent modulus, instead
of using the secant modulus.
In order to find the displacement field, u for a static problem, the equilibrium position is sought
for a cable structure which is initially in a generic configuration and subject to a system of
forces; in order to solve this problem, it is necessary to employ an iterative non linear analysis,
as thoroughly described in 5.3.

5.2.2 Membrane modellization

To obtain the equations characterizing the behavior of the membranes, it is necessary to intro-
duce several hypotheses. The goal here is not to prove how these hypotheses have been defined,
but they will be given directly without going into details; a deeper insight can be gained refer-
ring to [LeV111].
The main hypothesis underlying the modellization are [DeS003b]:
• The membrane displacements coincide with the displacements of the mean surface;
• The membrane thickness 𝑡 is very small compared to the characteristic length of the
membrane;
• The stresses are constant in the thickness.

40 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.4: Membrane element and its reference system - [Hen304]

• We consider the membrane to be, locally, in plane stress situation, as reported in 5.4:
⎡ ⎤
𝜎xx 𝜎xy 0
σ = ⎣𝜎yx 𝜎yy 0⎦ (5.8)
0 0 0
An important aspect not yet analysed is how to determine the modulus of elasticity of a struc-
tural element of this kind. As widely described so far, the weaving process represents a signif-
icant source of non-linearity which should not be neglected, furthermore, the composite nature
of membranes impose to deepen the mechanical response. An interesting reference is repre-
sented by the ASCE STANDARD on Tensile Membrane Structures ([ASCE100]) in which a
procedure is illustrated to calibrate the elastic constants for an orthotropic elastic law.
The calibration is done on the basis of experimental results obtained on a cruciform membrane
specimen subjected to biaxial loading, for different load ratios in the two main direction (the
fibers direction).

5.5: Cruciform specimen for biaxial test - [ASCE100]

During the test, the stresses are imposed in both directions keeping fixed the ratio between warp
and fill stress. In figure 5.6 and 5.7 are represented the results of the test, the curves labelled
as fill 1:2 represents stress-strain relations concerning fill stress and strain obtained by loading
according to the ratio 1:2 that is imposising a load in the fill direction which is the double of
the one in warp direction.

5.2. Finite elements 41


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.6: Stress-strain curve of fibergalss - [ASCE100]

5.7: Stress-strain curve of polyester - [ASCE100]

42 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Both material test results display a nonlinear nature, mainly on the first loading application.
The two materials show different behaviour (mainly in the first loading): the fiberglass shows
a strain hardening, whereas the polyester a strain softening. The mechanical response tends to
more linear under successive load cycles.
Note that the stress range for which the stress-stain curve are plotted is limited with respect to
the bracking strength of the materials; in fact, for design purposes the stresses are kept lower
than one-forth of the ultimate stresses.
Due to the non linearity displayed, if the modulus of elasticity were to be found directly from
these curves, it would vary with the stress. This result is not practical to be implemented, it
increases the computational cost.
Generally, a constant value is extracted selecting a slope for each stress ratio. The Least Squares
Method is usually applied to determine the values of the moduli which embodied the best fitting
with respect to the linearized experimental curves.

5.8: Biaxial Stress–Strain Curve of Fiberglass with Linearization Lines - [ASCE100]

The same procedure could be adopted also for the estimate of the elastic moduli representing
the material behaviour under successive load cycles.

5.3 Non-linear analysis

In order to solve systems of nonlinear equations there are many methods which are mainly
based on the Newton procedure. We must also bear in mind that the the problem formulation
influences the solution algorithm to be adopted. For this reason, it is important to properly
understand and implement the most appropriate method.

5.3. Non-linear analysis 43


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.3.1 Newton-Raphson method

With reference to a discretized structural problem, for which the nodal displacements (collected
in the vector u) are the primary unknowns, one of the most widely used algorithm to solve
nonlinear static problems is the Newton-Raphson Method [Kim114]. It is an iterative method
that allows to find u using the equilibrium condition defined as:

Fext = Fint (u) (5.9)

where Fext are the given nodal loads and Fint (u) are the internal forces developed on the nodes
by the structural elements (obviously for a linear problem 𝐹int = 𝑘𝑢 with 𝐾 being the overall
stiffness matrix of the structure).
Numerical methods for solving a system of nonlinear equations are based on an initial estimate,
u0 , with which it is possible to find a new increment, ∆u, so that the new estimate, u0 + ∆u,
is closer to the solution to the equilibrium equation (5.9). The increments are determined ap-
proximating locally the nonlinear equations by means of linearization. This process is repeated
until the original nonlinear equations are satisfied. Suppose an approximate solution at the 𝑖th
iteration is known and is equal to ui . The solution at the next iteration can be approximated
using the first-order Taylor series expansion as follows:

Fint (ui+1 ) ≈ Fint (ui ) + Ji (ui ) ∆ui = Fext (5.10)

where
(︂ )︂
𝜕Fint
Ji (ui ) ≡ (5.11)
𝜕u i

that is the Jacobian matrix at the 𝑖th iteration, commonly known as the tangent stiffness matrix
in structural applications and ∆ui is the solution increment.
This passage is aimed to calculating ∆ui and iteratively update the solution, ∆ui+1 . Once all
the terms have been rearranged, the system of linearized equations can be obtained as:

Ji ∆ui = Fext − Fint (ui ) (5.12)

Equation (5.12) is similar to the matrix equation of linear systems, except that:
1. The coefficient matrix, Ji (ui ), is not constant, but a function of ui ;
2. The equation is solved for the increment, ∆ui , not for the final solution, u;
3. The second member side is not the applied force, but the difference between the applied
force and the internal force (called the residual).
Once the system of equations has been solved for the displacement increment, ui , a new ap-
proximate solution is obtained as follows:

ui+1 = ui + ∆ui (5.13)

Until the correct solution is not found, this result will not exactly fulfill the system of nonlinear
equations and there will be some residual or unbalanced force which is computed as in:

Ri+1 = Fext − Fint (ui+1 ) (5.14)

44 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The final solution can be considered attained when the residual force is smaller than a given
tolerance, the result, ui+1 , is accepted as the accurate solution, and the process exits. Otherwise,
the iterations continue until this residual becomes smaller than the tolerance. The convergence
parameter is expressed in the normalized form as follows:
∑︀n 2
j=1 (𝑅i+1,j )
𝑐𝑜𝑛𝑣 = ∑︀n 2 (5.15)
j=1 (𝐹ext,j )

The iterations are terminated when the convergence parameter, conv, becomes smaller than a
given tolerance (i.e. 0.001).
Another criteria, based on the solution increment, can be applied to determine the convergence
of the iterative procedure. When the increment of the solution is much smaller than the initial
increment, then it is assumed that the solution has converged. Thus, the convergence criterion
can also be written as:
∑︀n 2
j=1 (∆𝑢i+1,j )
𝑐𝑜𝑛𝑣 = ∑︀n 2 (5.16)
j=1 (∆𝑢1,j )

where ∆u1 is the displacement increment estimate at the first iteration.


In any case, this criterion can become too strict when the convergence is slow. In fact, it is
easier to make the displacement converge rather than the force, since stresses or forces are
derivatives of displacements in structural problems.
Many commercial and open-source programs have the possibility to select both criteria so that
the user is presented with an info box reporting the progress of the iterations.
Two iterations of the procedure for a system with a single DOF are illustrated graphically in
figure 5.9.

5.9: Two iterations of the Newton-Raphson procedure for a system with a single DOF - Edited
form [Kim114]

For a single DOF system, the Jacobian matrix is the slope of the nonlinear function, Fint . The
solution converges faster if the initial configuration is close to the solution, for this reason
in practice is common to apply gradually the desired load with a set of increments. When

5.3. Non-linear analysis 45


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

the iteration analysed is close to the solution, the Newton-Raphson method shows a quadratic
convergence.
Assuming 𝑢exact as the exact solution, and 𝑢n and 𝑢n+1 be the two consecutive approximations
of the solution. Then, the method converges quadratically when there exists a constant 𝑐 > 0
such that:

|𝑢exact − 𝑢n+1 | = 𝑐|𝑢exact − 𝑢n |2 (5.17)

where:
• |𝑢exact − 𝑢n+1 | is the error at the (𝑛 + 1)th iteration
• |𝑢exact − 𝑢n |2 is the square of the error at the 𝑛th iteration
In practice, the exact solution is the objective of the problem and therefore is not known ex
ante, so the the converged solution is assumed as 𝑢exact .
To demonstrate that this numerical algorithm converges quadratically, it must be proved that
the following ratio tends to a constant value 𝑐:

|𝑢exact − 𝑢n+1 |
lim =𝑐 (5.18)
n→∞ |𝑢exact − 𝑢n |2

In practice, it is often enough to prove that the convergence criterion in. (5.12) reduces quadrat-
ically at each iteration.
It is worth noticing that the Newton–Raphson method does not always guarantee convergence
to the accurate solution [Kim114]:
• This method assumes that the solution increment in (5.12) is relatively small. Therefore,
after every iterations the value of ∆𝑢 becomes smaller and may also tend to zero as the
solution accuracy improves. However, when the Jacobian matrix becomes singular, or
the determinant of matrix J is null, ∆𝑢 becomes infinite and the solution diverges. This
means, in a single DOF system, that the slope of Fint becomes zero and the residual
cannot be reduced. Numerically, a similar behavior can be observed when the matrix is
nearly singular.
• If the starting point is too far away from the exact solution, the method may diverge or
oscillate between two points. This also happens when the curvature of the Fint curve
changes its sign between two consecutive iterations. In such a case, it is possible that the
Newton–Raphson algorithm may result in an infinite loop. In order to prevent an infinite
loop, a maximum number of iterations is imposed and the algorithm exits with an error
message when the number of iterations reaches the maximum allowed number.
The Jacobian matrix of structural mechanics problems is normally positive definite. Physically,
this means that in order to increase the displacement, the applied force should increase. How-
ever, in some cases, the displacement may increase without the applied force increasing. Or,
equivalently, the displacement continuously increases while the applied force decreases. This
causes structural instability.
As well explained in [Kim114], a common examples of this problem are bifurcation and snap-
through behaviors. Figure 5.10 shows the snap-through behavior of an elastic inclined slender
beams with both ends clamped.

46 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.10: Snap-through behaviour of inclined slender beams - [Kim114]

The plot shows the relation between the applied force and the vertical displacement at the force
application point. Initially, the applied force increases along with the tip displacement (region
AC). In this region, the beams are stable, and the Jacobian matrix is positive definite. When they
reach point C, the Jacobian matrix becomes singular, and the force cannot increase beyond 𝐹C .
Between points C and E, the tip displacement continuously increases while the force decreases.
The system is unstable in this region. Beyond E, the beams become stable again with a positive
definite Jacobian matrix. When the Newton–Raphson method is used, it can only solve for the
response in the region, AC. For example, for a given force, 𝐹B , it always yields point B, not
point D. Special techniques are required to follow the force–displacement curve.
As final remark, it is relevant to underline that starting from this method, other two strategies,
the Modified Newton-Raphson Method and the Incremental Secant Method have been devel-
oped. The first one is characterized by a less expensive procedure from a computational point
of view, but it needs more iterations to find the appropriate solution. On the other hand, the
Incremental Secant Method provides the same benefits in term of computational efficiency, but
it guarantees a greater level of convergence rate.

5.11: Modified Newton-Raphson Method (left) and Incremental Secant Method (right) - Edited
from [Kim114]

5.3.2 Newton-Krylov method

The Newton–Krylov method is a numerical method for solving non-linear problems using
Krylov subspace linear solvers.

5.3. Non-linear analysis 47


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

In this extract we are going to underline the main aspects of the method, more details are
developed in [KnKe210] and [XuCo217].
As already explained in paragraph 5.3.1, the core of the Newton method is to successively
solve linear systems, (5.19), in which the n-by-n Jacobian matrix is computed at every iteration
[XuCo217].
Fint (ui ) + Ji (ui ) ∆ui = Fext (5.19)
This procedure could be computationally expensive if the problem is characterized by a huge
number of unknowns, thus, approximations of the Jacobian matrix are often used to replace
the exact Jacobian matrix in the Newton iteration (Modified Newton-Raphson Method or In-
cremental Secant Method, figure 5.11).
Although the computational cost of each iteration is thereby reduced, more iterations are usu-
ally required to converge to the root of (5.19).
However, the Jacobian matrix itself is structured in many applications, so it may not be neces-
sary to form the Jacobian matrix itself explicitly in each iteration. In 2004, Knoll and Keyes
([KnKe210]) reviewed the Jacobian-free Newton-Krylov method (JFNKM) for solving the non-
linear equations (5.19); this approach combines a matrix-free approach with nonsymmetric
Krylov subspace methods. This method is a projection, or generalized projection, method for
solving a linear system 𝐴𝑥 = 𝑏 using the Krylov subspace 𝐾j [XuCo217]:
𝐾j = 𝑠𝑝𝑎𝑛(𝑟0 , 𝐴𝑟0 , 𝐴2 𝑟0 , . . . , 𝐴j−1 𝑟0 ) (5.20)
where 𝑟0 = 𝑏 − 𝐴𝑥0 .
One of the most widely used method is the Generalized Minimal RESidual method (GMRES),
which is an Arnoldi-based method (further explanation of the Arnoldi method can be found in
[LeSo109] and [LSY113]). In the GMRES, the Arnoldi basis vectors form the trial subspace
out of which the solution is constructed. A matrix-vector product is required to create a new trial
vector per each iteration of the method. The method terminates on the basis of an estimation
of the residual. For this reason, the GMRES method ensures that is not necessary to form the
parameter matrix A explicitly. The method only requires the matrix-vector product (i.e. σx)
[KnKe210].
As properly shematized in [XuCo217], in order to construct a matrix-vector product 𝐽(𝑥)𝑢 for
(5.19), the finite difference method can be implemented. For a nonlinear function, its corre-
sponding Jacobian-vector product can be approximated as:
𝐹int (𝑥 + 𝜖𝑢) − 𝐹 (𝑥)
𝐽(𝑥)𝑢 = (5.21)
𝜖
where 𝜖 is a small positive number.
Thus, combining the GMRES method with finite differences, the JFNKM method is obtained
for solving nonlinear equations. In practice, this method works well in solving problems in
fluid dynamics, power systems, plasma physics and so on.
As a final remark, it is known that (5.21) is a first-order approximation of the Jacobian vector
product. We can increase its accuracy to second order with:
𝐹int (𝑥 + 𝜖𝑢) − 𝐹 (𝑥 − 𝜖𝑢)
𝐽(𝑥) ≈ (5.22)
𝜖
but this technique doubles the cost of forming 𝐽(𝑥)𝑢.

48 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.4 Constitutive models

5.4.1 Isotropic liner elastic material

5.12: General deformable continuum - [CoTa105]

We consider a general deformable continuum as represented in figure 5.12, that in its deformed
configuration is boundend by a surface 𝑆 and has a volume 𝑉 . More precisely, we will dis-
cuss about the Cauchy Continuum, from the scholar to whom are traditionally associated the
definitions of the measurement of stress and strain [CoTa105].
The external actions acting on the body, supposed known, are:
• Volume force, F: force per unit of volume as, self-weight, inertia forces, etc.;
• Surface force, f: force per unit of surface, of known value on the unbounded surface, 𝑆f ;
• Imposed displacement, s0 , of the constrained surface, 𝑆u .
All the actions acting on the body are generally dependent on the point in which they are
applied. We will indicate with x the vector containing the generic point position. Therefore,
the generic notation for functions of position will be F(x). The components of the vectorial
quantity just introduced will be referred to a system of orthogonal Cartesian axes, and all the
components will be grouped in column vector:
⎡ ⎤ ⎡ ⎤ ⎡ ⎤
𝐹x 𝑓x 𝑠0x
F = 𝐹y f = 𝑓y s0 = 𝑠0y ⎦
⎣ ⎦ ⎣ ⎦ ⎣ (5.23)
𝐹z 𝑓z 𝑠0z

We assume the external actions vary in time in a quasi-static manner, so that the dynamic effect
can be neglected. Moreover, all the displacement which the body undergoes are of small entity,
so that it is possible to assume the small strains and displacements hypotesis, which allows to
consider the deformed configuration equal to the undeformed one.
The unknown fields characterizing the stress-strain behaviour of the body are:
• Displacement, s(x):
⎡ ⎤
𝑠x
s = ⎣ 𝑠y ⎦ (5.24)
𝑠z

5.4. Constitutive models 49


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• Deformation, ε(x):
⎡⎤
𝜀xx
⎢ 𝜀yy ⎥
⎢ ⎥
⎢ 𝜀zz ⎥
ε=⎢
⎢𝛾xy ⎥
⎥ (5.25)
⎢ ⎥
⎣𝛾yz ⎦
𝛾zx
• Stress, σ(x):
⎡⎤
𝜎xx
⎢𝜎yy ⎥
⎢ ⎥
⎢ 𝜎zz ⎥
σ=⎢
⎢𝜎xy ⎥
⎥ (5.26)
⎢ ⎥
⎣ 𝜎yz ⎦
𝜎zx
In order to find these fields we employ different equations:
• Indefinite Equilibrium Equation:
These are 3 first order, linear, differential equations which in tensorial notation can be written
as:

𝜎ij,i + 𝐹j = 0 (5.27)

with the associated boundary condition:

𝜎ij 𝑛i = 𝑓j (5.28)

• Kinematic Compatibility:
These are 6 first order, linear, differential equations, which in tensorial notation can be written
as:
1
𝜀ij = (𝑠i,j + 𝑠j,i ) (5.29)
2
with the associated boundary condition, which represents the displacement imposed or allowed
by the constrains (= 0 in case they are fixed):

𝑠j = 𝑠0j (5.30)

• Constitutive Law:
These are 6 linear algebric equations, that link together stress and strain by means of the elastic
tensor:
{︃
𝜎ij = 𝑑ijhk 𝜀hk Direct Form
(5.31)
𝜀ij = 𝑐ijhk 𝜎hk Inverse Form

Where 𝑑 represent the stiffness of the system and 𝑐 the flexibility. This tensor is symmetric and
its independent components (elastic constants) are at most 21:

50 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• 𝑑ijhk = 𝑑jihk → as consequence of the symmetry of the stress tensor;


• 𝑑ijhk = 𝑑ijkh → as consequence of the symmetry of the strain tensor;
• 𝑑ijhk = 𝑑hkij → as consequence of the material elasticity (or better, the independence of
the deformation work from the load history).
By means of the physical meaning of the elastic potential, represented by the deformation work
per unit volume, the symmetric matrix d and c are positive definite and so they cannot be sigular
(d = C−1 ).
In case of isotropic elastic material with Young’s Modulus 𝐸 and Poisson’s ratio 𝜈, the stiffness
matrix results to be:
⎡ ⎤
1−𝜈 𝜈 𝜈 0 0 0
⎢ 𝜈 1−𝜈 𝜈 0 0 0 ⎥
⎢ ⎥
𝐸 ⎢ 𝜈 𝜈 1 − 𝜈 0 0 0 ⎥
d= ⎢ ⎥ (5.32)
(1 + 𝜈)(1 − 2𝜈) ⎢ ⎢ 0 0 0 1−2ν
2
0 0 ⎥

⎣ 0 0 0 0 1−2ν
0 ⎦
2
1−2ν
0 0 0 0 0 2

and the flexibility matrix:


⎡ ⎤
1 −𝜈 −𝜈 0 0 0
⎢−𝜈 1 −𝜈 0 0 0 ⎥
⎢ ⎥

1 ⎢−𝜈 −𝜈 1 0 0 0 ⎥
c= ⎢ ⎥ (5.33)
𝐸⎢ 0 0 0 2(1 + 𝜈) 0 0 ⎥

⎣ 0 0 0 0 2(1 + 𝜈) 0 ⎦
0 0 0 0 0 2(1 + 𝜈)

Thus, the constitutive law is:

σ = dε (5.34)

5.4.2 Orthotropic linear elastic material

Orthotropic materials are a subset of anisotropic materials which, in contrast to the most gen-
eral case, have two preferred directions of strength which are mutually perpendicular. The
properties along these directions (also known as principal directions) are the extreme values of
the elastic coefficients [SoWo008].
The formulation follows the same passages explained in paragraph 5.4.1; the constitutive law
is:
⎡ ⎤ ⎡ E𝑥 ν𝑥𝑦 E𝑦
⎤⎡ ⎤
𝜎xx 1−ν𝑥𝑦 ν𝑦𝑥 1−ν𝑥𝑦 ν𝑦𝑥
0 𝜀xx
⎣𝜎yy ⎦ = ⎢ ν𝑦𝑥 E𝑥 E𝑦 ⎥⎣ ⎦
⎣ 1−ν𝑥𝑦 ν𝑦𝑥 1−ν𝑥𝑦 ν𝑦𝑥 0 ⎦ 𝜀yy (5.35)
𝜏xy 0 0 𝐺 𝛾 xy

Note that in order to satisfy the symmetry in the matrix, the following relationship linking the
Poisson’s ration and the elastic modulus in the two principal directions must be imposed:

𝜈xy 𝐸y = 𝜈yx 𝐸x (5.36)

5.4. Constitutive models 51


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.4.3 Isotropic elasto-plastic material

The elastoplastic behaviour of material occurs when a structural element is subject to both elas-
tic and plastic deformation. The hypothesis of small strains and displacements is maintained
such that geometric nonlinear effects can be neglected and the focus is centred on the material
nonlinearity.

5.4.3.1 One dimensional elasto-plastic constitutive law

5.13: One-dimensional elasto-plasticity with strain-hardening - [Kim114]

In order to consider the elastoplastic behaviour of a given structure, strains are assumed com-
posed by two quantities:

𝜀 = 𝜀e + 𝜀p ⇒ d𝜀 = d𝜀e + d𝜀p (5.37)

with 𝜀e , the elastic deformation, and 𝜀p the plastic one.


It is important to underline that this equation holds only under the hypotesis of small strains,
which allows an additive composition of the strains. In order to guarantee an adequate level
of accuracy it is suggested to operate with infinitesimal increments, that allow to reach the
convergence condition faster.
The expression for the stresses is:

𝜎 = 𝐸𝜀e = 𝐸 (𝜀 − 𝜀p ) ⇒ d𝜎 = 𝐸(d𝜀 − d𝜀p ) (5.38)

These governing equations hold ∀𝑡, but in this contest the time is a pseudo-time, with often the
meaning of load multiplier. In fact, plasticity is a time independent phenomenon, the response
does not depend on the velocity with which we load the material.
Before proceeding with the discussion, it is important to define some quantities:
1. Plastic Multiplier, 𝜆(𝑡). It is a parameter which by definition can only grow and depends
on time. So its characteristics can be resumed as follow:

52 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures


∫︁ t

⎨𝜆(𝑡 = 0) = 0
𝜆= ˙
𝜆𝑑𝑡 ⇒ 𝜆(𝐸) = 0 (5.39)
0 ⎪

d𝜆 ≥ 0
2. Plastic Modulus, 𝐻 which is the slope of the strain-hardening portion of the stress–strain
curve after removal of elastic strain components.

∆𝜎 ⎨𝐻 > 0 Hardening

𝐻= → 𝐻 = 0 Perfect Plasticity (5.40)
∆𝜀p ⎪

𝐻 < 0 Softening
3. Linear Hardening, ℎ(𝜆):
ℎ(𝜆) = 𝐻𝜆 (5.41)
4. Yield Function, 𝜙 that is a function which describes the state of the structure at a given
time:
{︃
𝜙 < 0 material in elastic domain
𝜙 = |𝜎| − (𝜎0 + 𝐻𝜆) ≤ 0 ⇒ (5.42)
𝜙 = 0 material on the border
Thanks to this definitions it is possile to compute the yield stress:

𝜎yield = (𝜎0 + 𝐻𝜆) (5.43)

and the consistency condition, a useful relation to describe the loading/unloading paths:
{︃
𝜙≤0
⇒ 𝜙𝜆˙ = 0 ∀𝑡 (5.44)
˙𝜆 ≥ 0

The plastic strain increment in time can be expressed as:

𝜀˙p = sign(𝜎)𝜆˙ ⇒ 𝜆˙ = |𝜀˙p | (5.45)

We can finally now write the (𝜎 − 𝜀) relation in incremental form:

d𝜙 d|𝜎| d𝜎
=
𝜙˙ = − 𝐻 𝜆˙
d𝑡 d𝜎 d𝑡
= sign(𝜎) [𝐸 (𝜀˙ − 𝜀˙p )] − 𝐻 𝜆˙ (5.46)

= sign(𝜎)𝐸 𝜀˙ − sign(𝜎)𝐸 𝜀˙p − 𝐻 𝜆˙

The plastic strain rate (𝜀˙p ) can be different from zero only for 𝜙 = 0 and 𝜙˙ = 0, due to the
consistency condition (5.44)

𝜙˙ = 0 ⇒ sign(𝜎)𝐸 𝜀˙ − sign(𝜎)𝐸 𝜀˙p − 𝐻 𝜆˙ = 0


(5.47)
sign(𝜎)𝐸 𝜀˙ − 𝐸 𝜆˙ − 𝐻 𝜆˙ = 0

Therefore, it results:
(︂ )︂
𝐸
𝜆˙ = sign(𝜎)𝜀˙ (5.48)
𝐸+𝐻

5.4. Constitutive models 53


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

So, the plastic strains is:


(︂ )︂
𝐸
𝜀˙p = sign(𝜎)𝜆˙ = 𝜀˙ (5.49)
𝐸+𝐻
Finally, we can write:

𝜎˙ = 𝐸 𝜀˙e
= 𝐸 (𝜀˙ − 𝜀˙p )
(︂ )︂
𝐸
= 𝐸 𝜀˙ − 𝐸 𝜀˙
𝐸+𝐻
(︂ )︂
𝐸2 (5.50)
= 𝐸− 𝜀˙
𝐸+𝐻

𝐸𝐻
⇒ 𝐸T =
𝐸+𝐻
Starting from the differential equation (5.38), substituting the value of 𝐸T , eq. (5.50), we obtain
the elastoplastic constitutive law for one-dimensional systems:
(︂ )︂ (︂ )︂
𝐸𝐻 𝐸𝐻
d𝜎 = d𝜀 ⇒ 𝜎 = 𝜀 + const
𝐸+𝐻 𝐸+𝐻 (5.51)
⇒ 𝜎 = 𝐸T (𝜀 − 𝜀0 ) + 𝜎0

5.14: Plastic behaviour according to the value of 𝐸T - [Kim114]

As a final remark, the domain for 𝐸T can be computed via:




⎨𝐻 → −𝐸 ⇒ 𝐸T → −∞
𝐻 = 0 ⇒ 𝐸T = 0 ⇒ −∞ < 𝐸T ≤ 𝐸 (5.52)


𝐻 → +∞ ⇒ 𝐸T → 𝐸

5.4.3.2 Three dimensional elasto-plastic constitutive law

The basic concepts presented in the previous section for one-dimensional systems can be gen-
eralized for multidimensional systems. Obtaining the the required stress–strain relation for
one-dimensional system is relatively straightforward, in fact, experiments are most commonly

54 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

uniaxial. At the same time, one-dimensional strain-hardening models are also relatively easy to
develop because either the magnitude of yields stress increases (isotropic hardening) or main-
tains the same range between tension and compression (kinematic hardening). However, one-
dimensional elastoplasticity has a restricted range of practical applications, i.e. bars and trusses.
In the case of two or three dimensional structural systems, the elastoplastic theory is way more
complex to be implemented: the stress becomes a tensor with up to six components instead of
a scalar quantity. Therefore, to test the material with a procedure similar to the one used for the
previous case, different combinations of stress components must be applied. Of course, this is
is practically impossible because the possible combinations are almost infinite.
To better understand the difficulties at the base of this problem, let us consider biaxial loading
of a plane stress structure. The only nonzero stress components are 𝜎xx and 𝜎yy . A possible
procedure to set different stress combination is to fix 𝜎xx at 500 MPa (for example) and gradu-
ally increase 𝜎yy beyond the yielding limit of the material. At this point, the procedure must be
repeated fixing 𝜎xx at different values. To obtain the stress–strain relationship for biaxial load-
ings, it is necessary to test all these possible combinations. Therefore, it is barely impossible to
determine the constitutive law for multidimensional systems except for very limited cases.
To overcome the problem and define the multidimensional elastoplasticity stress-strain relation-
ship a physic-based model able to represents all possible cases is implemented. Furthermore, it
is assumed a scalar measure of stress and strain as representative of the multidimensional stress
status.
Given that the multidimensional model must be consistent also for the one-dimensional case,
the stress–strain relationship can be obtained from uniaxial tests. The main aspect is to properly
define the form of yield criterion with a hardening rule and the elastoplastic constitutive law
relating incremental stress to strain in the plastic region [Kim114].
In 3D, the elastoplastic model is based on:


⎪ 𝜀ij = 𝜀eij + 𝜀pij Elastic + Plastic II Order Symmetric Tensor


⎪ e
Constitutive Law(𝜈, 𝐸)
⎨𝜎ij = 𝑑ijhk 𝜀hk

𝜙(𝜎ij , 𝜆) = ‖𝜎ij ‖ − (𝜎0 + ℎ(𝜆)) Scalar Yield Function (5.53)



⎪ 𝜙 ≤ 0; d𝜆 ≥ 0; 𝜙 d𝜆 = 0 Complementary Equations


⎩d𝜀p = 𝑛 d𝜆 = ∂ϕ d𝜆 Assumed Associated Flow Rule
ij ij ∂σ𝑖𝑗

Since it is possible to choose different shapes for 𝜙, we assume the Von Mises cylinder, which
is a proper choice for isotropic materials, since the invariant stresses are used fo the domain:
√︂
3 (5.54)
𝜙(𝜎ij , 𝜆) = 𝑆ij 𝑆ij − (𝜎0 + ℎ(𝜆))
2
√︁
where 32 𝑆ij 𝑆ij is the Von Mises equivalent stress (or norm), and 𝑆ij is the deviatoric tensor:
⎧ (︀ )︀

⎪ 𝑆11 = 32 𝜎11 − 31 𝜎22 − 31 𝜎33

⎪ (︀ 1 )︀

⎪ 𝑆 22 = − 𝜎 11 + 2
𝜎 22 − 1
𝜎 33

⎪ (︀ 3 3 3 )︀
1 ⎨ 𝑆33 = − 13 𝜎11 − 31 𝜎22 + 23 𝜎33
𝑆ij = 𝜎ij − 𝜎kk 𝛿ij ⇒ (5.55)
3 ⎪
⎪ 𝑆 12 = 𝜎12



⎪ 𝑆13 = 𝜎13



𝑆23 = 𝜎23

5.4. Constitutive models 55


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Having fixed ℎ(𝜆) = 𝐻 𝜆, our model represents linear isotropic hardening, with the Von Mises
yield criterion orientation and with an associated flow rule.
Since the flow rule depends on the choice of 𝜙, we need to show the consequence of this chioce.
We underline the diagonal and extradiagonal term:
⎛ ⎞
𝜕𝜙 3 𝑆12 ⎠
d𝜀p12 = d𝜆 = ⎝ √︁ d𝜆
𝜕𝜎12 2 3
𝑆 𝑆
2 ij ij
⎛ ⎞ (5.56)
𝜕𝜙 3 𝑆11 ⎠
d𝜀p11 = d𝜆 = ⎝ √︁ d𝜆
𝜕𝜎11 2 3
𝑆 𝑆 2 ij ij

Thus:
⎛ ⎞ √︂
3 𝑆ij 2 p p
d𝜀pij = ⎝ √︁ ⎠ d𝜆 = d𝜀ij d𝜀ij = d𝜀pequiv (5.57)
2 3
𝑆 𝑆 3
2 ij ij

given that d𝜀p11 + d𝜀p22 + d𝜀p33 = 0, because of the cylinder is isotropic and plasticity can
not provoke any volume variation. As a consequence, it is possible to define the Von Mises
plasticity 3D model, by means of the following quantities:
• Stress and deviatoric stress tensor;
• Strain and deviatoric strain tensor;
• Elastic strain energy density (the material is considered isotropic linear elastic)
• Principal stress space.
First of all, we can determine:
• Hydrostatic Stress (mean stress):
𝜎11 + 𝜎22 + 𝜎33 𝜎kk
𝜎m = = (5.58)
3 3
• Hydrostatic Stress Tensor:
𝜎kk
𝑝ij = 𝛿ij (5.59)
3
• Deviatoric Stress Tensor:
𝜎kk
𝑆ij = 𝜎ij − 𝛿ij (5.60)
3
So, the stress tensor can be written as:
𝜎kk
𝜎ij = 𝑆ij + 𝛿ij (5.61)
3
The same decomposition can be applied to the strain tensor obtaining:
𝜀kk
𝜀ij = 𝑒ij + 𝛿ij (5.62)
3

56 Chapter 5. Finite element analysis


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

This result is the sum of the deviatoric strain tensor and the volumetric/spherica/mean strain
tensor. So, the dilatation is:
∆𝑉
𝜀kk = (5.63)
𝑉0
Due to the previous definitions, under the hypothesis of small strains and displacements and
isotropic linear elastic material, the elastic strain energy density (strain energy per unit of vol-
ume) results:
1 1 (︁ 𝜎kk )︁ (︁ 𝜀kk )︁
Ω = 𝜎ij 𝜀ij = 𝑆ij + 𝛿ij 𝑒ij + 𝛿ij
2 2 3 (︂ 3 )︂
1 1
= 𝑆ij 𝑒ij + 𝜎kk 𝜀kk
2 3
[︂ (︂ )︂ ]︂ (5.64)
1 𝑆ij 1 1 (︁ 𝜎kk )︁
= 𝑆ij + 𝜎kk
2 2𝐺 3 𝐾 3
1 11 1
= 𝑆ij 𝑆ij + 𝜎hh 𝜎kk
4𝐺 29𝐾
where 𝐾 is the Bulk Modulus, defined ad : 𝐾 = 𝐸/3(1 − 2𝜈)
The distortion energy theory is also called the Von Mises Yield Criterion, which states that
yielding occurs when the equivalent stress reaches the yield stress of the material in uniaxial
tension [Kim114].
Before proceeding with the discussion the invariants of the tensors must be defined:


⎨𝐼1 = 𝜎kk
𝐼2 = 21 𝜎ij 𝜎ji (5.65)


𝐼3 = 13 𝜎ij 𝜎jh 𝜎ki


⎨𝐽1 = 𝑆11 + 𝑆22 + 𝑆33
𝐽2 = 12 𝑆ij 𝑆ji (5.66)


𝐽3 = 13 𝑆ij 𝑆jh 𝑆ki
It is possible to write the Von Mises equivalent stress, the norm shown in equation (5.54), and
the definitions provided in (5.66), as:
√︀
‖𝜎‖ = 3𝐽2 (5.67)

Using the equivalent stress, the yield function and the corresponding yield criterion can be
defined as:

3𝐽2 − 𝜎Y2 ield = 0 (5.68)

Since any isotropic scalar function of a symmetric tensor can be described as a function of the
principal values of its argument, it follows that any iso-surface (i.e. any subset of the function
domain with fixed function value) of such functions can be graphically represented as a surface
in the space of principal values of the argument. This allows, in particular, the yield surface of
any isotropic yield criterion to be represented in a particularly simple and useful format as a
three-dimensional surface in the space of principal stresses [DePeOw106].

5.4. Constitutive models 57


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

5.15: The Tresca and Von Mises yield surfaces in principal stress space - [DePeOw106]

5.16: The 𝜋-plane in principal stress space (a), and, the 𝜋-plane representation of the Tresca
and von Mises yield surfaces (b) - [DePeOw106]

58 Chapter 5. Finite element analysis


CHAPTER 6

Cutting pattern

6.1: Cutting Pattern - Edited from [GaLe206]

As described in chapter 1.3, the last step before the static analysis is the patterning of the mem-
brane resulting from the form finding. Structural fabrics are manufactured as flat panels with a
typical width of 2–3 m, and a maximum width of 5 m. Tensile structure made of membranes
are generally implemented in buildings characterized by larger dimension. In order to fulfill
the production requirements it is necessary to “split” the membrane in patterns and these can-
not be flattened in a plane without some distortion being in general the surface undevelopable
(Gaussian curvature not null). The extracted pieces from the cutting pattern procedure will be
sewed together and consequently tensile fabric structures cannot be produced without inducing
stresses in the surface which appear even before the application of the live loads. If poorly
designed, the final shape of the panels may affect the final form and stress distribution of the
whole structure.
In terms of structural properties, the most efficient shape for the membrane is a combination
of double curvature. This form allows to reduce the displacements due to the vertical loads but
requires a special design procedure. Patterning seeks to determine the arrangement of the planar

59
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

fabric panels such that, when the panels are assembled, the desired 3D shape is achieved, and
the stress distribution is as close as possible to the one imposed during form finding [GaLe206].
Historically patterning was conducted using physical models. S. Gale and W.J. Lewis in 2015
describe how computational methods of patterning could be implemented for this aim. They
underlined five steps in which the general process of patterning could be divided:
1. Seam definition, concerns the division of the form-found membrane surface into panels.
The divisions are defined by seams which generally take the form of sewn and/or welded
overlapping panels of fabric. It is considered good practice to establish seam lines along
geodesics. Geodesics are lines of minimum distance over a surface, and are the path
adopted by a constant stress cable stretched over the surface. Consequently, geodesic
seams do not introduce undesirable stresses into the membrane. Seams physically dictate
the panel size, and affect the subsequent flattening, stress reduction and compensation of
the individual panels. For practical reasons, seams should run through the regions of low
curvature to avoid possible wrinkling during sewing and welding. At the same time, they
should be spaced reasonably, to ensure the curvatures across the panels remain low.
2. Flattening concerns the development of a portion of the 3D form-found membrane sur-
face into the 2D plane.
3. Stress reduction concerns the application of iterative methods to the flattened panel
geometry to reduce stresses.
4. Compensation concerns the shrinking of the pattern to account for tensioning of the
membrane during construction.
5. Pattern assembly can be included in patterning schemes to calculate the final geometry
and stresses in the constructed membrane. The cutting pattern is assembled according to
the physical boundary conditions, and relaxed into its equilibrium shape, giving the final
geometry and stresses.

6.1 Examples

Dlubal RFEM5 provides the user with a module that performs the cutting pattern, where the
flattening process is performed according to the minimum energy theory.
The main advantage of Dlubal RFEM5 is that, for each pattern, the compensation can be ap-
plied in both the warp and weft direction, giving the user also the possibility to set a special
compensation value for each boundary line as well as overlaps for manufacturing processes.

60 Chapter 6. Cutting pattern


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

6.1.1 Hypar membrane

6.1. Examples 61
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

62 Chapter 6. Cutting pattern


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

6.1.2 Hexagonal membrane

6.1. Examples 63
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

64 Chapter 6. Cutting pattern


CHAPTER 7

Analytical form-finding for cable structures

Before diving into the numerical formulation of the form-finding procedure of mixed cable and
membrane structures, the natural behaviour of cables subjected to own-weight and distributed
load are inspected analytically.

7.1 Form finding for the catenary cable

An analytical approach based on the solution of ordinary differential equations in closed form
is presented to determine the shape developed by a cable hinged at its edges and subjected to its
own weight. On the one hand, the method is limited to very simple cases where both the bound-
ary conditions and the statical loads allow to find a closed form solution of the general integral
of the ODE, but on the other hand the analytical formulation allows to capture straightforwardly
the interaction between the various geometric and static parameters of the problem.
This approach could also be extended to cases for which an analytical solution is generally not
trivial, but the effort for the identification of the internal boundary conditions in the presence
of heterogeneity or discontinuities is not justified in comparison to the numerical approach of
the force density method which results in a much easier development of the solving algorithm.

7.1.1 Introduction

Let us imagine a taut cable with an assigned horizontal reaction 𝐻 due to the pretensioning
of the cable itself. Our objective is the identification of the displaced shape of the cable when
subject to its own weight and the pretensioning. In order to investigate the relationship between
the pretensioning 𝐻 and the dead load 𝑔, which is related to both the mechanical (density 𝜌)
and geometric (the area 𝐴) properties of the cable, the solution of the equation of the catenary
cable is repeated multiple times varying first the applied prestress having fixed the external
load, and subsequently viceversa.

65
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.1.2 Analytical formulation

Being the general integral of the equation of the catenary:


𝐻 (︁ 𝑔 · 𝑥 )︁
𝑦(𝑥) = − · cosh − −𝐶 +𝐷 (7.1)
𝑔 𝐻
gl
we let 𝛼 = Hg be the parameter of the catenary and 𝛽 = 2H = l

which in turn lets us write
the catenary equation in the new form:
(︁ 𝑥 )︁
𝑦(𝑥) = −𝛼 cosh +𝐶 +𝐷 (7.2)
𝑎
The boundary conditions for the two pins are respectively:
(︂ )︂
𝑙
𝑦(0) = −𝛼 cosh (𝐶) + 𝐷 = 0 𝑦(𝑙) = 𝛼 cosh + 𝐶 + 𝛼 cosh (𝐶) = ℎ (7.3)
𝛼
From the first equation we immediately obtain:

𝐷 = 𝛼 cosh (𝐶) (7.4)

Thanks to Werner’s trigonometric formulas we may also retrieve the parameter:


(︂ )︂
𝛽ℎ 1
𝐶 = sinh −1
− · −𝛽 (7.5)
𝑙 sinh 𝛽
Considering the equation of the catenary we also immediately obtain the tension:
√︃ (︂ )︂2
𝑑𝑠 𝑑𝑦 (︁ 𝑥 )︁ (︁ 𝑥 )︁
𝑇 (𝑥) = 𝐻 =𝐻 1+ = 𝐻 cosh + 𝐶 = 𝑔𝛼 cosh +𝐶 (7.6)
𝑑𝑥 𝑑𝑥 𝛼 𝛼

where in particular at the ends we retrieve:


(︁ 𝑥 )︁ √︁ √︁
B
𝑇A = 𝐻 · cosh 𝐶 𝑇B = 𝐻 · cosh +𝑐 𝑉A = 𝑇A2 − 𝐻 2 𝑉B = 𝑇B2 − 𝐻 2
𝛼
(7.7)

7.1.3 Solution

The solution of the equation of the catenary is performed multiple times to generate the plots
shown after the discussion of the alogorithms. Every solution is delegated to the following
function which automatically performs the spatial discretization of the cable and then employs
the analytical formulas to retrieve the axial force and the horizontal and vertical support reac-
tions to be passed to the main function for the plotting.
solve_catenary.solve_catenary(ax, ay, bx, by, g, tension, space=1000)
Solves the form finding for the catenary equation based on the given applied horizontal
force.
The tension is represented by the horizontal force applied to both ends of the taut cable;
if no additional horizontal loads are present in the form-finding process, the latter is kept
constant.

66 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Parameters
• ax (float) – x-coordinate of the left pin of the cable.
• ay (float) – y-coordinate of the left pin of the cable.
• bx (float) – x-coordinate of the right pin of the cable.
• by (float) – y-coordinate of the right pin of the cable.
• g (float) – distributed load equivalent to the specific weight per
unit length of the cable.
• tension (float) – horizontal force to be prescribed in the form-
finding process.
• space (float) – discretization of the cable to compute the dis-
placements and internal actions.
Returns dictionary grouping the retvals of the problem.
Return type
dictionary containing the return values with the following standard and
convention:
• x (ndarray) - numpy array containing the location of the nodes span-
ning along the length of the cable representing the numerical dis-
cretization of the geometrical entity.
• y (ndarray) - numpy array containing the displacements of the nodes
under the applied gravitational load.
• t (ndarray) - numpy array containing the tension of the cable func-
tion of the x-coordinate spanning along the length of the cable.
respected.
• ta (ndarray) - tension of the cable at the left pin.
• tb (ndarray) - tension of the cable at the right pin.
• va (ndarray) - vertical reaction of the support at the left pin.
• vb (ndarray) - vertical reaction of the support at the right pin.
• g (ndarray) - load for which the problem has been solved with the
current run.
• tension (ndarray) - horizontal external force for which the form-
finding has been performed.

Code block 7.1: Algorithm for the solution of the form-


finding for a catenary cable.
1 import numpy as np
2
3
4 def solve_catenary(ax, ay, bx, by, g, tension, space=1000):
(continues on next page)

7.1. Form finding for the catenary cable 67


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


5 # Compute the projected length of the cable.
6 length = bx - ax
7 # Compute the difference in height between the supports.
8 h = by - ay
9 # Compute the parameters of the catenary equation.
10 alpha = tension / g
11 beta = length / (2.0 * alpha)
12
13 # Apply the inverse hyperbolic trigonometric functions to find the
14 # constants of integration.
15 c = np.arcsinh(-(beta * h / length) / np.sinh(beta)) - beta
16 d = alpha * np.cosh(c)
17
18 # Pre-allocate the discretization of the cable.
19 x = np.linspace(0.0, length, space)
20 # Compute the deformed shape under the gravitational load.
21 y = -alpha * np.cosh(x / alpha + c) + d
22 # Compute the tension along the cable due to the gravitational load.
23 t = g * alpha * np.cosh(x / alpha + c)
24
25 # Compute the tension in the cable at the supports.
26 ta = tension * np.cosh(c)
27 tb = tension * np.cosh(bx / alpha + c)
28 # Compute the vertical reaction of the supports at the right and
29 # left pin.
30 va = np.sqrt(ta ** 2.0 - tension ** 2.0)
31 vb = np.sqrt(tb ** 2.0 - tension ** 2.0)
32
33 # Pack the return values in a dictionary for further processing.
34 retvals = {
35 "x": x,
36 "y": y,
37 "t": t,
38 "ta": ta,
39 "tb": tb,
40 "va": va,
41 "vb": vb,
42 "g": g,
43 "tension": tension
44 }
45 return retvals

The script is invoked with the main function, which is responsible for the the generation of the
plots for the comparison between two significant static conditions:
1. A prescribed horizontal force is assigned and the dead load insiting on the cable, stem-
ming from the section of the considered element, is varied.
2. Keeping the external load constant, the horizontal component of the pretension is varied
incrementally.
catenary.main()
Main entry point for the form-finding of the catenary cable. No special interface is pro-
vided due to simplicity of the study; the user must supply the values directly in the
command file.

68 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The target of the form-finding procedure is the horizontal force in the cable. The script
investigates the problem in two different situations:
1. The horizontal force is kept constant and the gravitational load is varied.
2. The gravitational load is kept constant and a different horizontal force for the
form-finding is prescribed.
The exhibited behaviour is highly nonlinear as pointed out by the figures produced by
matplotlib.
Returns None
Return type None

Code block 7.2: Main entry for the program solving the
form-finding for a catenary cable.
1 from solve_catenary import solve_catenary
2
3 import matplotlib.pyplot as plt
4
5

6 def main():
7 # Coordinates of the left support.
8 ax = 0.0
9 ay = 0.0
10 # Coordinates of the right support
11 bx = 100.0
12 by = 2.0
13 # List containing the applied gravitational loads.
14 g = [20.0, 25.0, 30.0, 35.0, 40.0]
15 # Vector containing the horizontal forces to be applied
16 # symmetrically at the supports.
17 tension = [25.0e3, 30.0e3, 35.0e3, 40.0e3, 45.0e3]
18 # Discretization of the cable.
19 spacing = 10000
20
21 plt.figure(
22 num="Displacements depending on the applied load for a catenary")
23 for grav in g:
24 retvals = solve_catenary(ax, ay, bx, by, grav, tension[-1],
25 spacing)
26 plt.plot(retvals["x"], -retvals["y"],
27 label="g = %.0f N/m" % retvals["g"])
28 plt.title("Deformed shape for a catenary")
29 plt.xlabel("Abscissa [m]")
30 plt.ylabel("Displacement [m] for H = %.0f N" % tension[-1])
31 plt.legend()
32 plt.grid()
33

34 plt.figure(
35 num="Displacements depending on the horizontal applied force for "
36 "a catenary")
37 for load in tension:
38 retvals = solve_catenary(ax, ay, bx, by, g[0], load, spacing)
39 plt.plot(retvals["x"], -retvals["y"],
(continues on next page)

7.1. Form finding for the catenary cable 69


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


40 label="H = %.0f N" % retvals["tension"])
41 plt.title("Deformed shape for a catenary")
42 plt.xlabel("Abscissa [m]")
43 plt.ylabel("Displacement [m] for g = %.0f N/m" % g[0])
44 plt.legend()
45 plt.grid()
46 plt.show()

7.1.4 Post-processing

The post-processing of the results is delegated to the python package matplotlib, which provides
the user with not only a programmimg interface similar to Matlab, but also a more refined
interaction based on object classes.

7.1: Displacement shape obtained varying the external load for a catenary cable.

7.1.5 Tests

The program is tested with pytest, a python module which allows to write better programs by
systematically testing the code against significant situations to avoid, in particular for numerical
algorithms, annoying regressions.
test_catenary.test_catenary()
Tests the form-finding algorithm for the catenary cable in the case of a taut cable, whose
supports are located at (0,0)m and (100, 2)m. The cable is subjected to a gravitational
load of 40 N/m computed as:

𝑔 = 𝐴 · 𝛾 = 𝐴 · 𝑑𝑔 (7.8)

70 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.2: Displacement shape obtained varying the pretension for a catenary cable.

The tensions applied to the cable is 𝐻 = 17157.2875𝑁 .


The tests are validated against a case found in the literature by Prof. Malerba from
Politecnico di Milano.
Returns asserts the positiveness of the test.
Return type None

Code block 7.3: Test case for the program solving the form-
finding for a catenary cable.
1 from solve_catenary import solve_catenary
2 import pytest
3
4
5 def test_catenary():
6 # Coordinates of the left pin support.
7 ax = 0.0
8 ay = 0.0
9 # Coordinates of the right pin support.
10 bx = 100.0
11 by = -2.0
12 # Applied gravitational load.
13 g = 40.0
14 # Horizontal applied force.
15 tension = 17157.2875
16
17 # Solve the form-finding problem.
18 retvals = solve_catenary(ax, ay, bx, by, g, tension)
19 # Extract the tensions and vertical reactions at the ends for the
20 # comparison in the test.
21 tensions_test = {k: retvals[k] for k in ('ta', 'tb', 'va', 'vb')}
(continues on next page)

7.1. Form finding for the catenary cable 71


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


22
23 # Assert the positiveness of the test.
24 assert tensions_test == pytest.approx({
25 "tb": 17317.427,
26 "ta": 17237.427,
27 "vb": 2349.630,
28 "va": 1660.233
29 }, 1e-2)

7.1.6 Conclusions

The first conclusion that can be drawn from the previous examples is that the cable does not
have a configuration of its own, since, without pretensioning, the theoretical displacement at-
tained by the element is unlimited:
𝐻 (︁ 𝑔 · 𝑥 )︁
lim 𝑦(𝑥) = lim − · cosh − − 𝐶 + 𝐷 −→ ∞ (7.9)
H→0 H→0 𝑔 𝐻
Even if with the case of a distributed load, one can understand that the cables assumes the
shape of the funicular curve of the insisting forces; when the pretension 𝐻 increases, the rays
of the polygon flatten, causing the increase of the axial action in the cable. On the other hand,
the cables becomes extremely slack for low values of pretensioning. As discussed later in the
thesis, this behaviour is endowed with serious drawbacks from a numerical point of view, since
the extremely large rotations of a slack cable may lead to the divergence of the nonlinear solver
if the latter is employed with the average parameters for the number of iterations and maximum
number of line searches.
Finally, we can observe that the behaviour of the cable is linear for small loads or high values
of the pretensioning, whereas the load-displacement relationship becomes severly nonlinear
for large loads or especially for moderate values of the pretensioning that lead to the aforemen-
tioned slack deformation of the element.

72 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.2 Inverse form-finding for a cable under a distributed


load

7.2.1 Introduction

The example of the parabola cable under a distributed load illustrates the concept of “inverse
form-finding”: having assigned a certain shape to the cable, we shall find the actions that
need to be introduced in the system in order to guarantee the static equilibrium, being the
kinematic compatibility already assured since it has been imposed as the starting hyphotesis of
the problem.
The final shape of the cable is assigned by means of the three quantities 𝑓a , 𝑓b and ℎ with the
meaning as reported in 7.3.

7.3: Geometric quantities for the parabola cable - [Mal117]

7.2. Inverse form-finding for a cable under a distributed load 73


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.2.2 Analytical formulation

The rotational equilibria with respect to the left and right pins are:

𝑝𝑎2 𝑝𝑏2
𝐻𝑓a − =0 𝐻𝑓b − =0 (7.10)
2 2
Subtracting the first equation from the second one:

𝑝 (𝑏2 − 𝑎2 )
𝐻 (𝑓b − 𝑓a ) − =0 (7.11)
2
and considering that 𝑎 + 𝑏 = 𝑙, then:
𝑙 𝐻ℎ 𝑙 𝐻ℎ
𝑎= − 𝑏= + (7.12)
2 𝑝𝑙 2 𝑝𝑙
Putting the new definition of 𝑎 in the previous equation and solving the second degree equation
we obtain:
(︂ )︂
𝑝𝑙2 𝑓a + 𝑓b √︀
𝐻= 2 ± 𝑓a 𝑓b (7.13)
ℎ 2

The solution depends on the value of 𝐻; if:


(︂ )︂
𝑝𝑙2 𝑓a + 𝑓b √︀
𝐻= 2 − 𝑓a 𝑓b > 0 (7.14)
ℎ 2

then the vertex is comprised between A and B; otherwise, the solution is found with the plus
and being the cable very taut, the vertex is outside the segment AB:
(︂ )︂
𝑝𝑙2 𝑓a + 𝑓b √︀
𝐻= 2 + 𝑓a 𝑓b (7.15)
ℎ 2

Knowing the value of 𝐻, we can develop the equation of the parabola:

𝑝𝑙2 (︀ )︀
𝑦(𝑥) = · 𝜉 − 𝜉 2 + ℎ𝜉 (7.16)
2𝐻
where 𝜉 = xl .
The derivative of the displacement function can be computed as:
(︂ )︂
𝑝𝑙2 1 1 ℎ

𝑦 (𝑥) = · − 𝜉 + (7.17)
2𝐻 𝑙 𝑙 𝑙

which allows us to extract:


⃒ ⃒
𝑑𝑦 ⃒⃒ 𝑑𝑦 ⃒⃒
tan 𝜃A = tan 𝜃B = (7.18)
𝑑𝑥 ⃒A 𝑑𝑥 ⃒B

to finally get:
𝐻 𝐻
𝑇A = 𝑇b = 𝑉A = 𝐻 tan 𝜃A 𝑉B = 𝐻 tan 𝜃B (7.19)
cos 𝜃A cos 𝜃B

74 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.2.3 Solution

The solution of the parabola cable under a distributed load is conducted following the analytical
formulation explained in the previous paragraph by operating a discretization of the cable to
map the displacement continuosly.
solve_parabola.solve_parabola(l, fa, fb, h, p, spacing=1000)
Solve the inverse form-finding problem for the taut cable under a distributed load, whose
supports are located at different levels and the vertex is at fixed level defined by the
quantities 𝑓a , 𝑓b and ℎ.
Parameters
• l (float) – length of the projection of the cable.
• fa (float) – distance of the vertex from the left support in the y-
direction.
• fb (float) – distance of the vertex from the right support in the
y-direction.
• h (float) – difference in height between the supports.
• p (float) – distributed load acting on the taut cable.
• spacing (int) – discretization of the cable.
Returns dictionary grouping the retvals of the problem.
Return type
dictionary containing the return values with the following standard and
convention:
• x (ndarray) - numpy array containing the location of the nodes span-
ning along the length of the cable representing the numerical dis-
cretization of the geometrical entity.
• y (ndarray) - numpy array containing the displacements of the nodes
under the applied distributed load.
• H (float) - horizontal force at the supports of the cable.
• ta (ndarray) - tension of the cable at the left pin.
• tb (ndarray) - tension of the cable at the right pin.
• va (ndarray) - vertical reaction of the support at the left pin.
• vb (ndarray) - vertical reaction of the support at the right pin.
• p (ndarray) - load for which the problem has been solved with the
current run.
• t (ndarray) - numpy array containing the tension of the cable func-
tion of the x-coordinate spanning along the length of the cable.

7.2. Inverse form-finding for a cable under a distributed load 75


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 7.4: Algorithm for the solution of the inverse


form-finding for a cable under a distributed load.
1 import numpy as np
2
3
4 def solve_parabola(l, fa, fb, h, p, spacing=1000):
5 # Horizontal force computed by means of equilibrium.
6 tension = p * l ** 2.0 / h ** 2.0 * (
7 (fa + fb) / 2.0 + np.sqrt(fa * fb))
8 # Check if the cable is so taut that the vertex is outside the
9 # segment AB.
10 if tension > p * l ** 2.0 / (2.0 * h):
11 tension = p * l ** 2.0 / h ** 2.0 * (
12 (fa + fb) / 2.0 - np.sqrt(fa * fb))
13
14 # Discretization of the cable.
15 x = np.linspace(0.0, l, spacing)
16 # Displacement function for the cable.
17 y = p * l ** 2.0 / (2.0 * tension) * (
18 x / l - (x / l) ** 2.0) + h / l * x
19 # Function expressing the rotation of the cable.
20 y1 = p * l ** 2.0 / (2.0 * tension) * (
21 1.0 / l - 2.0 * x / l ** 2.0) + h / l
22

23 # Rotation of the cable at the supports.


24 theta_a = np.arctan(y1[0])
25 theta_b = np.arctan(y1[-1])
26
27 # Tension of the cable at the pins.
28 ta = tension / np.cos(theta_a)
29 tb = tension / np.cos(theta_b)
30 # Vertical reaction of the cable at the supports.
31 va = tension * np.tan(theta_a)
32 vb = - tension * np.tan(theta_b)
33

34 # Function expressing the tension of the cable along the span.


35 t = tension / np.cos(np.arctan(y1))
36
37 # Pack the return values in a dictionary for convenience.
38 retvals = {
39 "x": x,
40 "y": y,
41 "H": tension,
42 "p": p,
43 "ta": ta,
44 "tb": tb,
45 "va": va,
46 "vb": vb,
47 "t": t
48 }
49 return retvals

The script is invoked with:


parabola.main()

76 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Main entry point for the inverse form-finding of the cable under distributed load. No
special interface is provided due to simplicity of the study; the user must supply the
values directly in the command file.
The target of the form-finding procedure is the final configuration of the cable. The script
investigates the problem for different levels of the load, showing that the deformed shape
is kept constants, whereas the tension varies to equilibrate the applied external load.
Returns None
Return type None

Code block 7.5: Main entry for the program solving the ca-
ble under a distributed load.
1 import matplotlib.pyplot as plt
2 from solve_parabola import solve_parabola
3

4
5 def main():
6 # Projected length of the cable.
7 length = 100.0
8 # Difference in height between the two supports.
9 h = 2.0
10 # Vertical distance between the left pin and the vertex of the
11 # parabola.
12 fa = 0.35
13 # Vertical distance between the right pin and the vertex of the
14 # parabola.
15 fb = fa + h
16 # Vector containing the loads to be tested.
17 p = [20.0, 25.0, 30.0, 35.0, 40.0]
18 # Discretazione of the cable.
19 spacing = 10000
20

21 plt.figure(
22 num="Fixed displacement for a cable under distributed load for "
23 "the inverse form-finding problem")
24 for grav in p:
25 retvals = solve_parabola(length, fa, fb, h, grav, spacing)
26 plt.plot(retvals["x"], -retvals["y"],
27 label="p = %.0f N/m - H = %.0f N/m" % (
28 retvals["p"], retvals["H"]))
29
30 plt.title("Deformed shape for a cable under distributed load")
31 plt.xlabel("Abscissa [m]")
32 plt.ylabel("Displacement [m]")
33 plt.legend()
34 plt.grid()
35
36 plt.figure(
37 num="Tension in a cable under distributed load for the inverse "
38 "form-finding problem")
39 for grav in p:
40 retvals = solve_parabola(length, fa, fb, h, grav, spacing)
41 plt.plot(retvals["x"], retvals["t"],
(continues on next page)

7.2. Inverse form-finding for a cable under a distributed load 77


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


42 label="p = %.0f N/m - H = %.0f N/m" % (
43 retvals["p"], retvals["H"]))
44 plt.title("Tension for a cable under distributed load")
45 plt.xlabel("Abscissa [m]")
46 plt.ylabel("Tension [N]")
47 plt.legend()
48 plt.grid()
49
50 plt.show()

7.2.4 Post-processing

The program produces two graphical outputs by using the simple interface provided by mat-
plotlib:
1. Displacement shape of the cable, to show the fact that during the inverse form-finding
process the deformed shape of the cable is actually kept constant.
2. Tension in the cable along the whole span: the tension varies according to the imposed
external distributed load but is rather constant along the span being the vertical offset
between the supports is very limited.

7.4: Reaction forces for the cable a under a distributed load.

7.2.5 Tests

The tests are invoked using python -m pytest and are executed against the example reported in
the literature in [Mal117].

78 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

7.5: Tension in the cable under a distributed load.

test_parabola.test_parabola()
Tests the inverse form-finding algorithm for a taut cable under distributed load, whose
supports are located at (0,0)m and (100, 2)m. The cable is subjected to a distributed load
of 40 N/m and its vertex is at fixed level defined by the quantities 𝑓a = 2𝑚 and 𝑓b = 4𝑚.
The supports are distanced 2m in height.
The tests are validated against a case found in the literature by Prof. Malerba from
Politecnico di Milano.
Returns asserts the positiveness of the test.
Return type None

Code block 7.6: Test case for the program solving the cable
under a distributed load.
1 import pytest
2 from solve_parabola import solve_parabola
3
4
5 def test_parabola():
6 p = 40.0
7
8 # Solve the inverse form-finding problem.
9 tensions = solve_parabola(length, fa, fb, h, p)
10
11 # Extract the tensions and vertical reactions at the ends for the
12 # comparison in the test.
13 tensions_test = {k: tensions[k] for k in ('ta', 'tb', 'va', 'vb')}
14 # Asserts the positiveness of the test.
15 assert tensions_test == pytest.approx(
16 {"tb": 17316.548,
17 "ta": 17237.102,
(continues on next page)

7.2. Inverse form-finding for a cable under a distributed load 79


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 "vb": 2343.146,
19 "va": 1656.854}, 1e-3)

7.2.6 Conclusions

7.6: Similarities between the parabola and catenary cables.

The data used for the example of the cable under a distributed load is studied to produce the
same results, in terms of tension, as for the catenary cable. At the same time, the pretension as-
signed to the catenary cable produces a displacement which is almost equal to the one imposed
for the parabola cable.

80 Chapter 7. Analytical form-finding for cable structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Therefore, the deformed shape and the statical reactions for the case of the catenary or parabola
cable are very similar, being however the procedure to retrieve the results slightly different:
the catenary cable expects the solution of an ordinary differential equation with hyperbolic
functions, whereas for the parabola cable we can proceed by pure equilibrium.

7.2. Inverse form-finding for a cable under a distributed load 81


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

82 Chapter 7. Analytical form-finding for cable structures


CHAPTER 8

Cables and membranes analysed with FEM

As logical subsequent step, the non-linear behaviour of cable and membrane structures are
individually analysed with the package CalculiX. Firstly, the same examples analytically de-
veloped in the previous chapter has been performed and checked, later some different load cases
and configurations have been inspected. With the aim to completely understand the possible
non-linear behaviour of taut elements, elasto-plastic constitutive law has been assigned to the
structural elements, therefore the analysis performed presented both material and geometrical
non-linearity. Finally, has been produced an example of a plane membrane bounded with a
collaborating cable which provides the pre-stress.

8.1 Catenary cable under its own weight

8.1.1 Introduction

This example has been performed to show the natural behaviour developed by a taut cable
hinged at its ends under its own weight. This effect is more evident when the cable covers
long span; in fact, in order to avoid the sag effect for this particular situation, a high level of
pre-stress should be imposed.
The cable analysed presents a Young modulus equal to 160 · 103 𝑀 𝑃 𝑎 and weight density of
78.5𝑘𝑔/𝑚3 , with a sectional area of 519𝑚𝑚2 and it is pre-stressed with an equivalent thermal
load of 17.14𝑘𝑁 .

8.1.2 Pre-processing

The generation of the mesh is delegated to cgx due to the simplicity of the topology. Also the
solution and post-processing phase are automated directly in Calculix.

83
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.1: Calculix pre-processing file for the catenary


cable.
1 # characteristic mesh subdivision.
2 valu ds 50
3
4 # point geometry to define the two pins for the cable and also
5 # a node in the middle to test for maximum displacement.
6 pnt p1 0.0 0.0 0.0
7 pnt p2 100e3 -2000.0 0.0
8 pnt p3 50e3 -1000.0 0.0
9
10 # point sets to be included in the analysis with ccx.
11 seta psx p p1
12 seta pdx p p2
13 seta load p p3
14
15 # line geometry defining the two pieces of the cable; the cable is
16 # really just one, but we need to test for the max displacement.
17 line l1 p1 p3 ds
18 line l2 p3 p2 ds
19
20 # line sets to be included in the analysis with ccx.
21 seta cable l l1 l2
22

23 # element assignments for the following mesh command.


24 elty cable be2
25
26 # mesh the model and plot a wireframe of the mesh.
27 mesh all
28 plot m all
29 view line
30
31 # saving the mesh and groups to file to be retrieved by ccx.
32 send all abq
33 send cable abq names
34 send psx abq names
35 send pdx abq names
36 send load abq names
37
38 # change element type from beam to truss element.
39 sys sed -i "s/B31/T3D2/g" all.msh
40
41 # solve the problem with FEM
42 sys ccx_2.14 cable_catenary
43 view line
44
45 # read the solution file and load it in the graphic window.
46 read cable_catenary.frd
47
48 # orient the countour plots, iterate and print the images.
49 rot -z
50 view disp
51 scal d 20
52 ds -4 e 4
53 plot fv all
(continues on next page)

84 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


54 sys sleep 1
55 hcpy png
56 sys mv hcpy_1.png cable_catenary_displacement_magnitude_3d.png
57
58 view disp off
59 ds -4 e 1
60 plot fv all
61 sys sleep 1
62 hcpy png
63 sys mv hcpy_2.png cable_catenary_displacement_x.png
64
65 ds -4 e 2
66 plot fv all
67 sys sleep 1
68 hcpy png
69 sys mv hcpy_3.png cable_catenary_displacement_y.png
70
71 sys montage cable_catenary_displacement_x.png cable_catenary_displacement_
˓→y.png -tile 2x1 -geometry +0+0 cable_catenary_displacement_xy.png
72
73 ds -4 e 3
74 plot fv all
75 sys sleep 1
76 hcpy png
77 sys mv hcpy_4.png cable_catenary_displacement_z.png
78

79 ds -3 e 1
80 plot fv all
81 sys sleep 1
82 hcpy png
83 sys mv hcpy_5.png cable_catenary_stress_xx.png
84

85 ds -2 e 1
86 plot fv all
87 sys sleep 1
88 hcpy png
89 sys mv hcpy_6.png cable_catenary_strain_xx.png
90

91 sys montage cable_catenary_stresses.png cable_catenary_strains.png -tile


˓→2x1 -geometry +0+0 cable_catenary_ss.png
92
93 graph load time DISP D2
94 sys mv graph_0.ps cable_catenary_displacement_load.eps
95 graph load time STRESS SXX
96 sys mv graph_1.ps cable_catenary_stress_load.eps
97 graph load time TOSTRAIN EXX
98 sys mv graph_2.ps cable_catenary_strain_load.eps
99
100 sys ps2pdf cable_catenary_stress_load.eps
101 sys ps2pdf cable_catenary_strain_load.eps
102 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_catenary_ss_
˓→load.pdf cable_catenary_strain_load.pdf cable_catenary_stress_load.pdf
103
104 graph psx time FORC F2
105 sys mv graph_3.ps cable_catenary_reaction_pin.eps
106 graph psx time FORC F1
(continues on next page)

8.1. Catenary cable under its own weight 85


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


107 sys mv graph_4.ps cable_catenary_horizontalf_pin.eps
108
109 sys ps2pdf cable_catenary_reaction_pin.eps
110 sys ps2pdf cable_catenary_horizontalf_pin.eps
111 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_catenary_
˓→reactions.pdf cable_catenary_reaction_pin.pdf cable_catenary_horizontalf_
˓→pin.pdf
112
113 # let's go back to the deformed shape.
114 rot -z
115 view disp
116 ds -4 e 4
117 plot fv all
118
119 # exit the program
120 # quit

Code block 8.2: Extract of the nodes of the mesh in Calculix


of the catenary cable.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,1.000000000000e+03,-2.000000000000e+01,0.000000000000e+00
4 3,2.000000000000e+03,-4.000000000000e+01,0.000000000000e+00
5 4,3.000000000000e+03,-6.000000000000e+01,0.000000000000e+00
6 5,4.000000000000e+03,-8.000000000000e+01,0.000000000000e+00
7 6,5.000000000000e+03,-1.000000000000e+02,0.000000000000e+00
8 7,6.000000000000e+03,-1.200000000000e+02,0.000000000000e+00
9 8,7.000000000000e+03,-1.400000000000e+02,0.000000000000e+00
10 9,8.000000000000e+03,-1.600000000000e+02,0.000000000000e+00
11 10,9.000000000000e+03,-1.800000000000e+02,0.000000000000e+00
12 11,1.000000000000e+04,-2.000000000000e+02,0.000000000000e+00
13 12,1.100000000000e+04,-2.200000000000e+02,0.000000000000e+00
14 13,1.200000000000e+04,-2.400000000000e+02,0.000000000000e+00
15 14,1.300000000000e+04,-2.600000000000e+02,0.000000000000e+00
16 15,1.400000000000e+04,-2.800000000000e+02,0.000000000000e+00
17 16,1.500000000000e+04,-3.000000000000e+02,0.000000000000e+00
18 17,1.600000000000e+04,-3.200000000000e+02,0.000000000000e+00
19 18,1.700000000000e+04,-3.400000000000e+02,0.000000000000e+00
20 19,1.800000000000e+04,-3.600000000000e+02,0.000000000000e+00
21 20,1.900000000000e+04,-3.800000000000e+02,0.000000000000e+00

Code block 8.3: Extract of the elements of the mesh in Cal-


culix of the catenary cable.
1 *ELEMENT, TYPE=T3D2, ELSET=Eall
2 1, 1, 2
3 2, 2, 3
4 3, 3, 4
5 4, 4, 5
6 5, 5, 6
7 6, 6, 7
8 7, 7, 8
9 8, 8, 9
(continues on next page)

86 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


10 9, 9, 10
11 10, 10, 11
12 11, 11, 12
13 12, 12, 13
14 13, 13, 14
15 14, 14, 15
16 15, 15, 16
17 16, 16, 17
18 17, 17, 18
19 18, 18, 19
20 19, 19, 20
21 20, 20, 21
22 21, 21, 22

8.1.3 Solution

The solution deck is written in ccx for Calculix. We would like to underline again the fact
that the initial prestress is prescribed as an inelastic thermal load computed starting from the
coefficient of thermal expansion.

Code block 8.4: Calculix solution deck of the catenary cable.


1 ** Include all the mesh generated by calculix itself.
2 *INCLUDE, INPUT=all.msh
3
4 ** Include the phsyical entities generated by the .fbd script.
5 *INCLUDE, INPUT=cable.nam
6 *INCLUDE, INPUT=psx.nam
7 *INCLUDE, INPUT=pdx.nam
8 *INCLUDE, INPUT=load.nam
9
10 ** Define the material for the cable: isotropic steel; assign
11 ** also the coefficient of thermal expansion to simulate
12 ** the prestressing by means of an inelastic thermal deformation.
13 *MATERIAL, NAME=steel
14 *ELASTIC
15 160e3, 0.3
16 * EXPANSION, ZERO=0.0
17 1.2e-5, 0.0
18 *DENSITY
19 7.85e-9, 0.0
20
21 ** Define the area of the section of the cable element.
22 *SOLID SECTION, ELSET=Ecable, MATERIAL=steel
23 519
24
25 ** All the elements are at zero temperature at T0.
26 *INITIAL CONDITIONS, TYPE=TEMPERATURE
27 Nall, 0.0
28
29 ** Definition of the pins for the boundary conditions.
30 *BOUNDARY
31 Npsx, 1, 3
(continues on next page)

8.1. Catenary cable under its own weight 87


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


32 Npdx, 1, 3
33
34 ** Static nonlinear step: request fixed time incrementation, apply
35 ** prestressing, include the gravitational load.
36 *STEP, NLGEOM
37 *STATIC, SOLVER=SPOOLES, DIRECT
38 1e-2, 1.0
39 *TEMPERATURE
40 Ncable, -17.20
41 *DLOAD
42 Ecable, GRAV, 9810, 0.0, -1.0, 0.0
43 *NODE FILE
44 U, RF
45 *EL FILE
46 S, E
47 *END STEP

Code block 8.5: Bash script to automatically start Calculix


for the analysis of the catenary cable.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-catenary.fbd

8.1.4 Post-processing

The characteristic catenary shape is put in evidence by the plots generated automatically by
cgx.

8.1.5 Dlubal comparison

The same exercise is solved in the commercial software Dlubal showing a perfect match with
respect to the results obtained in the open-source software Calculix.

8.1.6 Conclusions

The shape of the catenary cable has been chosen to match the results of the analytical form-
finding performed in the next chapter of the thesis; therefore, the numerical calculations show
the effectiveness of the analytical procedure.

88 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.1: Total displacements of the catenary cable under its own weight.

8.2: Displacements in the x and y-direction of the catenary cable.

8.1. Catenary cable under its own weight 89


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.3: Axial stress and elongation of the catenary cable.

90 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1
0.9
Node=51

0.8
0.7
Values at Nodes (cable-catenary.fbd)

0.6
Time
0.5
0.4
0.3
0.2
0.1
0
-200

-300

-400

-500

-600

-700

-800

-900

-1000

-1100

-1200

D2

8.4: Displacement of the mid-point of the catenary cable.

8.1. Catenary cable under its own weight 91


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-catenary.fbd)


0.00045
Node=51

0.0004

0.00035

0.0003

0.00025
EXX

0.0002

0.00015

0.0001

5x10-5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-catenary.fbd)


90
Node=51

80

70

60

50
SXX

40

30

20

10

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.5: Axial stress and elongation of the mid-point of the catenary cable.

92 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-catenary.fbd)


3000
Node=1

2500

2000

1500
F2

1000

500

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-catenary.fbd)


0
Node=1

-5000

-10000

-15000

-20000
F1

-25000

-30000

-35000

-40000

-45000
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.6: Horizontal and vertical reactions of the catenary cable.

8.1. Catenary cable under its own weight 93


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.7: Check of the displacements and tension in the cable.

94 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.8: Check of the axial elongation of the cable.

8.1. Catenary cable under its own weight 95


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.2 Parabola cable under a distributed load

8.2.1 Introduction

We now draw a comparison between the catenary and parabola shape for a cable. As discussed
later in the next chapter, the two structural cases show strong similarities both in terms of
displacements and internal actions, but the analytical formulation to obtain the results will
widely diverge: in the case of the catenary cable, an ordinary differential equation must be
solved, whereas for the cable under a distributed load, we can proceed by pure equilibrium.
The cable analysed presents a Young modulus equal to 160 · 103 𝑀 𝑃 𝑎 and weight density of
78.5𝑘𝑔/𝑚3 , with a sectional area of 519𝑚𝑚2 and it is pre-stressed with an equivalent thermal
load of 17.14𝑘𝑁 .

8.2.2 Pre-processing

Being the initial configuration of the cable a straight line, the mesh is directly generated in cgx
without referring to external meshers. At the same time, the solution and the post-processing
phase are launched from Calculix.

Code block 8.6: Calculix pre-post processing file for the


catenary cable.
1 # characteristic mesh subdivision.
2 valu ds 50
3

4 # point geometry to define the two pins for the cable and also
5 # a node in the middle to test for maximum displacement.
6 pnt p1 0.0 0.0 0.0
7 pnt p2 100e3 -2000.0 0.0
8 pnt p3 50e3 -1000.0 0.0
9

10 # point sets to be included in the analysis with ccx.


11 seta psx p p1
12 seta pdx p p2
13 seta loadv p p3
14
15 # line geometry defining the two pieces of the cable; the cable is
16 # really just one, but we need to test for max displacement.
17 line l1 p1 p3 ds
18 line l2 p3 p2 ds
19
20 # line sets to be included in the analysis with ccx.
21 seta cable l l1 l2
22
23 # element assignments for the following mesh command.
24 elty cable be2
25
26 # mesh the model and plot a wireframe of the mesh.
27 mesh all
28 plot m all
(continues on next page)

96 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


29 view line
30
31 # saving the mesh and groups to file to be retrieved by ccx.
32 send all abq
33 send cable abq names
34 send psx abq names
35 send pdx abq names
36 send loadv abq names
37

38 # change element type from beam to truss element.


39 sys sed -i "s/B31/T3D2/g" all.msh
40
41 # solve the problem with finite element model.
42 sys ccx_2.14 cable_parabola
43 view line
44
45 # read the solution file and load in the graphic window.
46 read cable_parabola.frd
47
48 # orient the countour plots, iterate and print the images.
49 rot -z
50 view disp
51 scal d 20
52 ds -4 e 4
53 plot fv all
54 sys sleep 1
55 hcpy png
56 sys mv hcpy_1.png cable_parabola_displacement_magnitude_3d.png
57
58 view disp off
59 ds -4 e 1
60 plot fv all
61 sys sleep 1
62 hcpy png
63 sys mv hcpy_2.png cable_parabola_displacement_x.png
64
65 ds -4 e 2
66 plot fv all
67 sys sleep 1
68 hcpy png
69 sys mv hcpy_3.png cable_parabola_displacement_y.png
70
71 sys montage cable_parabola_displacement_x.png cable_parabola_displacement_
˓→y.png -tile 2x1 -geometry +0+0 cable_parabola_displacement_xy.png

72
73 ds -4 e 3
74 plot fv all
75 sys sleep 1
76 hcpy png
77 sys mv hcpy_4.png cable_parabola_displacement_z.png
78
79 ds -3 e 1
80 plot fv all
81 sys sleep 1
82 hcpy png
83 sys mv hcpy_5.png cable_parabola_stress_xx.png
(continues on next page)

8.2. Parabola cable under a distributed load 97


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


84
85 ds -2 e 1
86 plot fv all
87 sys sleep 1
88 hcpy png
89 sys mv hcpy_6.png cable_parabola_strain_xx.png
90
91 sys montage cable_parabola_stress_xx.png cable_parabola_strain_xx.png -
˓→tile 2x1 -geometry +0+0 cable_parabola_ss.png

92
93 graph loadv time DISP D2
94 sys mv graph_0.ps cable_parabola_displacement_load.eps
95 graph loadv time STRESS SXX
96 sys mv graph_1.ps cable_parabola_stress_load.eps
97 graph loadv time TOSTRAIN EXX
98 sys mv graph_2.ps cable_parabola_strain_load.eps
99
100 sys ps2pdf cable_parabola_stress_load.eps
101 sys ps2pdf cable_parabola_strain_load.eps
102 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_parabola_ss_
˓→load.pdf cable_parabola_strain_load.pdf cable_parabola_stress_load.pdf
103
104 graph psx time FORC F2
105 sys mv graph_3.ps cable_parabola_reaction_pin.eps
106 graph psx time FORC F1
107 sys mv graph_4.ps cable_parabola_horizontalf_pin.eps
108
109 sys ps2pdf cable_parabola_reaction_pin.eps
110 sys ps2pdf cable_parabola_horizontalf_pin.eps
111 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_parabola_
˓→reactions.pdf cable_parabola_reaction_pin.pdf cable_parabola_horizontalf_
˓→pin.pdf

112
113 # let's go back to the deformed shape.
114 rot -z
115 view disp
116 ds -4 e 4
117 plot fv all
118
119 # exit the program
120 # quit

Code block 8.7: Nodes of the Calculix mesh of the parabola


cable.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,1.000000000000e+03,-2.000000000000e+01,0.000000000000e+00
4 3,2.000000000000e+03,-4.000000000000e+01,0.000000000000e+00
5 4,3.000000000000e+03,-6.000000000000e+01,0.000000000000e+00
6 5,4.000000000000e+03,-8.000000000000e+01,0.000000000000e+00
7 6,5.000000000000e+03,-1.000000000000e+02,0.000000000000e+00
8 7,6.000000000000e+03,-1.200000000000e+02,0.000000000000e+00
9 8,7.000000000000e+03,-1.400000000000e+02,0.000000000000e+00
10 9,8.000000000000e+03,-1.600000000000e+02,0.000000000000e+00
(continues on next page)

98 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


11 10,9.000000000000e+03,-1.800000000000e+02,0.000000000000e+00
12 11,1.000000000000e+04,-2.000000000000e+02,0.000000000000e+00
13 12,1.100000000000e+04,-2.200000000000e+02,0.000000000000e+00
14 13,1.200000000000e+04,-2.400000000000e+02,0.000000000000e+00
15 14,1.300000000000e+04,-2.600000000000e+02,0.000000000000e+00
16 15,1.400000000000e+04,-2.800000000000e+02,0.000000000000e+00
17 16,1.500000000000e+04,-3.000000000000e+02,0.000000000000e+00
18 17,1.600000000000e+04,-3.200000000000e+02,0.000000000000e+00
19 18,1.700000000000e+04,-3.400000000000e+02,0.000000000000e+00
20 19,1.800000000000e+04,-3.600000000000e+02,0.000000000000e+00
21 20,1.900000000000e+04,-3.800000000000e+02,0.000000000000e+00

Code block 8.8: Elements of the Calculix mesh for the


parabola cable.
1 *ELEMENT, TYPE=T3D2, ELSET=Eall
2 1, 1, 2
3 2, 2, 3
4 3, 3, 4
5 4, 4, 5
6 5, 5, 6
7 6, 6, 7
8 7, 7, 8
9 8, 8, 9
10 9, 9, 10
11 10, 10, 11
12 11, 11, 12
13 12, 12, 13
14 13, 13, 14
15 14, 14, 15
16 15, 15, 16
17 16, 16, 17
18 17, 17, 18
19 18, 18, 19
20 19, 19, 20
21 20, 20, 21
22 21, 21, 22

8.2.3 Solution

The distributed load is transformed in an equivalent nodal load either in the deck or in the
pre-processing phase.

Code block 8.9: Calculix deck for the solution of the


parabola cable.
1 ** Include all the mesh generated by calculix itself.
2 *INCLUDE, INPUT=all.msh
3
4 ** Include the phsyical entities generated by the .fbd script.
5 *INCLUDE, INPUT=cable.nam
6 *INCLUDE, INPUT=psx.nam
(continues on next page)

8.2. Parabola cable under a distributed load 99


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


7 *INCLUDE, INPUT=pdx.nam
8 *INCLUDE, INPUT=loadv.nam
9

10 ** Define the material for the cable: isotropic steel; assign


11 ** also the coefficient of thermal expansion to simulate
12 ** the prestressing by means of an inelastic thermal deformation.
13 *MATERIAL, NAME=steel
14 *ELASTIC
15 160e3, 0.3
16 *EXPANSION, ZERO=0.0
17 1.2e-5, 0.0
18
19 ** Define the area of the section of the cable element.
20 *SOLID SECTION, ELSET=Ecable, MATERIAL=steel
21 519
22
23 ** All the elements are at zero temperature at T0.
24 *INITIAL CONDITIONS, TYPE=TEMPERATURE
25 Nall, 0.0
26
27 ** Definition of the pins for the boundary conditions.
28 *BOUNDARY
29 Npsx, 1, 3
30 Npdx, 1, 3
31
32 ** Static nonlinear step: request fixed time incrementation, apply
33 ** prestressing, include the gravitational load.
34 *STEP, NLGEOM
35 *STATIC, SOLVER=SPOOLES, DIRECT
36 1e-2, 1.0
37 *TEMPERATURE
38 Ncable, -17.20
39 *CLOAD
40 Ncable, 2, -40.0
41 *NODE FILE
42 U, RF
43 *EL FILE
44 S, E
45 *END STEP

100 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.9: Total displacements of the parabola cable under a distributed load.

8.10: Displacements in the x and y-direction of the parabola cable.

8.2. Parabola cable under a distributed load 101


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.11: Axial stress and axial elongation of the parabola cable under a distributed load.

102 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1
0.9
Node=51

0.8
0.7
Values at Nodes (cable-parabola.fbd)

0.6
Time
0.5
0.4
0.3
0.2
0.1
0
-200

-300

-400

-500

-600

-700

-800

-900

-1000

-1100

-1200

D2

8.12: Displacement of the mid-point of the parabola cable.

8.2. Parabola cable under a distributed load 103


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-parabola.fbd)


0.00045
Node=51

0.0004

0.00035

0.0003

0.00025
EXX

0.0002

0.00015

0.0001

5x10-5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-parabola.fbd)


90
Node=51

80

70

60

50
SXX

40

30

20

10

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.13: Axial stress and elongation of the mid-point of the parabola cable.

104 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-parabola.fbd)


3000
Node=1

2500

2000

1500
F2

1000

500

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-parabola.fbd)


0
Node=1

-5000

-10000

-15000

-20000
F1

-25000

-30000

-35000

-40000

-45000
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.14: Horizontal and vertical reactions of the the supports of the parabola cable.

8.2. Parabola cable under a distributed load 105


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.10: Bash script to start the analysis workflow


for the prabola cable.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-parabola.fbd

8.2.4 Post-processing

The post-processing phase as usual reports the countour plots for the displacements, stresses
and strains.

8.2.5 Dlubal comparison

The same case study is also analysed in the commercial software Dlubal to verify the obtained
results. There is no discrepancy between the two results.

8.2.6 Conclusions

In particular, we focus our attention on the time graphs reporting the maximum dis-
placement for the mid span point: as in the previous examples, independently from
the applied pretension, the behaviour of the cable appears to be highly nonlinear for
the first increments, after which the slope of the graph plotting the displacements
versus the applied load tends to decrease.

106 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.15: Check of the displacements and tension in the cable.

8.2. Parabola cable under a distributed load 107


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.16: Check of the axial elongation of the cable.

108 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.3 Cable under a concentrated load

We shall now analyse the response of cable structures under the application of live loads. Since
the beginning, we would like to point out that the parameter time reported in the time graphs
represents the load multiplier which amplifies the reference applied load. The amplitude func-
tion assigned by Calculix ranges from 0 to 1 and automatically imposes a load multiplier equal
to the currrent time incrementation.

8.3.1 Introduction

The studied cable structure consists of a single taut cable hinged at both ends, which are sepa-
rated by a span of 8m. The cable is subject to a vertical load applied in the middle of the span
equal to 10𝑘𝑁 . The steel section of the cable has an area of 60𝑚𝑚2 with effective elastic mod-
ulus of 140 · 103 𝑀 𝑃 𝑎. The pretension simulated by means of an equivalent inelastic thermal
load is 20𝑘𝑁 .

8.3.2 Pre-processing

The pre-post and solution steps are run automatically by means of a bash-like script written in
cgx for Calculix.

Code block 8.11: Pre and post-processing file for the cable
under a concentrate load.
1 # each part of the cable is represented by just one finite element.
2 valu ds 1
3
4 # point geometry defining the pins and middle node for the cable.
5 pnt p1 0.0 0.0 0.0
6 pnt p2 8000.0 0.0 0.0
7 pnt p3 4000.0 0.0 0.0
8

9 # point sets defining the physical entities for the cable


10 seta psx p p1
11 seta pdx p p2
12 seta vload p p3
13
14 # line geometry for the two parts of the cable; in reality, it is just
15 # one cable, but we need to apply the load in the middle.
16 line l1 p1 p3 ds
17 line l2 p3 p2 ds
18
19 # line sets gathering the two pieces of the cable.
20 seta cable l l1 l2
21
22 # element assignments: we request a two-node beam element that
23 # will be changed in a truss element later on.
24 elty cable be2
25

26 # mesh the entire model and plot it with lines.


(continues on next page)

8.3. Cable under a concentrated load 109


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


27 mesh all
28 plot m all
29 view line
30
31 # save the mesh on disk to be reused by ccx.
32 send all abq
33
34 # change element type from beam to truss element.
35 sys sed -i "s/B31/T3D2/g" all.msh
36
37 # solve the problem using the finite element method.
38 sys ccx_2.14 cable_concentrated
39 view line
40
41 # read the file of the results and start the post-processing.
42 read cable_concentrated.frd
43
44 rot -z
45 view disp
46 scal d 5
47 ds -4 e 4
48 plot fv all
49 sys sleep 1
50 hcpy png
51 sys mv hcpy_1.png cable_concentrated_displacement_magnitude_3d.png
52

53 view disp off


54 ds -4 e 1
55 plot fv all
56 sys sleep 1
57 hcpy png
58 sys mv hcpy_2.png cable_concentrated_displacement_x.png
59
60 ds -4 e 2
61 plot fv all
62 sys sleep 1
63 hcpy png
64 sys mv hcpy_3.png cable_concentrated_displacement_y.png
65
66 sys montage cable_concentrated_displacement_x.png cable_concentrated_
˓→displacement_y.png -tile 2x1 -geometry +0+0 cable_concentrated_
˓→displacement_xy.png
67
68 ds -4 e 3
69 plot fv all
70 sys sleep 1
71 hcpy png
72 sys mv hcpy_4.png cable_concentrated_displacement_z.png
73

74 ds -3 e 1
75 plot fv all
76 sys sleep 1
77 hcpy png
78 sys mv hcpy_5.png cable_concentrated_stress_xx.png
79

80 ds -2 e 1
(continues on next page)

110 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


81 plot fv all
82 sys sleep 1
83 hcpy png
84 sys mv hcpy_6.png cable_concentrated_strain_xx.png
85
86 sys montage cable_concentrated_stress_xx.png cable_concentrated_strain_xx.
˓→png -tile 2x1 -geometry +0+0 cable_concentrated_ss_xx.png
87
88 graph vload time DISP D2
89 sys mv graph_0.ps cable_concentrated_displacement_vload.eps
90 graph vload time STRESS SXX
91 sys mv graph_1.ps cable_concentrated_stress_vload.eps
92 graph vload time TOSTRAIN EXX
93 sys mv graph_2.ps cable_concentrated_strain_vload.eps
94

95 sys ps2pdf cable_concentrated_stress_vload.eps


96 sys ps2pdf cable_concentrated_strain_vload.eps
97 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_concentrated_
˓→ss_vload.pdf cable_concentrated_strain_vload.pdf cable_concentrated_
˓→stress_vload.pdf
98

99 graph psx time FORC F2


100 sys mv graph_3.ps cable_concentrated_vreaction.eps
101 graph psx time FORC F1
102 sys mv graph_4.ps cable_concentrated_hreaction.eps
103

104 sys ps2pdf cable_concentrated_vreaction.eps


105 sys ps2pdf cable_concentrated_hreaction.eps
106 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_concentrated_
˓→reactions.pdf cable_concentrated_vreaction.pdf cable_concentrated_
˓→hreaction.pdf
107

108 # go back to the plot of the deformed shape.


109 rot -z
110 view disp
111 ds -4 e 4
112 plot fv all

Code block 8.12: Mesh and element sets for the cable under
a concentrated load.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,4.000000000000e+03,0.000000000000e+00,0.000000000000e+00
4 3,8.000000000000e+03,0.000000000000e+00,0.000000000000e+00
5 *ELEMENT, TYPE=T3D2, ELSET=Eall
6 1, 1, 2
7 2, 2, 3

8.3.3 Solution

The solution deck is written in Calculix, which has a similar syntax to the one adopted by the
commercial solver Abaqus.

8.3. Cable under a concentrated load 111


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.13: Calculix deck for the solution of a cable


under a concentrated load.
1 ** Include the mesh generated by cgx from Calculix.
2 *INCLUDE, INPUT=all.msh
3
4 ** Define the material for the analysis (steel).
5 ** The coefficient of thermal expansion is needed to simulate
6 ** the prestressing of the cables by means of an inelastic
7 ** thermal expansion.
8 *MATERIAL, NAME=steel
9 *ELASTIC
10 140e3, 0.3
11 * EXPANSION, ZERO=0.0
12 1.2e-5, 0.0
13
14 ** Truss section for the elements for the definition of the cable.
15 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
16 60.0
17
18 ** Set null temperature to all the model at T0.
19 *INITIAL CONDITIONS, TYPE=TEMPERATURE
20 Nall, 0.0
21
22 ** Boundary conditions for the pin supports.
23 *BOUNDARY
24 1, 1, 3
25 3, 1, 3
26
27 ** Static nonlinear step with fixed time incrementation. Apply the
28 ** concentrated loads and prestressing. Request for nodal displacements
29 ** and reaction forces, and element stresses and strains.
30 *STEP, NLGEOM
31 *STATIC, SOLVER=SPOOLES, DIRECT
32 1e-2, 1.0
33 * TEMPERATURE
34 1, -218.413
35 2, -218.413
36 3, -218.413
37 *CLOAD
38 2, 2, -10.0e3
39 *NODE FILE
40 U, RF
41 *EL FILE
42 S, E
43 *END STEP

112 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.14: Bash script starting the analysis of a cable


under a concentrated load.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-concentrated.fbd

8.3.4 Post-processing

The post-processing phase, as already state, is fully automated in cgx, which directly produces
the countour plots for the displacements (magnitude, x and y-direction), the axial stress and the
axial elongation. We also output some interesting time graphs for the same quantities referred
to the mid span versus the load multiplier represented on the abscissa by time.

8.17: Total displacements of the cable under a concentrated load.

8.3. Cable under a concentrated load 113


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.18: Displacements in the x and y-direction of the cable under a concentrated load.

8.19: Stresses and strains for the cable under a concentrated load.

114 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1
0.9
Node=2

0.8
0.7
Values at Nodes (cable-concentrated.fbd)

0.6
Time
0.5
0.4
0.3
0.2
0.1
0
-50

-100

-150

-200

-250

-300

-350

-400

D2

8.20: Vertical displacement of the point of application of the force.

8.3. Cable under a concentrated load 115


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-concentrated.fbd)


0.0045
Node=2

0.004

0.0035

0.003

0.0025
EXX

0.002

0.0015

0.001

0.0005

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-concentrated.fbd)


1000
Node=2

900

800

700

600

500
SXX

400

300

200

100

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.21: Axial stress and elongation of the loaded point of the cable.

116 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-concentrated.fbd)


5000
Node=1

4500

4000

3500

3000

2500
F2

2000

1500

1000

500

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-concentrated.fbd)


0
Node=1

-10000

-20000

-30000
F1

-40000

-50000

-60000
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.22: Horizontal and vertical reactions of the supports of the cable.

8.3. Cable under a concentrated load 117


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.3.5 Dlubal comparison

Performing the same nonlinear geometric analysis in the commercial software Dlubal, the same
results are obtained, even though Dlubal does not activate by default large deformations; how-
ever, being the end rotations of the cable less than 10%, this effect can be considered negligible.

8.3.6 Conclusions

This simple example introduces the reader to the concept of nonlinear elastic analysis, show-
ing the need for an iterative approach to the solution. Being the increase of the load strictly
monotonic, the convergence of the solution is attained in a few steps, considering also the fact,
as outlined in the paragraphs describing the theory behind the method, that no second order
effects, which could lead to instability, are activated.

118 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.23: Check of the displacements and the tension in the cable.

8.3. Cable under a concentrated load 119


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.24: Check of the axial elongation of the cable.

120 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.4 Plastic cable under a concentrated load

8.4.1 Introduction

The same example of the cable under a concentrated load has been thoroughly analysed chang-
ing the mechanical properties of the elements; an isotropic hardening law for the cable is as-
signed by means of a table linking the level of stress and the attained Mises equivalente plastic
strain (in our case, the yielding is activated at 800𝑀 𝑃 𝑎 and at 1000𝑀 𝑃 𝑎 the element under-
goes an equivalent plastic deformation of 15%).
The structure is tested against a cycle of loading and unloading to show the permanent defor-
mations in the cable after the discharge; the characteristic sag effect is put in evidence.
This case will not be analysed in Dlubal due to the impossibility to model the cycle without the
necessary additional modules.

8.4.2 Pre-processing

The pre-post processing phase is automated in Calculix with a bash script; the solution by ccx
is also directly invoked by the .fbd script.

Code block 8.15: Pre-post processing file in Calculix for the


plastic cable under a concentrated load.
1 # each part of the cable is represented by just one finite element.
2 valu ds 1
3
4 # point geometry defining the pins and middle node for the cable.
5 pnt p1 0.0 0.0 0.0
6 pnt p2 8000.0 0.0 0.0
7 pnt p3 4000.0 0.0 0.0
8
9 # point sets defining the physical entities for the cable
10 seta psx p p1
11 seta pdx p p2
12 seta vload p p3
13
14 # line geometry for the two parts of the cable; in reality, it is just
15 # one cable, but we need to apply the load in the middle.
16 line l1 p1 p3 ds
17 line l2 p3 p2 ds
18
19 # line sets gathering the two pieces of the cable.
20 seta cable l l1 l2
21
22 # element assignments: we request a two-node beam element that
23 # will be changed in a truss element later on.
24 elty cable be2
25
26 # mesh the entire model and plot it with lines.
27 mesh all
28 plot m all
(continues on next page)

8.4. Plastic cable under a concentrated load 121


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


29 view line
30
31 # save the mesh on disk to be reused by ccx.
32 send all abq
33
34 # change element type from beam to truss element.
35 sys sed -i "s/B31/T3D2/g" all.msh
36
37 # solve the problem using the finite element method.
38 sys ccx_2.14 cable_plastic
39 view line
40
41 # read the file of the results and start the post-processing.
42 read cable_plastic.frd
43

44 rot -z
45 view disp
46 scal d 5
47 ds -5 e 4
48 plot fv all
49 sys sleep 1
50 hcpy png
51 sys mv hcpy_1.png cable_plastic_displacement_magnitude_3d.png
52
53 view disp off
54 ds -5 e 1
55 plot fv all
56 sys sleep 1
57 hcpy png
58 sys mv hcpy_2.png cable_plastic_displacement_x.png
59
60 ds -5 e 2
61 plot fv all
62 sys sleep 1
63 hcpy png
64 sys mv hcpy_3.png cable_plastic_displacement_y.png
65
66 sys montage cable_plastic_displacement_x.png cable_plastic_displacement_y.
˓→png -tile 2x1 -geometry +0+0 cable_plastic_displacement_xy.png
67
68 ds -5 e 3
69 plot fv all
70 sys sleep 1
71 hcpy png
72 sys mv hcpy_4.png cable_plastic_displacement_z.png
73
74 ds -4 e 1
75 plot fv all
76 sys sleep 1
77 hcpy png
78 sys mv hcpy_5.png cable_plastic_stress_xx.png
79
80 ds -3 e 1
81 plot fv all
82 sys sleep 1
83 hcpy png
(continues on next page)

122 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


84 sys mv hcpy_6.png cable_plastic_strain_xx.png
85
86 sys montage cable_plastic_stress_xx.png cable_plastic_strain_xx.png -tile
˓→2x1 -geometry +0+0 cable_plastic_ss_xx.png
87
88 ds -1 e 1
89 plot fv all
90 sys sleep 1
91 hcpy png
92 sys mv hcpy_7.png cable_plastic_pe.png
93
94 graph vload time DISP D2
95 sys mv graph_0.ps cable_plastic_displacement_vload.eps
96 graph vload time STRESS SXX
97 sys mv graph_1.ps cable_plastic_stress_vload.eps
98 graph vload time TOSTRAIN EXX
99 sys mv graph_2.ps cable_plastic_strain_vload.eps
100
101 sys ps2pdf cable_plastic_stress_vload.eps
102 sys ps2pdf cable_plastic_strain_vload.eps
103 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_plastic_ss_
˓→vload.pdf cable_plastic_strain_vload.pdf cable_plastic_stress_vload.pdf
104
105 graph psx time FORC F2
106 sys mv graph_3.ps cable_plastic_vreaction.eps
107 graph psx time FORC F1
108 sys mv graph_4.ps cable_plastic_hreaction.eps
109
110 sys ps2pdf cable_plastic_vreaction.eps
111 sys ps2pdf cable_plastic_hreaction.eps
112 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_plastic_
˓→reactions.pdf cable_plastic_vreaction.pdf cable_plastic_hreaction.pdf

113
114 graph vload time PE PE
115 sys mv graph_5.ps cable_plastic_pe_vload.eps
116
117 # reshow the deformed shape
118 rot -z
119 view disp
120 ds -5 e 4
121 plot fv all

8.4. Plastic cable under a concentrated load 123


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.16: Mesh in calculix format of the plastic cable


under a concentrated load.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,4.000000000000e+03,0.000000000000e+00,0.000000000000e+00
4 3,8.000000000000e+03,0.000000000000e+00,0.000000000000e+00
5 * ELEMENT, TYPE=T3D2, ELSET=Eall
6 1, 1, 2
7 2, 2, 3

8.4.3 Solution

The consitutive law in terms of equivalent plastic deformations is assigned by means of a table
in the deck file; no dependency with regards to the temperature is activated.

Code block 8.17: Calculix solution deck of the plastic cable


under a concentrated load.
1 ** Include the mesh generated by cgx from Calculix.
2 *INCLUDE, INPUT=all.msh
3
4 ** Define the material for the analysis (steel).
5 ** The coefficient of thermal expansion is needed to simulate
6 ** the prestressing of the cables by means of an inelastic
7 ** thermal expansion.
8 *MATERIAL, NAME=steel
9 *ELASTIC
10 140e3, 0.3
11 * PLASTIC, HARDENING=ISOTROPIC
12 800.0, 0.0
13 900.0, 0.05
14 1000.0, 0.15
15 * EXPANSION, ZERO=0.0
16 1.2e-5, 0.0
17
18 ** Truss section for the elements for the definition of the cable.
19 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
20 60.0
21
22 ** Set null temperature to all the model at T0.
23 *INITIAL CONDITIONS, TYPE=TEMPERATURE
24 Nall, 0.0
25

26 ** Boundary conditions for the pin supports.


27 *BOUNDARY
28 1, 1, 3
29 3, 1, 3
30
31 ** Increase the load linearly from 0 to 1; decrease lineary to zero
32 ** from 1 to 1.5; keep at zero until the end of the analysis.
33 *AMPLITUDE, NAME=landu
34 0.0,0.0, 1.0,1.0, 2.0,0.0, 2.5,0.0
(continues on next page)

124 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


35
36 ** Apply the prestressing totally at T0, keep it until 2, then zero
37 ** at 2.5, maintain until the end of the analysis.
38 *AMPLITUDE, NAME=atemp
39 0.0,1.0, 1.0,1.0, 2.0,0.0, 2.5,0.0
40
41 ** Static nonlinear step with fixed time incrementation. Apply the
42 ** concentrated loads and prestressing. Request for nodal displacements
43 ** and reaction forces, and element stresses and strains.
44 *STEP, NLGEOM, INC=500
45 *STATIC, SOLVER=SPOOLES, DIRECT
46 0.05, 2.5
47 *TEMPERATURE, AMPLITUDE=atemp
48 1, -218.413
49 2, -218.413
50 3, -218.413
51 *CLOAD, AMPLITUDE=landu
52 2, 2, -10.0e3
53 *NODE FILE
54 U, RF
55 *EL FILE
56 S, E, PE
57 *END STEP

Code block 8.18: Bash script to start automatically the anal-


ysis of the plastic cable under a concentrated load.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-plastic.fbd

8.4.4 Post-processing

The same graphs as in the previous paragraph are here reported; the contour plots are drawn at
the final time after the discharge.

8.4.5 Conclusions

The example clearly shows that the cable should never, under service conditions, yield. In fact,
even though the final sag could be avoided by increasing again the pretension, the permanent
plastic strains have deformed the cable so significantly that the original shape imposed by the
prestressing has been completely lost. The application of additional live loads would only
worsen the situation.

8.4. Plastic cable under a concentrated load 125


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.25: Total displacements of the plastic cable under a concentrated load.

8.26: Displacements in the x and y-direction of the plastic cable.

126 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.27: Axial stresses and strains of the plastic cable under a concentrated load.

8.28: Von-Mises equivalent plastic strain of the cable under a concentrated load.

8.4. Plastic cable under a concentrated load 127


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=2

2
Values at Nodes (cable-plastic.fbd)

1.5
Time
1
0.5
0
0

-50

-100

-150

-200

-250

-300

-350

-400

-450

D2

8.29: Vertical displacement of the point of application of the load.

128 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-plastic.fbd)


0.006
Node=2

0.005

0.004

0.003
EXX

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (cable-plastic.fbd)


800
Node=2

700

600

500

400
SXX

300

200

100

-100
0 0.5 1 1.5 2 2.5
Time

8.30: Axial stress and elongation of the loaded point of a plastic cable.

8.4. Plastic cable under a concentrated load 129


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-plastic.fbd)


5000
Node=1

4500

4000

3500

3000

2500
F2

2000

1500

1000

500

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (cable-plastic.fbd)


5000
Node=1
0

-5000

-10000

-15000

-20000
F1

-25000

-30000

-35000

-40000

-45000

-50000
0 0.5 1 1.5 2 2.5
Time

8.31: Horizontal and vertical reactions of the supports of a plastc cable.

130 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=2

2
Values at Nodes (cable-plastic.fbd)

1.5
Time
1
0.5
0
0.0025

0.002

0.0015

0.001

0.0005

PE

8.32: Von-Mises equivalent plastic strain for the loaded point.

8.4. Plastic cable under a concentrated load 131


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.5 Cable net

8.5.1 Introduction

We now introduce the example of a simple plane cable net, hinged at every edge.
The cables, with a section of 2𝑚𝑚2 , used for the construction, have an elastic modulus of
110 · 103 𝑀 𝑃 𝑎 and are pretensioned with a load of 500𝑁 . The forces applied to the free nodes
are 50𝑁 .

8.5.2 Pre-processing

The grid points defining the start and end nodes of the cable elements are defined directly in
cgx without the need to employ any external mesher. ccx for the finite element solution and cgx
for the post-processing are automatically invoked by the script.

Code block 8.19: Calculix pre-post processing file for the


cable net.
1 # discretize each element as a single cable finite element.
2 valu ds 1
3
4 # point geometry defining the pins and loaded nodes.
5 pnt p1 4000 0 0
6 pnt p2 0 2000 0
7 pnt p3 4000 2000 0
8 pnt p4 8000 2000 0
9 pnt p5 0 4000 0
10 pnt p6 4000 4000 0
11 pnt p7 8000 4000 0
12 pnt p8 4000 6000 0
13
14 # point sets for the pins and loaded nodes to be submitted for analysis.
15 seta pins p p1 p2 p4 p5 p7 p8
16 seta vload p p3 p6
17 seta mdisp p p3
18
19 # line geometry defining the lines for the cables.
20 line l1 p1 p3 ds
21 line l2 p2 p3 ds
22 line l3 p3 p4 ds
23 line l4 p3 p6 ds
24 line l5 p5 p6 ds
25 line l6 p6 p7 ds
26 line l7 p6 p8 ds
27
28 # line sets gathering the cables in one single set.
29 seta cable l l1 l2 l3 l4 l5 l6 l7
30
31 # element assignments: mesh as a two-nodes beam element, then change
32 # to truss.
33 elty cable be2
(continues on next page)

132 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


34
35 # mesh all the model and plot it with lines.
36 mesh all
37 plot m all
38 view line
39
40 # save all the mesh on file to be allocated by ccx.
41 send all abq
42

43 # change the element type from beam to truss.


44 sys sed -i "s/B31/T3D2/g" all.msh
45
46 # solve the deck with the finite element method.
47 sys ccx_2.14 cable_net
48 view line
49
50 # read the file with the results for the post-processing.
51 read cable_net.frd
52
53
54 rot y
55 rot c 30
56 rot r 60
57 view disp
58 scal d 20
59 ds -4 e 4
60 plot fv all
61 sys sleep 1
62 hcpy png
63 sys mv hcpy_1.png cable_net_displacement_magnitude_3d.png
64
65 view disp off
66 ds -4 e 1
67 plot fv all
68 sys sleep 1
69 hcpy png
70 sys mv hcpy_2.png cable_net_displacement_x.png
71

72 ds -4 e 2
73 plot fv all
74 sys sleep 1
75 hcpy png
76 sys mv hcpy_3.png cable_net_displacement_y.png
77

78 sys montage cable_net_displacement_x.png cable_net_displacement_y.png -


˓→tile 2x1 -geometry +0+0 cable_net_displacement_xy.png
79
80 ds -4 e 3
81 plot fv all
82 sys sleep 1
83 hcpy png
84 sys mv hcpy_4.png cable_net_displacement_z.png
85
86 view disp
87 ds -3 e 3
88 plot fv all
(continues on next page)

8.5. Cable net 133


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


89 sys sleep 1
90 hcpy png
91 sys mv hcpy_5.png cable_net_stresses.png
92
93 view disp
94 ds -2 e 3
95 plot fv all
96 sys sleep 1
97 hcpy png
98 sys mv hcpy_6.png cable_net_strains.png
99
100 sys montage cable_net_stresses.png cable_net_strains.png -tile 2x1 -
˓→geometry +0+0 cable_net_ss.png
101
102 graph mdisp time DISP D3
103 sys mv graph_0.ps cable_net_mdisp.eps
104 graph mdisp time DISP D2
105 sys mv graph_1.ps cable_net_ldisp.eps
106
107 sys ps2pdf cable_net_mdisp.eps
108 sys ps2pdf cable_net_ldisp.eps
109 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile cable_net_disps.
˓→pdf cable_net_mdisp.pdf cable_net_ldisp.pdf
110
111 # let's go back to the deformed shape.
112 rot -z
113 view disp
114 ds -4 e 4
115 plot fv all
116
117 # exit the program
118 # quit

134 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.20: Mesh in Calculix format of the cable net.


1 *NODE, NSET=Nall
2 1,4.000000000000e+03,0.000000000000e+00,0.000000000000e+00
3 2,4.000000000000e+03,2.000000000000e+03,0.000000000000e+00
4 3,0.000000000000e+00,2.000000000000e+03,0.000000000000e+00
5 4,8.000000000000e+03,2.000000000000e+03,0.000000000000e+00
6 5,4.000000000000e+03,4.000000000000e+03,0.000000000000e+00
7 6,0.000000000000e+00,4.000000000000e+03,0.000000000000e+00
8 7,8.000000000000e+03,4.000000000000e+03,0.000000000000e+00
9 8,4.000000000000e+03,6.000000000000e+03,0.000000000000e+00
10 * ELEMENT, TYPE=T3D2, ELSET=Eall
11 1, 1, 2
12 2, 3, 2
13 3, 2, 4
14 4, 2, 5
15 5, 6, 5
16 6, 5, 7
17 7, 5, 8

8.5.3 Solution

We report here the Calculix deck defining the materials, boundary conditions and loads for the
definition of the problem at hand.

Code block 8.21: Solution deck in Calculix of the cable net.


1 ** Include all the mesh generated by cgx and load it in memory.
2 *INCLUDE, INPUT=all.msh
3
4 ** Elastic isotropic steel, coefficient of thermal expansion to
5 ** simulate the prestressing of the cables.
6 *MATERIAL, NAME=steel
7 *ELASTIC
8 110e3, 0.3
9 * EXPANSION, ZERO=0.0
10 1.2e-5, 0.0
11

12 ** Section of the cable for the truss element.


13 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
14 2
15
16 ** Initial conditions for the temperature since we need to simulate
17 ** the prestressing with an inelastic deformation.
18 *INITIAL CONDITIONS, TYPE=TEMPERATURE
19 Nall, 0.0
20
21 ** Boundary conditions for the pins on the edges.
22 *BOUNDARY
23 1, 1, 3
24 3, 1, 3
25 4, 1, 3
26 6, 1, 3
(continues on next page)

8.5. Cable net 135


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


27 7, 1, 3
28 8, 1, 3
29

30 ** Static nonlinear step, requesting a fixed time increment, apply the


31 ** same prestressing to all nodes, add the concentrated loads and
32 ** request the nodal displacement and reaction forces, plus the
33 ** element stresses and strains.
34 *STEP, NLGEOM, INC=500
35 *STATIC, SOLVER=SPOOLES, DIRECT
36 0.01, 1.0
37 *TEMPERATURE
38 1, -189.394
39 2, -189.394
40 3, -189.394
41 4, -189.394
42 5, -189.394
43 6, -189.394
44 7, -189.394
45 8, -189.394
46 *CLOAD
47 2, 3, -50.0
48 5, 3, -50.0
49 *NODE FILE
50 U, RF
51 *EL FILE, SECTION FORCES
52 S, E
53 *END STEP

Code block 8.22: Bash script to start Calculix automatically


for the analysis of the cable net.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-net.fbd

8.5.4 Post-processing

The post-processing phase outputs the contour plots for both displacements, stresses and
strains, but the concentration should be focused on the time graphs (i.e. load multiplier) es-
pecially for the displacement.

8.5.5 Dlubal comparison

The same structural case is analysed in the commercial software dlubal to verify the results
obtained with the open-source finite element software Calculix.

8.5.6 Conclusions

The analysis of a structure composed by multiple cables has highlighted the fundamental role
played by the pretensioning: in fact, even though the cables are all prestressed before the ap-

136 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.33: Total displacements of the plane cable net.

8.34: Displacements in the x and y-direction of the plane cable net.

8.5. Cable net 137


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.35: Axial force and elongation of the plane cable net.

plication of the live loads, a strongly nonlinear relationship between the external load and the
mid displacement is evident. The cables, bearing no flexural stiffness on their own, in order to
collaborate among them efficiently, must be properly pretensioned to allow the structure to re-
spond slightly super-linearly to the external actions. Otherwise, the initial nonlinear behaviour
could worsen as the load increases, causing the typical sag effect of slack cables.

138 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (cable-net.fbd)


-30
Node=2

-40

-50

-60
D3

-70

-80

-90
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (cable-net.fbd)


0
Node=2

-0.1

-0.2

-0.3
D2

-0.4

-0.5

-0.6
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.36: Vertical and lateral displacement of the loaded point of the cable net.

8.5. Cable net 139


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.37: Check of the displacement and tension in the cable net.

140 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.38: Check of the axial elongation of the cable net.

8.5. Cable net 141


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.6 Plane membrane

8.6.1 Introduction

The analysis of a plane membrane, in addition to showing the general behaviour of this type of
structure, allows the engineer to understand that the membrane can be assimilated to a contin-
uous curtain of cables in two directions.
In this following examples, no pretension is assigned to the membrane for two main reasons:
1. The pretension should be imposed by the action of the cables as later discussed for the
form-finding procedure.
2. We want to highlight the nonlinear behaviour of membranes which are not subject to
prestressing, to show that after an initial severe nonlinear phase, the membrane recovers
substantial stiffness to carry additional loading.
The membrane is characterized by an elastic modulus of 8 · 103 𝑀 𝑃 𝑎 and Poisson’s ratio of 0.4.
It is subject to a distributed load of 1𝑘𝑃 𝑎.

8.6.2 Pre-processing

The mesh geometry is created with the open-source code gmsh, drawing a square with side
equal to 5𝑚 and thickness 2𝑚𝑚.

Code block 8.23: Gmsh script to produce the mesh of the


plane membrane.
1 // Characteristic length of the triangular mesh to be created on the
2 // membrane.
3 lc = 500.0;
4
5 // Length of the edge of the square membrane.
6 l = 5000.0;
7

8 // Geometrical points defining the pins where the membrane is anchored.


9 Point(1) = {0, 0, 0, lc};
10 Point(2) = {l, 0, 0, lc};
11 Point(3) = {l, l, 0, lc};
12 Point(4) = {0, l, 0, lc};
13
14 // Geometrical lines defining the edges or boundaries of the membrane.
15 Line(1) = {1, 2};
16 Line(2) = {2, 3};
17 Line(3) = {3, 4};
18 Line(4) = {4, 1};
19
20 // Line loop defining the edges which enclose the membrane.
21 Line Loop(1) = {1, 2, 3, 4};
22
23 // Geometrical surface identifying the membrane.
24 Surface(1) = {1};
(continues on next page)

142 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


25
26 // Physical line representing the edges, as though they were infinitely
27 // rigid cables.
28 Physical Line("cables", 200) = {1, 2, 3, 4};
29
30 // Physical surface representing the membrane which will be meshed.
31 Physical Surface("memb", 300) = {1};
32
33 // Choose a frontal algorithm for the membrane to increase the
34 // regularity of the mesh.
35 Mesh.Algorithm = 6;
36
37 // Mesh second order; much slower convergence but better stress results.
38 Mesh.ElementOrder = 2;
39

40 // Send to the compatible Abaqus format also the node sets.


41 Mesh.SaveGroupsOfNodes = 1;
42
43 // Mesh just 2D; we do not have 3D elements in the model.
44 Mesh 2;
45

46 // Save the mesh in gmsh format for inspection.


47 Save "membrane_plane.msh";
48
49 // Save the mesh in Abaqus format for the analysis in Abaqus.
50 Mesh.Format = 39;
51 Save "membrane_plane_gmsh.inp";

Code block 8.24: Calculix pre-post processing file for the


plane membrane.
1 # mesh with gmsh automatically.
2 sys gmsh membrane_plane.geo -
3
4 # change element type since gmsh meshes directly with CPS6.
5 sys sed -i "s/CPS6/S6/g" membrane_plane_gmsh.inp
6
7 # read the mesh from gmsh and load it in memory.
8 read membrane_plane_gmsh.inp
9
10 # save an image of the filled geometry.
11 view fill
12 rot z
13 hcpy png
14 sys sleep 1
15 sys mv hcpy_1.png membrane_plane_mesh_fill.png
16

17 # save an image of the mesh with wireframe.


18 view line
19 rot z
20 hcpy png
21 sys sleep 1
22 sys mv hcpy_2.png membrane_plane_mesh_line.png
23
24 # remove the cable elements which being fixed are useless.
(continues on next page)

8.6. Plane membrane 143


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.39: Mesh produced by gmsh of the plane membrane.

144 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


25 zap +T3D2
26 view line
27

28 # save the mesh and groups to file.


29 send all abq
30 send memb abq names
31 send cables abq names
32 send frex abq names
33

34 # solve the input file with ccx.


35 sys ccx_2.14 membrane_plane
36 view fill
37
38 # read the file with the results for postprocessing.
39 read membrane_plane.frd
40
41
42 # contour plots
43 rot -z
44 rot u -60
45 rot c -45
46 view disp
47 scal d 20
48 ds -4 e 4
49 plot fv all
50 max 110
51 sys sleep 1
52 hcpy png
53 sys mv hcpy_3.png membrane_plane_displacement_magnitude_3d.png
54
55
56 view disp off
57 rot z
58 ds -4 e 1
59 plot fv all
60 max 1.2
61 min -1.2
62 sys sleep 1
63 hcpy png
64 sys mv hcpy_4.png membrane_plane_displacement_x.png
65
66 ds -4 e 2
67 plot fv all
68 max 1.4
69 min -1.4
70 sys sleep 1
71 hcpy png
72 sys mv hcpy_5.png membrane_plane_displacement_y.png
73

74 sys montage membrane_plane_displacement_x.png membrane_plane_displacement_


˓→y.png -tile 2x1 -geometry +0+0 membrane_plane_displacement_xy.png
75
76 ds -4 e 3
77 plot fv all
78 max 0.0
79 min -110
(continues on next page)

8.6. Plane membrane 145


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


80 sys sleep 1
81 hcpy png
82 sys mv hcpy_6.png membrane_plane_displacement_z.png
83
84 ds -3 e 1
85 plot fv all
86 max 13.5
87 min -1.3
88 sys sleep 1
89 hcpy png
90 sys mv hcpy_7.png membrane_plane_stress_xx.png
91
92 ds -3 e 2
93 plot fv all
94 max 12.5
95 min -1.0
96 sys sleep 1
97 hcpy png
98 sys mv hcpy_8.png membrane_plane_stress_yy.png
99
100 sys montage membrane_plane_stress_xx.png membrane_plane_stress_yy.png -
˓→tile 2x1 -geometry +0+0 membrane_plane_stress_xxyy.png
101
102 ds -3 e 7
103 plot fv all
104 max 12.5
105 sys sleep 1
106 hcpy png
107 sys mv hcpy_9.png membrane_plane_stress_m.png
108
109 ds -2 e 1
110 plot fv all
111 max 1.55e-3
112 min -1e-5
113 sys sleep 1
114 hcpy png
115 sys mv hcpy_10.png membrane_plane_strain_xx.png
116

117 ds -2 e 2
118 plot fv all
119 max 2e-3
120 min -7e-5
121 sys sleep 1
122 hcpy png
123 sys mv hcpy_11.png membrane_plane_strain_yy.png
124
125 sys montage membrane_plane_strain_xx.png membrane_plane_strain_yy.png -
˓→tile 2x1 -geometry +0+0 membrane_plane_strain_xxyy.png
126

127 ds -2 e 7
128 plot fv all
129 max 1.75e-3
130 sys sleep 1
131 hcpy png
132 sys mv hcpy_12.png membrane_plane_strain_m.png
133
(continues on next page)

146 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


134 sys montage membrane_plane_strain_m.png membrane_plane_stress_m.png -tile
˓→2x1 -geometry +0+0 membrane_plane_ss_m.png
135

136
137 # time graphs
138 seta frex n 842
139 graph frex time DISP D3
140 sys mv graph_0.ps membrane_plane_displacement_frex.eps
141 graph frex time STRESS SXX
142 sys mv graph_1.ps membrane_plane_stress_xx_frex.eps
143 graph frex time STRESS SYY
144 sys mv graph_2.ps membrane_plane_stress_yy_frex.eps
145
146 sys ps2pdf membrane_plane_stress_xx_frex.eps
147 sys ps2pdf membrane_plane_stress_yy_frex.eps
148 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→stress_xxyy_frex.pdf membrane_plane_stress_xx_frex.pdf membrane_plane_
˓→stress_yy_frex.pdf
149
150 graph frex time STRESS Mises
151 sys mv graph_3.ps membrane_plane_stress_mises_frex.eps
152 graph frex time TOSTRAIN EXX
153 sys mv graph_4.ps membrane_plane_strain_xx_frex.eps
154 graph frex time TOSTRAIN EYY
155 sys mv graph_5.ps membrane_plane_strain_yy_frex.eps
156

157 sys ps2pdf membrane_plane_strain_xx_frex.eps


158 sys ps2pdf membrane_plane_strain_yy_frex.eps
159 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→strain_xxyy_frex.pdf membrane_plane_strain_xx_frex.pdf membrane_plane_
˓→strain_yy_frex.pdf
160

161 graph frex time TOSTRAIN Mises


162 sys mv graph_6.ps membrane_plane_strain_mises_frex.eps
163
164 sys ps2pdf membrane_plane_stress_mises_frex.eps
165 sys ps2pdf membrane_plane_strain_mises_frex.eps
166 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_se_
˓→frex.pdf membrane_plane_stress_mises_frex.pdf membrane_plane_strain_
˓→mises_frex.pdf
167
168 seta pin n 536
169 graph pin time STRESS SXX
170 sys mv graph_7.ps membrane_plane_stress_xx_pin.eps
171 graph pin time STRESS SYY
172 sys mv graph_8.ps membrane_plane_stress_yy_pin.eps
173
174 sys ps2pdf membrane_plane_stress_xx_pin.eps
175 sys ps2pdf membrane_plane_stress_yy_pin.eps
176 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→stress_xxyy_pin.pdf membrane_plane_stress_xx_pin.pdf membrane_plane_
˓→stress_yy_pin.pdf
177
178 graph pin time STRESS Mises
179 sys mv graph_9.ps membrane_plane_stress_mises_pin.eps
180 graph pin time TOSTRAIN EXX
(continues on next page)

8.6. Plane membrane 147


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


181 sys mv graph_10.ps membrane_plane_strain_xx_pin.eps
182 graph pin time TOSTRAIN EYY
183 sys mv graph_11.ps membrane_plane_strain_yy_pin.eps
184
185 sys ps2pdf membrane_plane_strain_xx_pin.eps
186 sys ps2pdf membrane_plane_strain_yy_pin.eps
187 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→strain_xxyy_pin.pdf membrane_plane_strain_xx_pin.pdf membrane_plane_
˓→strain_yy_pin.pdf

188
189 graph pin time TOSTRAIN Mises
190 sys mv graph_12.ps membrane_plane_strain_mises_pin.eps
191
192 sys ps2pdf membrane_plane_stress_mises_mid.eps
193 sys ps2pdf membrane_plane_strain_mises_mid.eps
194 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_se_
˓→mid.pdf membrane_plane_stress_mises_mid.pdf membrane_plane_strain_mises_
˓→mid.pdf
195
196 seta mid n 611
197 graph mid time STRESS SXX
198 sys mv graph_13.ps membrane_plane_stress_xx_mid.eps
199 graph mid time STRESS SYY
200 sys mv graph_14.ps membrane_plane_stress_yy_mid.eps
201
202 sys ps2pdf membrane_plane_stress_xx_mid.eps
203 sys ps2pdf membrane_plane_stress_yy_mid.eps
204 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→stress_xxyy_mid.pdf membrane_plane_stress_xx_mid.pdf membrane_plane_
˓→stress_yy_mid.pdf
205
206 graph mid time STRESS Mises
207 sys mv graph_15.ps membrane_plane_stress_mises_mid.eps
208 graph mid time TOSTRAIN EXX
209 sys mv graph_16.ps membrane_plane_strain_xx_mid.eps
210 graph mid time TOSTRAIN EYY
211 sys mv graph_17.ps membrane_plane_strain_yy_mid.eps
212

213 sys ps2pdf membrane_plane_strain_xx_mid.eps


214 sys ps2pdf membrane_plane_strain_yy_mid.eps
215 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→strain_xxyy_mid.pdf membrane_plane_strain_xx_mid.pdf membrane_plane_
˓→strain_yy_mid.pdf
216

217 graph mid time TOSTRAIN Mises


218 sys mv graph_18.ps membrane_plane_strain_mises_mid.eps
219
220 sys ps2pdf membrane_plane_stress_mises_pin.eps
221 sys ps2pdf membrane_plane_strain_mises_pin.eps
222 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_se_
˓→pin.pdf membrane_plane_stress_mises_pin.pdf membrane_plane_strain_mises_
˓→pin.pdf
223
224
225 # switch back to the deformed shape
226 rot -z
(continues on next page)

148 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


227 rot u -60
228 rot c -45
229 view disp
230 ds -4 e 4
231 plot fv all
232
233
234 # exit the program
235 # quit

Code block 8.25: Extract of the nodes of the mesh in Calculix


format of the plane membrane.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,5.000000000000e+03,0.000000000000e+00,0.000000000000e+00
4 3,5.000000000000e+03,5.000000000000e+03,0.000000000000e+00
5 4,0.000000000000e+00,5.000000000000e+03,0.000000000000e+00
6 5,4.999999999997e+02,0.000000000000e+00,0.000000000000e+00
7 6,9.999999999989e+02,0.000000000000e+00,0.000000000000e+00
8 7,1.499999999999e+03,0.000000000000e+00,0.000000000000e+00
9 8,1.999999999999e+03,0.000000000000e+00,0.000000000000e+00
10 9,2.499999999997e+03,0.000000000000e+00,0.000000000000e+00
11 10,2.999999999999e+03,0.000000000000e+00,0.000000000000e+00
12 11,3.500000000001e+03,0.000000000000e+00,0.000000000000e+00
13 12,4.000000000004e+03,0.000000000000e+00,0.000000000000e+00
14 13,4.500000000002e+03,0.000000000000e+00,0.000000000000e+00
15 14,2.499999999998e+02,0.000000000000e+00,0.000000000000e+00
16 15,7.499999999994e+02,0.000000000000e+00,0.000000000000e+00
17 16,1.249999999999e+03,0.000000000000e+00,0.000000000000e+00
18 17,1.749999999999e+03,0.000000000000e+00,0.000000000000e+00
19 18,2.249999999998e+03,0.000000000000e+00,0.000000000000e+00
20 19,2.749999999998e+03,0.000000000000e+00,0.000000000000e+00
21 20,3.250000000000e+03,0.000000000000e+00,0.000000000000e+00

Code block 8.26: Extract of the elements of the mesh in Cal-


culix format of the plane membrane.
1 *ELEMENT, TYPE=S6, ELSET=Eall
2 3015, 89, 150, 121, 184, 185, 186
3 3016, 91, 123, 157, 187, 188, 189
4 3017, 82, 143, 142, 190, 191, 192
5 3018, 81, 130, 132, 193, 194, 195
6 3019, 95, 126, 128, 196, 197, 198
7 3020, 89, 121, 165, 186, 199, 200
8 3021, 91, 166, 123, 201, 202, 187
9 3022, 82, 142, 176, 192, 203, 204
10 3023, 81, 177, 130, 205, 206, 193
11 3024, 62, 63, 159, 72, 207, 208
12 3025, 95, 128, 169, 198, 209, 210
13 3026, 85, 139, 141, 211, 212, 213
14 3027, 86, 128, 129, 214, 215, 216
15 3028, 62, 159, 179, 208, 217, 218
16 3029, 86, 129, 130, 216, 219, 220
(continues on next page)

8.6. Plane membrane 149


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


17 3030, 85, 142, 139, 221, 222, 211
18 3031, 123, 167, 157, 223, 224, 188
19 3032, 121, 150, 168, 185, 225, 226
20 3033, 95, 162, 126, 227, 228, 196
21 3034, 123, 166, 124, 202, 229, 230
22 3035, 120, 165, 121, 231, 199, 232

8.6.3 Solution

The solution deck written in Calculix imposes, after having defined the material properties, the
boundary conditions of the pinned membrane on four edges.

Code block 8.27: Solution deck in Calculix for the plane


membrane.
1 ** Include the mesh produced by gmsh.
2 *INCLUDE, INPUT=all.msh
3
4 ** Include the physical entities produced by the .fbd file.
5 *INCLUDE, INPUT=memb.nam
6 *INCLUDE, INPUT=cables.nam
7
8 ** Simple isotropic elastic material for the membrane.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12

13 ** Define the thickness for the membrane and assign the material.
14 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
15 2
16
17 ** Boundary conditions to be applied to the infinitely rigid edges.
18 *BOUNDARY
19 Ncables, 1, 3
20
21 ** Static nonlinear step for the analysis: request a fixed time increment,
22 ** apply the distributed load and retrieve nodal displacements and
23 ** reaction forces, and element stresses and strains.
24 *STEP, NLGEOM
25 *STATIC, SOLVER=SPOOLES
26 1.0e-6, 1.0, , 0.05
27 * DLOAD
28 Ememb, P, -0.001
29 * NODE FILE
30 U, RF
31 *EL FILE
32 S, E
33 *END STEP

150 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.28: Bash script to start Calculix automatically


for the plane membrane.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-plane.fbd

8.6.4 Post-processing

The post-processing is automated using cgx to extract from the solution file the contour plots
of the displacements (magnitude, x and y-direction), stresses and strains (x and y-direction and
Mises). We focus our attenion also on the time graphs (i.e. load multiplier) which are drawn
for three significant points:
1. mid point of the membrane representing the point of maximum displacement.
2. pin point for the analysis of a support.
3. mid point of an edge which is usually subject to the maximum stress.

8.40: Total displacements of plane membrane.

8.6. Plane membrane 151


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.41: Displacements in the x and y-direction of the plane membrane.

8.42: Normal stresses in the x and y-direction of the plane membrane.

8.43: Normal strains in the x and y-direction of the plane membrane.

152 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.44: Von-Mises stresses and strains of the plane membrane.

8.6.5 Dlubal comparison

The same example has been developed in the commercial software Dlubal to test the three quan-
tities of interest: displacements, stresses and strains. The results are reported in the attached
figures.

8.6.6 Conclusions

As far as the vertical displacements are concerned, the behaviour displayed by the membrane is
strongly nonlinear in the initial phase, where the convergence of each step is difficult due to the
lack of pretensioning. After the load multiplier reaches the value of 0.3, the membrane regains
sufficient stiffening to substain additional loading without excessive further deformation and
the behaviour becomes almost linear.
As for the stresses, the stress in the coordinate directions for the center and mid points are
slightly nonlinear for all the analysis, differently from the trend of displacements, where the
initial contribution deviates strongly from linearity.
An important remark for the stresses in the support is the initial tensioning of the membrane
in the local zone, which however inverts its trend after a load multiplier equal to 0.10. The
subsequent minor compression of the membrane can be explained considering the same case
for pinned plate on four edges. This behaviour disappears, as shown later, when the structure
is pre-processed by the form-finding procedure.
Finally, the Von-Mises stresses present a similar graph with respect to the coordinate stresses,
but the nonlinearity is accentuated.

8.6. Plane membrane 153


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1
0.9
Node=842

0.8
0.7
Values at Nodes (membrane-plane.fbd)

0.6
Time
0.5
0.4
0.3
0.2
0.1
0
0

-10

-20

-30

-40

-50

-60

-70

-80

-90

-100

D3

8.45: Maximum vertical displacement of the plane membrane.

154 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


12
Node=842

10

6
SXX

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


12
Node=842

10

6
SYY

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.46: Normal stresses in the x and y-direction of the center point of the plane membrane.

8.6. Plane membrane 155


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


14
Node=611

12

10

8
SXX

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


5
Node=611

4.5

3.5

2.5
SYY

1.5

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.47: Normal stresses in the x and y-direction of the mid-point of the plane membrane.

156 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


0.15
Node=536

0.1

0.05
SXX

-0.05

-0.1
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


0.12
Node=536

0.1

0.08

0.06

0.04

0.02
SYY

-0.02

-0.04

-0.06

-0.08
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.48: Normal stresses in the x and y-direction of the pin of the plane membrane.

8.6. Plane membrane 157


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


0.0009
Node=842

0.0008

0.0007

0.0006

0.0005
EXX

0.0004

0.0003

0.0002

0.0001

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


0.0009
Node=842

0.0008

0.0007

0.0006

0.0005
EYY

0.0004

0.0003

0.0002

0.0001

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.49: Normal strains in the x and y-direction of the center point of the plane membrane.

158 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


0.0014
Node=611

0.0012

0.001

0.0008
EXX

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


1x10-6
Node=611

-1x10-6

-2x10-6

-3x10-6
EYY

-4x10-6

-5x10-6

-6x10-6

-7x10-6

-8x10-6
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.50: Normal strains in the x and y-direction of the mid-point of the plane membrane.

8.6. Plane membrane 159


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


5x10-6
Node=536

-5x10-6

-1x10-5
EXX

-1.5x10-5

-5
-2x10

-2.5x10-5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


5x10-6
Node=536

-5x10-6
EYY

-1x10-5

-1.5x10-5

-2x10-5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.51: Normal strains in the x and y-direction of the pin of the plane membrane.

160 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


12
Node=842

10

8
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


0.0014
Node=842

0.0012

0.001

0.0008
Mises

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.52: Von-Mises stresses and strains of the center point of the plane membrane.

8.6. Plane membrane 161


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


12
Node=611

10

8
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


0.0014
Node=611

0.0012

0.001

0.0008
Mises

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.53: Von-Mises stresses and strains of the mid-point of the plane membrane.

162 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane.fbd)


1.6
Node=536

1.4

1.2

1
Mises

0.8

0.6

0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane.fbd)


0.0002
Node=536

0.00018

0.00016

0.00014

0.00012
Mises

0.0001

8x10-5

6x10-5

4x10-5

2x10-5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.54: Von-Mises stresses and strains of the pin of the plane membrane.

8.6. Plane membrane 163


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.55: Check of the displacements and the 𝜎x of the plane membrane.

164 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.56: Check of 𝜎y and the 𝜎mises of the plane membrane.

8.6. Plane membrane 165


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.57: Check of 𝜀x and the 𝜀y of the plane membrane.

166 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.58: Check of 𝜀mises of the plane membrane.

8.6. Plane membrane 167


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.7 Plane orthotropic membrane

8.7.1 Intoduction

The logical conseguence of the previous analysis is to improve the model in order to better
represent a real case. In fact, as described in chapter 1.2, the memebrane presents a typical
orthotropic mechanical behaviour.
The analysis follows the same principles adopted for the plane membrane, to which an extensive
comparison is drawn in the conclusion. The only modification is the elastic modulus in the y-
direction is reduced to 4 · 103 𝑀 𝑃 𝑎 and the Poisson’s ratio accordingly to 0.2.

8.7.2 Pre-processing

The actual mesh is created with open-source software gmsh and imported in the Calculix ap-
plication cgx for the pre-processing; at the same time, the solution and the post-processing is
conducted with the reported bash-like script with .fbd extension.

Code block 8.29: Gmsh script to produce the mesh of the


orthotropic membrane.
1 // Characteristic length of the triangular mesh to be created on the
2 // membrane.
3 lc = 500.0;
4
5 // Length of the edge of the square membrane.
6 l = 5000.0;
7
8 // Geometrical points defining the pins where the membrane is anchored.
9 Point(1) = {0, 0, 0, lc};
10 Point(2) = {l, 0, 0, lc};
11 Point(3) = {l, l, 0, lc};
12 Point(4) = {0, l, 0, lc};
13
14 // Geometrical lines defining the edges or boundaries of the membrane.
15 Line(1) = {1, 2};
16 Line(2) = {2, 3};
17 Line(3) = {3, 4};
18 Line(4) = {4, 1};
19
20 // Line loop defining the edges which enclose the membrane.
21 Line Loop(1) = {1, 2, 3, 4};
22
23 // Geometrical surface identifying the membrane.
24 Surface(1) = {1};
25
26 // Physical line representing the edges, as though they were infinitely
27 // rigid cables.
28 Physical Line("cables", 200) = {1, 2, 3, 4};
29
30 // Physical surface representing the membrane which will be meshed.
31 Physical Surface("memb", 300) = {1};
(continues on next page)

168 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


32
33 // Choose a frontal algorithm for the membrane to increase the
34 // regularity of the mesh.
35 Mesh.Algorithm = 6;
36
37 // Mesh first order for faster convergence of the nonlinear iterative
38 // sulution process.
39 Mesh.ElementOrder = 2;
40

41 // Send to the compatible Abaqus format also the node sets.


42 Mesh.SaveGroupsOfNodes = 1;
43
44 // Mesh just 2D; we do not have 3D elements in the model.
45 Mesh 2;
46

47 // Save the mesh in gmsh format for inspection.


48 Save "membrane_plane_orthotropy.msh";
49
50 // Save the mesh in Abaqus format for the analysis in Abaqus.
51 Mesh.Format = 39;
52 Save "membrane_plane_orthotropy_gmsh.inp";

Code block 8.30: Calculix pre-post processing file for the


analysis of the orthotropic membrane.
1 # mesh with gmsh.
2 sys gmsh membrane_plane_orthotropy.geo -
3
4 # change element type since gmsh meshes directly with CPS6.
5 sys sed -i "s/CPS6/S6/g" membrane_plane_orthotropy_gmsh.inp
6
7 # read the mesh from gmsh.
8 read membrane_plane_orthotropy_gmsh.inp
9
10 # save an image of the filled geometry.
11 view fill
12 rot z
13 hcpy png
14 sys sleep 1
15 sys mv hcpy_1.png membrane_plane_orthotropy_mesh_fill.png
16

17 # save an image of the mesh.


18 view line
19 rot z
20 hcpy png
21 sys sleep 1
22 sys mv hcpy_2.png membrane_plane_orthotropy_mesh_line.png
23
24 # remove the cable elements which being fixed are useless.
25 zap +T3D2
26 view line
27
28 # save the mesh and groups.
29 send all abq
30 send memb abq names
(continues on next page)

8.7. Plane orthotropic membrane 169


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.59: Mesh produced by gmsh of the plane orthotropic membrane.

170 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


31 send cables abq names
32 send freccia abq names
33

34 # solve the input file with ccx.


35 sys ccx_2.14 membrane_plane_orthotropy
36 view fill
37
38 # read the file with the results for postprocessing.
39 read membrane_plane_orthotropy.frd
40
41
42 # contour plots
43 rot -z
44 rot u -60
45 rot c -45
46 view disp
47 scal d 20
48 ds -4 e 4
49 plot fv all
50 max 110
51 sys sleep 1
52 hcpy png
53 sys mv hcpy_3.png membrane_plane_orthotropy_displacement_magnitude_3d.png
54
55 view disp off
56 rot z
57 ds -4 e 1
58 plot fv all
59 max 1.2
60 min -1.2
61 sys sleep 1
62 hcpy png
63 sys mv hcpy_4.png membrane_plane_orthotropy_displacement_x.png
64
65 ds -4 e 2
66 plot fv all
67 min -1.4
68 max 1.4
69 sys sleep 1
70 hcpy png
71 sys mv hcpy_5.png membrane_plane_orthotropy_displacement_y.png
72
73 sys montage membrane_plane_orthotropy_displacement_x.png membrane_plane_
˓→orthotropy_displacement_y.png -tile 2x1 -geometry +0+0 membrane_plane_

˓→orthotropy_displacement_xy.png
74
75 ds -4 e 3
76 plot fv all
77 max 0.0
78 min -110
79 sys sleep 1
80 hcpy png
81 sys mv hcpy_6.png membrane_plane_orthotropy_displacement_z.png
82
83 ds -3 e 1
84 plot fv all
(continues on next page)

8.7. Plane orthotropic membrane 171


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


85 max 13.5
86 min -1.3
87 sys sleep 1
88 hcpy png
89 sys mv hcpy_7.png membrane_plane_orthotropy_stress_xx.png
90
91 ds -3 e 2
92 plot fv all
93 max 12.5
94 min -1.0
95 sys sleep 1
96 hcpy png
97 sys mv hcpy_8.png membrane_plane_orthotropy_stress_yy.png
98
99 sys montage membrane_plane_orthotropy_stress_xx.png membrane_plane_
˓→orthotropy_stress_yy.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→orthotropy_stress_xxyy.png
100
101 ds -3 e 7
102 plot fv all
103 max 12.5
104 sys sleep 1
105 hcpy png
106 sys mv hcpy_9.png membrane_plane_orthotropy_stress_m.png
107
108 ds -2 e 1
109 plot fv all
110 max 1.55e-3
111 min -1e-5
112 sys sleep 1
113 hcpy png
114 sys mv hcpy_10.png membrane_plane_orthotropy_strain_xx.png
115
116 ds -2 e 2
117 plot fv all
118 max 2e-3
119 min -7e-5
120 sys sleep 1
121 hcpy png
122 sys mv hcpy_11.png membrane_plane_orthotropy_strain_yy.png
123
124 sys montage membrane_plane_orthotropy_strain_xx.png membrane_plane_
˓→orthotropy_strain_yy.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→orthotropy_strain_xxyy.png

125
126 ds -2 e 7
127 plot fv all
128 max 1.75e-3
129 sys sleep 1
130 hcpy png
131 sys mv hcpy_12.png membrane_plane_orthotropy_strain_m.png
132
133 sys montage membrane_plane_orthotropy_strain_m.png membrane_plane_
˓→orthotropy_stress_m.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→orthotropy_ss_m.png

134
(continues on next page)

172 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


135 # time graphs
136 seta frex n 842
137 graph frex time DISP D3
138 sys mv graph_0.ps membrane_plane_orthotropy_displacement_frex.eps
139 graph frex time STRESS SXX
140 sys mv graph_1.ps membrane_plane_orthotropy_stress_xx_frex.eps
141 graph frex time STRESS SYY
142 sys mv graph_2.ps membrane_plane_orthotropy_stress_yy_frex.eps
143

144 sys ps2pdf membrane_plane_orthotropy_stress_xx_frex.eps


145 sys ps2pdf membrane_plane_orthotropy_stress_yy_frex.eps
146 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_stress_xxyy_frex.pdf membrane_plane_orthotropy_stress_xx_frex.
˓→pdf membrane_plane_orthotropy_stress_yy_frex.pdf
147

148 graph frex time STRESS Mises


149 sys mv graph_3.ps membrane_plane_orthotropy_stress_mises_frex.eps
150 graph frex time TOSTRAIN EXX
151 sys mv graph_4.ps membrane_plane_orthotropy_strain_xx_frex.eps
152 graph frex time TOSTRAIN EYY
153 sys mv graph_5.ps membrane_plane_orthotropy_strain_yy_frex.eps
154
155 sys ps2pdf membrane_plane_orthotropy_strain_xx_frex.eps
156 sys ps2pdf membrane_plane_orthotropy_strain_yy_frex.eps
157 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_strain_xxyy_frex.pdf membrane_plane_orthotropy_strain_xx_frex.

˓→pdf membrane_plane_orthotropy_strain_yy_frex.pdf
158
159 graph frex time TOSTRAIN Mises
160 sys mv graph_6.ps membrane_plane_orthotropy_strain_mises_frex.eps
161
162 sys ps2pdf membrane_plane_orthotropy_stress_mises_frex.eps
163 sys ps2pdf membrane_plane_orthotropy_strain_mises_frex.eps
164 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_se_frex.pdf membrane_plane_orthotropy_stress_mises_frex.pdf
˓→membrane_plane_orthotropy_strain_mises_frex.pdf
165
166 seta pin n 536
167 graph pin time STRESS SXX
168 sys mv graph_7.ps membrane_plane_orthotropy_stress_xx_pin.eps
169 graph pin time STRESS SYY
170 sys mv graph_8.ps membrane_plane_orthotropy_stress_yy_pin.eps
171
172 sys ps2pdf membrane_plane_orthotropy_stress_xx_pin.eps
173 sys ps2pdf membrane_plane_orthotropy_stress_yy_pin.eps
174 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_stress_xxyy_pin.pdf membrane_plane_orthotropy_stress_xx_pin.
˓→pdf membrane_plane_orthotropy_stress_yy_pin.pdf
175
176 graph pin time STRESS Mises
177 sys mv graph_9.ps membrane_plane_orthotropy_stress_mises_pin.eps
178 graph pin time TOSTRAIN EXX
179 sys mv graph_10.ps membrane_plane_orthotropy_strain_xx_pin.eps
180 graph pin time TOSTRAIN EYY
181 sys mv graph_11.ps membrane_plane_orthotropy_strain_yy_pin.eps
182
(continues on next page)

8.7. Plane orthotropic membrane 173


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


183 sys ps2pdf membrane_plane_orthotropy_strain_xx_pin.eps
184 sys ps2pdf membrane_plane_orthotropy_strain_yy_pin.eps
185 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_strain_xxyy_pin.pdf membrane_plane_orthotropy_strain_xx_pin.
˓→pdf membrane_plane_orthotropy_strain_yy_pin.pdf
186
187 graph pin time TOSTRAIN Mises
188 sys mv graph_12.ps membrane_plane_orthotropy_strain_mises_pin.eps
189

190 sys ps2pdf membrane_plane_orthotropy_stress_mises_mid.eps


191 sys ps2pdf membrane_plane_orthotropy_strain_mises_mid.eps
192 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_se_mid.pdf membrane_plane_orthotropy_stress_mises_mid.pdf
˓→membrane_plane_orthotropy_strain_mises_mid.pdf
193

194 seta mid n 611


195 graph mid time STRESS SXX
196 sys mv graph_13.ps membrane_plane_orthotropy_stress_xx_mid.eps
197 graph mid time STRESS SYY
198 sys mv graph_14.ps membrane_plane_orthotropy_stress_yy_mid.eps
199

200 sys ps2pdf membrane_plane_orthotropy_stress_xx_mid.eps


201 sys ps2pdf membrane_plane_orthotropy_stress_yy_mid.eps
202 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_stress_xxyy_mid.pdf membrane_plane_orthotropy_stress_xx_mid.
˓→pdf membrane_plane_orthotropy_stress_yy_mid.pdf
203

204 graph mid time STRESS Mises


205 sys mv graph_15.ps membrane_plane_orthotropy_stress_mises_mid.eps
206 graph mid time TOSTRAIN EXX
207 sys mv graph_16.ps membrane_plane_orthotropy_strain_xx_mid.eps
208 graph mid time TOSTRAIN EYY
209 sys mv graph_17.ps membrane_plane_orthotropy_strain_yy_mid.eps
210
211 sys ps2pdf membrane_plane_orthotropy_strain_xx_mid.eps
212 sys ps2pdf membrane_plane_orthotropy_strain_yy_mid.eps
213 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_strain_xxyy_mid.pdf membrane_plane_orthotropy_strain_xx_mid.

˓→pdf membrane_plane_orthotropy_strain_yy_mid.pdf
214
215 graph mid time TOSTRAIN Mises
216 sys mv graph_18.ps membrane_plane_orthotropy_strain_mises_mid.eps
217
218 sys ps2pdf membrane_plane_orthotropy_stress_mises_pin.eps
219 sys ps2pdf membrane_plane_orthotropy_strain_mises_pin.eps
220 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→orthotropy_se_pin.pdf membrane_plane_orthotropy_stress_mises_pin.pdf
˓→membrane_plane_orthotropy_strain_mises_pin.pdf
221
222
223 # switch back to the deformed shape
224 rot -z
225 rot u -60
226 rot c -45
227 view disp
228 ds -4 e 4
(continues on next page)

174 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


229 plot fv all
230
231

232 # exit the program


233 # quit

Code block 8.31: Extract of the nodes of the mesh in Calculix


format of the orthotropic membrane.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,5.000000000000e+03,0.000000000000e+00,0.000000000000e+00
4 3,5.000000000000e+03,5.000000000000e+03,0.000000000000e+00
5 4,0.000000000000e+00,5.000000000000e+03,0.000000000000e+00
6 5,4.999999999997e+02,0.000000000000e+00,0.000000000000e+00
7 6,9.999999999989e+02,0.000000000000e+00,0.000000000000e+00
8 7,1.499999999999e+03,0.000000000000e+00,0.000000000000e+00
9 8,1.999999999999e+03,0.000000000000e+00,0.000000000000e+00
10 9,2.499999999997e+03,0.000000000000e+00,0.000000000000e+00
11 10,2.999999999999e+03,0.000000000000e+00,0.000000000000e+00
12 11,3.500000000001e+03,0.000000000000e+00,0.000000000000e+00
13 12,4.000000000004e+03,0.000000000000e+00,0.000000000000e+00
14 13,4.500000000002e+03,0.000000000000e+00,0.000000000000e+00
15 14,2.499999999998e+02,0.000000000000e+00,0.000000000000e+00
16 15,7.499999999994e+02,0.000000000000e+00,0.000000000000e+00
17 16,1.249999999999e+03,0.000000000000e+00,0.000000000000e+00
18 17,1.749999999999e+03,0.000000000000e+00,0.000000000000e+00
19 18,2.249999999998e+03,0.000000000000e+00,0.000000000000e+00
20 19,2.749999999998e+03,0.000000000000e+00,0.000000000000e+00
21 20,3.250000000000e+03,0.000000000000e+00,0.000000000000e+00

Code block 8.32: Extract of the elements of the mesh in Cal-


culix format of the orthotropic membrane.
1 *ELEMENT, TYPE=S6, ELSET=Eall
2 3015, 89, 150, 121, 184, 185, 186
3 3016, 91, 123, 157, 187, 188, 189
4 3017, 82, 143, 142, 190, 191, 192
5 3018, 81, 130, 132, 193, 194, 195
6 3019, 95, 126, 128, 196, 197, 198
7 3020, 89, 121, 165, 186, 199, 200
8 3021, 91, 166, 123, 201, 202, 187
9 3022, 82, 142, 176, 192, 203, 204
10 3023, 81, 177, 130, 205, 206, 193
11 3024, 62, 63, 159, 72, 207, 208
12 3025, 95, 128, 169, 198, 209, 210
13 3026, 85, 139, 141, 211, 212, 213
14 3027, 86, 128, 129, 214, 215, 216
15 3028, 62, 159, 179, 208, 217, 218
16 3029, 86, 129, 130, 216, 219, 220
17 3030, 85, 142, 139, 221, 222, 211
18 3031, 123, 167, 157, 223, 224, 188
19 3032, 121, 150, 168, 185, 225, 226
20 3033, 95, 162, 126, 227, 228, 196
(continues on next page)

8.7. Plane orthotropic membrane 175


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


21 3034, 123, 166, 124, 202, 229, 230
22 3035, 120, 165, 121, 231, 199, 232

8.7.3 Solution

The orthotropic paramters are specified in the deck file in the section concerning the elastic
properties of the membrane. The deck then follows as usual instructing the nonlinear Newton
solver for the iterative process.

Code block 8.33: Calculix deck for the solution of the or-
thotropic membrane.
1 ** Include the mesh produced by gmsh.
2 *INCLUDE, INPUT=all.msh
3
4 ** Include the physical entities produced by the .fbd file.
5 *INCLUDE, INPUT=memb.nam
6 *INCLUDE, INPUT=cables.nam
7
8 ** Orthotropic elastic material for the membrane.
9 *MATERIAL, NAME=membrorto
10 *ELASTIC, TYPE=ENGINEERING CONSTANTS
11 8e3, 4e3, 8e3, 0.4, 0.2, 0.4, 2.9e3, 2.9e3
12 2.9e3
13
14 ** Define the thickness for the membrane and assign the material.
15 *SHELL SECTION, ELSET=Ememb, MATERIAL=membrorto
16 2
17

18 ** Boundary conditions to be applied to the infinitely rigid edges.


19 *BOUNDARY
20 Ncables, 1, 3
21
22 ** Static nonlinear step for the analysis: request a fixed time increment
23 ** apply the distributed load and retrieve nodal displacements and
24 ** reaction force, and element stresses and strains.
25 *STEP, NLGEOM
26 *STATIC, SOLVER=SPOOLES
27 1.0e-6, 1.0, , 0.05
28 *DLOAD
29 Ememb, P, -0.001
30 *NODE FILE
31 U, RF
32 *EL FILE
33 S, E
34 *END STEP

Code block 8.34: Bash script to start Calculix from the com-
mand line for the orthotropic membrane.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-plane-orthotropy.fbd

176 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.7.4 Post-processing

The post-processing is modified to force the contour plots to report the same maximum and
minimum scale of the previous example in order to draw a thouroughly comparison with the
linear isotropic case.

8.60: Total displacements of the orthotropic plane membrane.

8.7.5 Dlubal comparison

As benchmark, the same model improvement has been introduced in the commercial software
Dlubal, to verify accuracy of the results in terms of displacements (magnitude), stresses and
strains (x and y-direction, Mises).

8.7.6 Conclusions

The most important conclusion coming from the analysis at hand is that the orthotropy does not
change the pattern of the displacements, stresses and strains, if the membrane is loaded out of

8.7. Plane orthotropic membrane 177


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.61: Displacements in the x and y-direction of the orthotropic plane membrane.

8.62: Normal stresses in the x and y-direction of plane orthotropic plane membrane.

8.63: Normal strains in the x and y-direction of the orthotropic plane membrane.

178 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.64: Von-Mises stresses and strains of the orthotropic plane membrane.

its plane. This behaviour is essentially different from the structural case of a plane membrane
loaded in its plane, where the orthotropy causes the stress pattern to differentiate in the principal
directions.
The orthotropy is mainly reflected in the value of the maximum and minimum attained vari-
ables for the three quantities of interest reported. The most significant deviation is for the
z-displacement, as shown by the time graphs in the previous paragraph.

8.7. Plane orthotropic membrane 179


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

1
0.9
Node=842

0.8
Values at Nodes (membrane-plane-orthotropy.fbd)

0.7
0.6
Time
0.5
0.4
0.3
0.2
0.1
0
0

-20

-40

-60

-80

-100

-120

D3

8.65: Maximum displacement of the orthotropic plane membrane.

180 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


12
Node=842

10

6
SXX

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


7
Node=842

4
SYY

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.66: Normal stresses in the x and y-direction of the center point of the orthotropic membrane.

8.7. Plane orthotropic membrane 181


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


14
Node=611

12

10

8
SXX

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


3
Node=611

2.5

1.5
SYY

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.67: Normal stresses in the x and y-direction of the mid-point of the orthotropic membrane.

182 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


0.1
Node=536

-0.1

-0.2

-0.3

-0.4
SXX

-0.5

-0.6

-0.7

-0.8

-0.9
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


0.05
Node=536

-0.05

-0.1

-0.15

-0.2
SYY

-0.25

-0.3

-0.35

-0.4

-0.45
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.68: Normal stresses in the x and y-direction of the pin of the orthotropic membrane.

8.7. Plane orthotropic membrane 183


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0012
Node=842

0.001

0.0008

0.0006
EXX

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0012
Node=842

0.001

0.0008

0.0006
EYY

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.69: Normal strains in the x and y-direction of the center-point of the orthotropic membrane.

184 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0016
Node=611

0.0014

0.0012

0.001

0.0008
EXX

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


1x10-6
Node=611

-1x10-6

-2x10-6

-3x10-6
EYY

-4x10-6

-5x10-6

-6
-6x10

-7x10-6
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.70: Normal strains in the x and y-direction of the mid-point of the orthotropic membrane.

8.7. Plane orthotropic membrane 185


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


1x10-5
Node=536

-1x10-5

-2x10-5

-3x10-5

-4x10-5
EXX

-5x10-5

-6x10-5

-7x10-5

-8x10-5

-9x10-5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


1x10-5
Node=536

-1x10-5

-2x10-5

-3x10-5

-4x10-5
EYY

-5x10-5

-6x10-5

-7x10-5

-8x10-5

-9x10-5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.71: Normal strains in the x and y-direction of the pin of the orthotropic membrane.

186 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


10
Node=842

6
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0014
Node=842

0.0012

0.001

0.0008
Mises

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.72: Von-Mises stresses and strains of the center point of the orthotropic membrane.

8.7. Plane orthotropic membrane 187


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


14
Node=611

12

10

8
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0014
Node=611

0.0012

0.001

0.0008
Mises

0.0006

0.0004

0.0002

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.73: Von-Mises stresses and strains of the mid-point of the orthotropic membrane.

188 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-orthotropy.fbd)


2.5
Node=536

1.5
Mises

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-plane-orthotropy.fbd)


0.0003
Node=536

0.00025

0.0002
Mises

0.00015

0.0001

5x10-5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

8.74: Von-Mises stresses and strains of the pin of the orthotropic membrane.

8.7. Plane orthotropic membrane 189


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.75: Check of the displacements and the 𝜎x of the plane membrane.

190 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.76: Check of 𝜎y and the 𝜎mises of the plane membrane.

8.7. Plane orthotropic membrane 191


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.77: Check of 𝜀x and the 𝜀y of the plane membrane.

192 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.78: Check of 𝜀mises of the plane membrane.

8.7. Plane orthotropic membrane 193


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.8 Plastic plane membrane

8.8.1 Introduction

We present here the same case of the plane membrane with distributed pin constraints on the
borders, changing the mechanical behaviour of the membrane to elastoplastic. The equivalent
plastic strains are assigned directly in the Calculix deck by defining a table linking the level of
stress to the Von Mises equivalent plastic strain.
The membrane is subject to a considerable load which extensively plasticizes it; the load is then
removed to observe the permanent plastic strains.

8.8.2 Pre-processing

The simple square membrane is generated with gmsh to produce both the geometrical entitiy
identifying the plastic membrane and the physical entities defining the borders representing the
infinitely rigid cables.

Code block 8.35: Gmsh script to produce the mesh for the
plastic plane membrane.
1 // Characteristic length of the triangular mesh to be created on the
2 // membrane.
3 lc = 500.0;
4
5 // Length of the edge of the square membrane.
6 l = 5000.0;
7
8 // Geometrical points defining the pins where the membrane is anchored.
9 Point(1) = {0, 0, 0, lc};
10 Point(2) = {l, 0, 0, lc};
11 Point(3) = {l, l, 0, lc};
12 Point(4) = {0, l, 0, lc};
13
14 // Geometrical lines defining the edges or boundaries of the membrane.
15 Line(1) = {1, 2};
16 Line(2) = {2, 3};
17 Line(3) = {3, 4};
18 Line(4) = {4, 1};
19
20 // Line loop defining the edges which enclose the membrane.
21 Line Loop(1) = {1, 2, 3, 4};
22
23 // Geometrical surface identifying the membrane.
24 Surface(1) = {1};
25
26 // Physical line representing the edges, as though they were infinitely
27 // rigid cables
28 Physical Line("cables", 200) = {1, 2, 3, 4};
29
30 // Physical surface representing the membrane which will be meshed.
31 Physical Surface("memb", 300) = {1};
(continues on next page)

194 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


32
33 // Choose a frontal algorithm for the membrane to increase the
34 // regularity of the mesh.
35 Mesh.Algorithm = 6;
36
37 // Mesh first order for faster convergence of the nonlinear iterative
38 // sulution process.
39 Mesh.ElementOrder = 2;
40

41 // Send to the compatible Abaqus format also the node sets.


42 Mesh.SaveGroupsOfNodes = 1;
43
44 // Mesh just 2D; we do not have 3D elements in the model.
45 Mesh 2;
46

47 // Save the mesh in gmsh format for inspection.


48 Save "membrane_plane_plasticity.msh";
49
50 // Save the mesh in Abaqus format for the analysis in Abaqus.
51 Mesh.Format = 39;
52 Save "membrane_plane_plasticity_gmsh.inp";

Code block 8.36: Calculix pre-post processing file for the


analysis workflow of the plane plastic membrane.
1 # mesh with gmsh.
2 sys gmsh membrane_plane_plasticity.geo -
3
4 # change element type since gmsh meshes directly with CPS6.
5 sys sed -i "s/CPS6/S6/g" membrane_plane_plasticity_gmsh.inp
6
7 # read the mesh from gmsh and load it in memory.
8 read membrane_plane_plasticity_gmsh.inp
9
10 # save an image of the filled geometry.
11 view fill
12 rot z
13 hcpy png
14 sys sleep 1
15 sys mv hcpy_1.png membrane_plane_plasticity_mesh_fill.png
16

17 # save an image of the mesh with a wireframe display.


18 view line
19 rot z
20 hcpy png
21 sys sleep 1
22 sys mv hcpy_2.png membrane_plane_plasticity_mesh_line.png
23
24 # remove the cable elements which being fixed are useless.
25 zap +T3D2
26 view line
27
28 # save the mesh and groups to file to be reused by ccx.
29 send all abq
30 send memb abq names
(continues on next page)

8.8. Plastic plane membrane 195


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.79: Mesh produced by gmsh of the plastic membrane.

196 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


31 send cables abq names
32 send freccia abq names
33

34 # solve the input file with ccx.


35 sys ccx_2.14 membrane_plane_plasticity
36 view fill
37
38 # read the file with the results for postprocessing.
39 read membrane_plane_plasticity.frd
40
41
42 # contour plots
43 rot -z
44 rot u -60
45 rot c -45
46 view disp
47 scal d 20
48 ds -5 e 4
49 plot fv all
50 sys sleep 1
51 hcpy png
52 sys mv hcpy_3.png membrane_plane_plasticity_displacement_magnitude_3d.png
53
54
55 view disp off
56 rot z
57 ds -5 e 1
58 plot fv all
59 sys sleep 1
60 hcpy png
61 sys mv hcpy_4.png membrane_plane_plasticity_displacement_x.png
62

63 ds -5 e 2
64 plot fv all
65 sys sleep 1
66 hcpy png
67 sys mv hcpy_5.png membrane_plane_plasticity_displacement_y.png
68

69 sys montage membrane_plane_plasticity_displacement_x.png membrane_plane_


˓→plasticity_displacement_y.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→plasticity_displacement_xy.png
70
71 ds -5 e 3
72 plot fv all
73 sys sleep 1
74 hcpy png
75 sys mv hcpy_6.png membrane_plane_plasticity_displacement_z.png
76
77 ds -4 e 1
78 plot fv all
79 sys sleep 1
80 hcpy png
81 sys mv hcpy_7.png membrane_plane_plasticity_stress_xx.png
82
83 ds -4 e 2
84 plot fv all
(continues on next page)

8.8. Plastic plane membrane 197


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


85 sys sleep 1
86 hcpy png
87 sys mv hcpy_8.png membrane_plane_plasticity_stress_yy.png
88
89 sys montage membrane_plane_plasticity_stress_xx.png membrane_plane_
˓→plasticity_stress_yy.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→plasticity_stress_xxyy.png
90
91 ds -4 e 7
92 plot fv all
93 sys sleep 1
94 hcpy png
95 sys mv hcpy_9.png membrane_plane_plasticity_stress_m.png
96
97 ds -3 e 1
98 plot fv all
99 sys sleep 1
100 hcpy png
101 sys mv hcpy_10.png membrane_plane_plasticity_strain_xx.png
102
103 ds -3 e 2
104 plot fv all
105 sys sleep 1
106 hcpy png
107 sys mv hcpy_11.png membrane_plane_plasticity_strain_yy.png
108

109 sys montage membrane_plane_plasticity_strain_xx.png membrane_plane_


˓→plasticity_strain_yy.png -tile 2x1 -geometry +0+0 membrane_plane_
˓→plasticity_strain_xxyy.png
110
111 ds -3 e 7
112 plot fv all
113 sys sleep 1
114 hcpy png
115 sys mv hcpy_12.png membrane_plane_plasticity_strain_m.png
116
117 sys montage membrane_plane_plasticity_strain_m.png membrane_plane_
˓→plasticity_stress_m.png -tile 2x1 -geometry +0+0 membrane_plane_

˓→plasticity_ss_m.png
118
119 ds -1 e 1
120 plot fv all
121 sys sleep 1
122 hcpy png
123 sys mv hcpy_13.png membrane_plane_plasticity_pe.png
124
125 # time graphs
126 seta frex n 842
127 graph frex time DISP D3
128 sys mv graph_0.ps membrane_plane_plasticity_displacement_frex.eps
129 graph frex time STRESS SXX
130 sys mv graph_1.ps membrane_plane_plasticity_stress_xx_frex.eps
131 graph frex time STRESS SYY
132 sys mv graph_2.ps membrane_plane_plasticity_stress_yy_frex.eps
133

134 sys ps2pdf membrane_plane_plasticity_stress_xx_frex.eps


(continues on next page)

198 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


135 sys ps2pdf membrane_plane_plasticity_stress_yy_frex.eps
136 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_stress_xxyy_frex.pdf membrane_plane_plasticity_stress_xx_frex.

˓→pdf membrane_plane_plasticity_stress_yy_frex.pdf
137
138 graph frex time STRESS Mises
139 sys mv graph_3.ps membrane_plane_plasticity_stress_mises_frex.eps
140 graph frex time TOSTRAIN EXX
141 sys mv graph_4.ps membrane_plane_plasticity_strain_xx_frex.eps
142 graph frex time TOSTRAIN EYY
143 sys mv graph_5.ps membrane_plane_plasticity_strain_yy_frex.eps
144
145 sys ps2pdf membrane_plane_plasticity_strain_xx_frex.eps
146 sys ps2pdf membrane_plane_plasticity_strain_yy_frex.eps
147 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_strain_xxyy_frex.pdf membrane_plane_plasticity_strain_xx_frex.
˓→pdf membrane_plane_plasticity_strain_yy_frex.pdf
148
149 graph frex time TOSTRAIN Mises
150 sys mv graph_6.ps membrane_plane_plasticity_strain_mises_frex.eps
151

152 sys ps2pdf membrane_plane_plasticity_stress_mises_frex.eps


153 sys ps2pdf membrane_plane_plasticity_strain_mises_frex.eps
154 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_se_frex.pdf membrane_plane_plasticity_stress_mises_frex.pdf
˓→membrane_plane_plasticity_strain_mises_frex.pdf
155

156 graph frex time PE PE


157 sys mv graph_7.ps membrane_plane_plasticity_strain_plastic_frex.eps
158
159 seta pin n 553
160 graph pin time STRESS SXX
161 sys mv graph_8.ps membrane_plane_plasticity_stress_xx_pin.eps
162 graph pin time STRESS SYY
163 sys mv graph_9.ps membrane_plane_plasticity_stress_yy_pin.eps
164
165 sys ps2pdf membrane_plane_plasticity_stress_xx_pin.eps
166 sys ps2pdf membrane_plane_plasticity_stress_yy_pin.eps
167 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_stress_xxyy_pin.pdf membrane_plane_plasticity_stress_xx_pin.
˓→pdf membrane_plane_plasticity_stress_yy_pin.pdf
168
169 graph pin time STRESS Mises
170 sys mv graph_10.ps membrane_plane_plasticity_stress_mises_pin.eps
171 graph pin time TOSTRAIN EXX
172 sys mv graph_11.ps membrane_plane_plasticity_strain_xx_pin.eps
173 graph pin time TOSTRAIN EYY
174 sys mv graph_12.ps membrane_plane_plasticity_strain_yy_pin.eps
175
176 sys ps2pdf membrane_plane_plasticity_strain_xx_pin.eps
177 sys ps2pdf membrane_plane_plasticity_strain_yy_pin.eps
178 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_strain_xxyy_pin.pdf membrane_plane_plasticity_strain_xx_pin.
˓→pdf membrane_plane_plasticity_strain_yy_pin.pdf
179
180 graph pin time TOSTRAIN Mises
(continues on next page)

8.8. Plastic plane membrane 199


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


181 sys mv graph_13.ps membrane_plane_plasticity_strain_mises_pin.eps
182
183 sys ps2pdf membrane_plane_plasticity_stress_mises_mid.eps
184 sys ps2pdf membrane_plane_plasticity_strain_mises_mid.eps
185 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_se_mid.pdf membrane_plane_plasticity_stress_mises_mid.pdf
˓→membrane_plane_plasticity_strain_mises_mid.pdf
186
187 graph pin time PE PE
188 sys mv graph_14.ps membrane_plane_plasticity_strain_plastic_pin.eps
189
190 seta mid n 611
191 graph mid time STRESS SXX
192 sys mv graph_15.ps membrane_plane_plasticity_stress_xx_mid.eps
193 graph mid time STRESS SYY
194 sys mv graph_16.ps membrane_plane_plasticity_stress_yy_mid.eps
195
196 sys ps2pdf membrane_plane_plasticity_stress_xx_mid.eps
197 sys ps2pdf membrane_plane_plasticity_stress_yy_mid.eps
198 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_stress_xxyy_mid.pdf membrane_plane_plasticity_stress_xx_mid.

˓→pdf membrane_plane_plasticity_stress_yy_mid.pdf
199
200 graph mid time STRESS Mises
201 sys mv graph_17.ps membrane_plane_plasticity_stress_mises_mid.eps
202 graph mid time TOSTRAIN EXX
203 sys mv graph_18.ps membrane_plane_plasticity_strain_xx_mid.eps
204 graph mid time TOSTRAIN EYY
205 sys mv graph_19.ps membrane_plane_plasticity_strain_yy_mid.eps
206
207 sys ps2pdf membrane_plane_plasticity_strain_xx_mid.eps
208 sys ps2pdf membrane_plane_plasticity_strain_yy_mid.eps
209 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_strain_xxyy_mid.pdf membrane_plane_plasticity_strain_xx_mid.
˓→pdf membrane_plane_plasticity_strain_yy_mid.pdf
210
211 graph mid time TOSTRAIN Mises
212 sys mv graph_20.ps membrane_plane_plasticity_strain_mises_mid.eps
213
214 sys ps2pdf membrane_plane_plasticity_stress_mises_pin.eps
215 sys ps2pdf membrane_plane_plasticity_strain_mises_pin.eps
216 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→plasticity_se_pin.pdf membrane_plane_plasticity_stress_mises_pin.pdf
˓→membrane_plane_plasticity_strain_mises_pin.pdf
217

218 graph mid time PE PE


219 sys mv graph_21.ps membrane_plane_plasticity_strain_plastic_mid.eps
220
221 # switch back to the deformed shape
222 rot -z
223 rot u -60
224 rot c -45
225 view disp
226 ds -5 e 4
227 plot fv all
228
(continues on next page)

200 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


229
230 # exit the program
231 # quit

Code block 8.37: Nodes of the mesh in Calculix format of


the plane plastic membrane.
1 *NODE, NSET=Nall
2 1,0.000000000000e+00,0.000000000000e+00,0.000000000000e+00
3 2,5.000000000000e+03,0.000000000000e+00,0.000000000000e+00
4 3,5.000000000000e+03,5.000000000000e+03,0.000000000000e+00
5 4,0.000000000000e+00,5.000000000000e+03,0.000000000000e+00
6 5,4.999999999997e+02,0.000000000000e+00,0.000000000000e+00
7 6,9.999999999989e+02,0.000000000000e+00,0.000000000000e+00
8 7,1.499999999999e+03,0.000000000000e+00,0.000000000000e+00
9 8,1.999999999999e+03,0.000000000000e+00,0.000000000000e+00
10 9,2.499999999997e+03,0.000000000000e+00,0.000000000000e+00
11 10,2.999999999999e+03,0.000000000000e+00,0.000000000000e+00
12 11,3.500000000001e+03,0.000000000000e+00,0.000000000000e+00
13 12,4.000000000004e+03,0.000000000000e+00,0.000000000000e+00
14 13,4.500000000002e+03,0.000000000000e+00,0.000000000000e+00
15 14,2.499999999998e+02,0.000000000000e+00,0.000000000000e+00
16 15,7.499999999994e+02,0.000000000000e+00,0.000000000000e+00
17 16,1.249999999999e+03,0.000000000000e+00,0.000000000000e+00
18 17,1.749999999999e+03,0.000000000000e+00,0.000000000000e+00
19 18,2.249999999998e+03,0.000000000000e+00,0.000000000000e+00
20 19,2.749999999998e+03,0.000000000000e+00,0.000000000000e+00
21 20,3.250000000000e+03,0.000000000000e+00,0.000000000000e+00

Code block 8.38: Membrane elements of the mesh in Cal-


culix format of the plane plastic membrane.
1 *ELEMENT, TYPE=S6, ELSET=Eall
2 3015, 89, 150, 121, 184, 185, 186
3 3016, 91, 123, 157, 187, 188, 189
4 3017, 82, 143, 142, 190, 191, 192
5 3018, 81, 130, 132, 193, 194, 195
6 3019, 95, 126, 128, 196, 197, 198
7 3020, 89, 121, 165, 186, 199, 200
8 3021, 91, 166, 123, 201, 202, 187
9 3022, 82, 142, 176, 192, 203, 204
10 3023, 81, 177, 130, 205, 206, 193
11 3024, 62, 63, 159, 72, 207, 208
12 3025, 95, 128, 169, 198, 209, 210
13 3026, 85, 139, 141, 211, 212, 213
14 3027, 86, 128, 129, 214, 215, 216
15 3028, 62, 159, 179, 208, 217, 218
16 3029, 86, 129, 130, 216, 219, 220
17 3030, 85, 142, 139, 221, 222, 211
18 3031, 123, 167, 157, 223, 224, 188
19 3032, 121, 150, 168, 185, 225, 226
20 3033, 95, 162, 126, 227, 228, 196
21 3034, 123, 166, 124, 202, 229, 230

8.8. Plastic plane membrane 201


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.8.3 Solution

The plastic behaviour, as previously done for the cables, is defined via the plastic card in the
material properties of the membrane: only one table is defined, so that the properties of the
material are independent of the temperature.

Code block 8.39: Solution deck of the plastic membrane in


Calculix.
1 ** Include the mesh produced by gmsh.
2 *INCLUDE, INPUT=all.msh
3
4 ** Include the physical entities produced by the .fbd file.
5 *INCLUDE, INPUT=memb.nam
6 *INCLUDE, INPUT=cables.nam
7
8 ** Isotropic elastoplastic material for the membrane with kinematic
9 ** hardening.
10 *MATERIAL, NAME=membr
11 *ELASTIC
12 8e3, 0.4
13 * PLASTIC, HARDENING=KINEMATIC
14 30.0, 0.0
15 40.0, 0.1
16 50.0, 0.2
17
18 ** Define the thickness for the membrane and assign the material.
19 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
20 2.0
21
22 ** Boundary conditions to be applied to the infinitely rigid edges.
23 *BOUNDARY
24 Ncables, 1, 3
25
26 ** The load is increased linearly from 0 to 1, decreased to zero up to 2,
27 ** and maintained at zero until 2.25.
28 *AMPLITUDE, NAME=aload
29 0.0,0.0, 1.0,1.0, 2.0,0.0, 2.25,0.0
30
31 ** Static nonlinear step for the analysis: request a fixed time increment
32 ** apply the distributed load and retrieve nodal displacements and
33 ** reaction force, and element stresses and strains.
34 *STEP, NLGEOM, INC=500
35 *STATIC, SOLVER=SPOOLES
36 1.0e-6, 2.25, , 0.05
37 *DLOAD, AMPLITUDE=aload
38 Ememb, P, -0.006
39 *NODE FILE
40 U, RF
41 *EL FILE
42 S, E, PE
43 *END STEP

202 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 8.40: Bash script to start the analysis automati-


cally in Calculix for the plastic plane membrane.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-plane-plasticity.fbd

8.8.4 Post-processing

The post-processing is fully automated by the previous bash-like script written for cgx in Cal-
culix.

8.80: Total displacements of the plastic membrane.

8.8.5 Conclusions

The first important conclusion to be drawn in the structural case of the plastic membrane is that
the membrane should never reach the plastic domain; the plastic permanent strain deforms the

8.8. Plastic plane membrane 203


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.81: Displacements in the x and y-direction of the plastic membrane.

8.82: Normal stresses in the x and y-direction of the plastic membrane.

8.83: Normal strains in the x and y-direction of the plastic membrane.

204 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.84: Von-Mises stresses and strains of the plastic membrane.

8.85: Von-Mises equivalent plastic strain of the plane plastic membrane.

8.8. Plastic plane membrane 205


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=842

2
Values at Nodes (membrane-plane-plasticity.fbd)

1.5
Time
1
0.5
0
0

-20

-40

-60

-80

-100

-120

-140

-160

-180

-200

D3

8.86: Maximum displacement of the plastic membrane.

206 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=842

30

25

20
SXX

15

10

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=842

30

25

20
SYY

15

10

0
0 0.5 1 1.5 2 2.5
Time

8.87: Normal stresses in the x and y-direction of the center point of the plastic membrane.

8.8. Plastic plane membrane 207


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=611

30

25

20
SXX

15

10

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


18
Node=611

16

14

12

10
SYY

0
0 0.5 1 1.5 2 2.5
Time

8.88: Normal stresses in the x and y-direction of the mid-point of the plastic membrane.

208 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


16
Node=553

14

12

10

8
SXX

-2
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=553

30

25

20

15
SYY

10

-5
0 0.5 1 1.5 2 2.5
Time

8.89: Normal stresses in the x and y-direction of the pin of the plastic membrane.

8.8. Plastic plane membrane 209


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


0.004
Node=842

0.0035

0.003

0.0025

0.002
EXX

0.0015

0.001

0.0005

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


0.004
Node=842

0.0035

0.003

0.0025

0.002
EYY

0.0015

0.001

0.0005

0
0 0.5 1 1.5 2 2.5
Time

8.90: Normal strains in the x and y-direction of the center point of the plastic membrane.

210 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


0.008
Node=611

0.007

0.006

0.005

0.004
EXX

0.003

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


1x10-5
Node=611

-1x10-5

-2x10-5
EYY

-3x10-5

-4x10-5

-5x10-5

-6x10-5
0 0.5 1 1.5 2 2.5
Time

8.91: Normal strains in the x and y-direction of the mid-point of the plastic membrane.

8.8. Plastic plane membrane 211


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


0
Node=553

-1x10-5

-5
-2x10

-3x10-5
EXX

-4x10-5

-5
-5x10

-6x10-5

-7x10-5
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


0.007
Node=553

0.006

0.005

0.004
EYY

0.003

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

8.92: Normal strains in the x and y-direction of the pin of the plastic membrane.

212 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=842

30

25

20
Mises

15

10

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


0.007
Node=842

0.006

0.005

0.004
Mises

0.003

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

8.93: Von-Mises stresses and strains of the center-point of the plastic membrane.

8.8. Plastic plane membrane 213


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=611

30

25

20
Mises

15

10

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


0.008
Node=611

0.007

0.006

0.005
Mises

0.004

0.003

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

8.94: Von-Mises stresses and strains of the mid-point of the plastic membrane.

214 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-plasticity.fbd)


35
Node=553

30

25

20
Mises

15

10

0
0 0.5 1 1.5 2 2.5
Time

Values at Nodes (membrane-plane-plasticity.fbd)


0.007
Node=553

0.006

0.005

0.004
Mises

0.003

0.002

0.001

0
0 0.5 1 1.5 2 2.5
Time

8.95: Von-Mises stresses and strains of the pin of the plastic membrane.

8.8. Plastic plane membrane 215


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=842

2
Values at Nodes (membrane-plane-plasticity.fbd)

1.5
Time
1
0.5
0
0.003

0.0025

0.002

0.0015

0.001

0.0005

PE

8.96: Von-Mises equivalent plastic strain of the center point of the membrane.

216 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=611

2
Values at Nodes (membrane-plane-plasticity.fbd)

1.5
Time
1
0.5
0
0.004

0.0035

0.003

0.0025

0.002

0.0015

0.001

0.0005

PE

8.97: Von-Mises equivalent plastic strain of the mid-point of the membrane.

8.8. Plastic plane membrane 217


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2.5
Node=553

2
Values at Nodes (membrane-plane-plasticity.fbd)

1.5
Time
1
0.5
0
0.003

0.0025

0.002

0.0015

0.001

0.0005

PE

8.98: Von-Mises equivalent plastic strain of the pin of the membrane.

218 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

membrane so extensively that not only the structural properties are compromised, but also the
aesthetic characteristic are significantly deteriorated.
In addition, the membrane is significantly compressed in the zones adjacent to the pins: the
plastic deformations have made the fabric slack; we should also question whether the material
can bear this compressive stresses or we should modify the constitutive law to cut them off.
Finally, observing the graphs of the Von Mises equivalent plastic strain, all the membrane finite
elements reach the plastic domain and present permanent deformations after the discharge.

8.8. Plastic plane membrane 219


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.9 Plane membrane with collaborating cables

8.9.1 Introduction

In a practical contest, membranes are enhanced with sourrounding cables which are responsible
for the application of the total initial prestress to the entire mixed cable and membrane structure.
The characteristics of the membrane are the same ones as reported in the case of the plane
membrane pinned along its borders (chapter 8.6). As far as the cables are concerned, the
Young modulus of the steel is equal to 160 · 103 𝑀 𝑃 𝑎 with a sectional area of 314𝑚𝑚2 , with a
pretension (force, and not force density) of 60𝑘𝑁 .
The pretension is applied at the initial instant, whereas the load is increased monotonically until
time 1.0, when the pretension is further increased to show the originated stiffening behaviour.

8.9.2 Pre-processing

gmsh provides the user with all the necessary cabilities to create meshes with elements of
different geometric order; for instance, we can mesh at the same time both 1D cable elems and
2D membranes which may also share common nodes.
The initial geometry stems from an approximate form-finding calculated by hand and also
verified with Dlubal. Additional details for the form-finding can be found in the next chapters.

Code block 8.41: Pre-post file in Calculix for the analysis of


the plane membrane with collaborating cables.
1 # mesh characteristic subdivision.
2 valu ds 20
3

4 # geometric parameters defining the shape of the membrane.


5 valu rp 7863
6 valu rn -7863
7 valu lp 2500
8 valu ln -2500
9
10 # point geometry defining the supports of the cables and membrane.
11 pnt p1 lp ln 0
12 pnt p2 lp lp 0
13 pnt p3 ln lp 0
14 pnt p4 ln ln 0
15
16 # point geometry defining the center of the circles which define the
17 # cables.
18 pnt p5 rp 0 0
19 pnt p6 0 rp 0
20 pnt p7 rn 0 0
21 pnt p8 0 rn 0
22
23 # point sets for the supports of the membrane.
24 seta pins p p1 p2 p3 p4
25
(continues on next page)

220 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.99: Mesh produced by Calculix of the plane membrane with collaborating cables.

8.9. Plane membrane with collaborating cables 221


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


26 # line geometry defing the cables which are also the edges of the
27 # membrane.
28 line l1 p2 p1 p5 ds
29 line l2 p2 p3 p6 ds
30 line l3 p3 p4 p7 ds
31 line l4 p4 p1 p8 ds
32
33 # line sets gathering the cables.
34 seta cables l l1 l2 l3 l4
35
36 # surface geometry which defines the membrane.
37 surf s1 l1 l2 l3 l4
38
39 # surface sets gathering the membranes; in this case, just one!
40 seta memb s s1
41
42 # element assignments: mesh the geometry with parabolic elements.
43 elty memb tr3
44 elty cables be3
45
46 # execute the mesh command and show the mesh.
47 mesh all
48 plot m all
49 view line
50
51 # saving the mesh and groups to file to be read by the solver.
52 send all abq
53 send memb abq names
54 send cables abq names
55 send pins abq names
56
57 # save an image of the filled geometry
58 view fill
59 rot z
60 hcpy png
61 sys sleep 1
62 sys mv hcpy_1.png membrane_plane_cables_mesh_fill.png
63

64 # save an image of the mesh


65 view line
66 rot z
67 hcpy png
68 sys sleep 1
69 sys mv hcpy_2.png membrane_plane_cables_mesh_line.png
70
71 # solve the problem
72 sys ccx_2.14 membrane_plane_cables
73 view fill
74

75 # read the file containing the results.


76 read membrane_plane_cables.frd
77
78 # contour plots
79 rot -z
80 rot u -60
81 rot c -45
(continues on next page)

222 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


82 zoom 3
83 view disp
84 scal d 20
85 ds -4 e 4
86 plot fv all
87 sys sleep 1
88 hcpy png
89 sys mv hcpy_3.png membrane_plane_cables_displacement_magnitude_3d.png
90

91 view disp off


92 rot z
93 ds -4 e 1
94 plot fv all
95 sys sleep 1
96 hcpy png
97 sys mv hcpy_4.png membrane_plane_cables_displacement_x.png
98
99 ds -4 e 2
100 plot fv all
101 sys sleep 1
102 hcpy png
103 sys mv hcpy_5.png membrane_plane_cables_displacement_y.png
104
105 sys montage membrane_plane_cables_displacement_x.png membrane_plane_cables_
˓→displacement_y.png -tile 2x1 -geometry +0+0 membrane_plane_cables_
˓→displacement_xy.png

106
107 ds -4 e 3
108 plot fv all
109 sys sleep 1
110 hcpy png
111 sys mv hcpy_6.png membrane_plane_cables_displacement_z.png
112
113 ds -3 e 1
114 plot fv all
115 min 20
116 max 50
117 sys sleep 1
118 hcpy png
119 sys mv hcpy_7.png membrane_plane_cables_stress_xx.png
120
121 ds -3 e 2
122 plot fv all
123 min 20
124 max 50
125 sys sleep 1
126 hcpy png
127 sys mv hcpy_8.png membrane_plane_cables_stress_yy.png
128

129 sys montage membrane_plane_cables_stress_xx.png membrane_plane_cables_


˓→stress_yy.png -tile 2x1 -geometry +0+0 membrane_plane_cables_stress_xxyy.
˓→png
130
131 ds -3 e 7
132 plot fv all
133 min 30
(continues on next page)

8.9. Plane membrane with collaborating cables 223


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


134 max 60
135 sys sleep 1
136 hcpy png
137 sys mv hcpy_9.png membrane_plane_cables_stress_m.png
138
139 ds -2 e 1
140 plot fv all
141 sys sleep 1
142 hcpy png
143 sys mv hcpy_10.png membrane_plane_cables_strain_xx.png
144
145 ds -2 e 2
146 plot fv all
147 sys sleep 1
148 hcpy png
149 sys mv hcpy_11.png membrane_plane_cables_strain_yy.png
150
151 sys montage membrane_plane_cables_strain_xx.png membrane_plane_cables_
˓→strain_yy.png -tile 2x1 -geometry +0+0 membrane_plane_cables_strain_xxyy.
˓→png
152

153 ds -2 e 7
154 plot fv all
155 sys sleep 1
156 hcpy png
157 sys mv hcpy_12.png membrane_plane_cables_strain_m.png
158
159 sys montage membrane_plane_cables_strain_m.png membrane_plane_cables_
˓→stress_m.png -tile 2x1 -geometry +0+0 membrane_plane_cables_ss_m.png
160
161
162 # time graphs
163 seta frex n 2966
164 graph frex time DISP D3
165 sys mv graph_0.ps membrane_plane_cables_displacement_frex.eps
166 graph frex time STRESS SXX
167 sys mv graph_1.ps membrane_plane_cables_stress_xx_frex.eps
168 graph frex time STRESS SYY
169 sys mv graph_2.ps membrane_plane_cables_stress_yy_frex.eps
170
171 sys ps2pdf membrane_plane_cables_stress_xx_frex.eps
172 sys ps2pdf membrane_plane_cables_stress_yy_frex.eps
173 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_stress_xxyy_frex.pdf membrane_plane_cables_stress_xx_frex.pdf
˓→membrane_plane_cables_stress_yy_frex.pdf

174
175 graph frex time STRESS Mises
176 sys mv graph_3.ps membrane_plane_cables_stress_mises_frex.eps
177 graph frex time TOSTRAIN EXX
178 sys mv graph_4.ps membrane_plane_cables_strain_xx_frex.eps
179 graph frex time TOSTRAIN EYY
180 sys mv graph_5.ps membrane_plane_cables_strain_yy_frex.eps
181
182 sys ps2pdf membrane_plane_cables_strain_xx_frex.eps
183 sys ps2pdf membrane_plane_cables_strain_yy_frex.eps
184 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
(continues on next page)
˓→cables_strain_xxyy_frex.pdf membrane_plane_cables_strain_xx_frex.pdf

˓→membrane_plane_cables_strain_yy_frex.pdf

224 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


185
186 graph frex time TOSTRAIN Mises
187 sys mv graph_6.ps membrane_plane_cables_strain_mises_frex.eps
188
189 sys ps2pdf membrane_plane_cables_stress_mises_frex.eps
190 sys ps2pdf membrane_plane_cables_strain_mises_frex.eps
191 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_se_frex.pdf membrane_plane_cables_stress_mises_frex.pdf membrane_
˓→plane_cables_strain_mises_frex.pdf

192
193 seta pin n 2426
194 graph pin time STRESS SXX
195 sys mv graph_7.ps membrane_plane_cables_stress_xx_pin.eps
196 graph pin time STRESS SYY
197 sys mv graph_8.ps membrane_plane_cables_stress_yy_pin.eps
198
199 sys ps2pdf membrane_plane_cables_stress_xx_pin.eps
200 sys ps2pdf membrane_plane_cables_stress_yy_pin.eps
201 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_stress_xxyy_pin.pdf membrane_plane_cables_stress_xx_pin.pdf
˓→membrane_plane_cables_stress_yy_pin.pdf

202
203 graph pin time STRESS Mises
204 sys mv graph_9.ps membrane_plane_cables_stress_mises_pin.eps
205 graph pin time TOSTRAIN EXX
206 sys mv graph_10.ps membrane_plane_cables_strain_xx_pin.eps
207 graph pin time TOSTRAIN EYY
208 sys mv graph_11.ps membrane_plane_cables_strain_yy_pin.eps
209
210 sys ps2pdf membrane_plane_cables_strain_xx_pin.eps
211 sys ps2pdf membrane_plane_cables_strain_yy_pin.eps
212 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_strain_xxyy_pin.pdf membrane_plane_cables_strain_xx_pin.pdf

˓→membrane_plane_cables_strain_yy_pin.pdf
213
214 graph pin time TOSTRAIN Mises
215 sys mv graph_12.ps membrane_plane_cables_strain_mises_pin.eps
216
217 sys ps2pdf membrane_plane_cables_stress_mises_mid.eps
218 sys ps2pdf membrane_plane_cables_strain_mises_mid.eps
219 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_se_mid.pdf membrane_plane_cables_stress_mises_mid.pdf membrane_
˓→plane_cables_strain_mises_mid.pdf
220
221 seta mid n 2939
222 graph mid time STRESS SXX
223 sys mv graph_13.ps membrane_plane_cables_stress_xx_mid.eps
224 graph mid time STRESS SYY
225 sys mv graph_14.ps membrane_plane_cables_stress_yy_mid.eps
226

227 sys ps2pdf membrane_plane_cables_stress_xx_mid.eps


228 sys ps2pdf membrane_plane_cables_stress_yy_mid.eps
229 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_stress_xxyy_mid.pdf membrane_plane_cables_stress_xx_mid.pdf
˓→membrane_plane_cables_stress_yy_mid.pdf
230
(continues on next page)

8.9. Plane membrane with collaborating cables 225


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


231 graph mid time STRESS Mises
232 sys mv graph_15.ps membrane_plane_cables_stress_mises_mid.eps
233 graph mid time TOSTRAIN EXX
234 sys mv graph_16.ps membrane_plane_cables_strain_xx_mid.eps
235 graph mid time TOSTRAIN EYY
236 sys mv graph_17.ps membrane_plane_cables_strain_yy_mid.eps
237
238 sys ps2pdf membrane_plane_cables_strain_xx_mid.eps
239 sys ps2pdf membrane_plane_cables_strain_yy_mid.eps
240 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_strain_xxyy_mid.pdf membrane_plane_cables_strain_xx_mid.pdf
˓→membrane_plane_cables_strain_yy_mid.pdf
241
242 graph mid time TOSTRAIN Mises
243 sys mv graph_18.ps membrane_plane_cables_strain_mises_mid.eps
244
245 sys ps2pdf membrane_plane_cables_stress_mises_pin.eps
246 sys ps2pdf membrane_plane_cables_strain_mises_pin.eps
247 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_plane_
˓→cables_se_pin.pdf membrane_plane_cables_stress_mises_pin.pdf membrane_
˓→plane_cables_strain_mises_pin.pdf

248
249
250 # switch back to the deformed shape
251 rot -z
252 rot u -60
253 rot c -45
254 view disp
255 ds -4 e 4
256 plot fv all
257
258

259 # exit the program


260 # quit

Code block 8.42: Nodes of the mesh in Calculix format of


the plane membrane with collaborating cables.
1 *NODE, NSET=Nall
2 1,2.500000000000e+03,2.500000000000e+03,0.000000000000e+00
3 2,2.302568552163e+03,2.023208124219e+03,0.000000000000e+00
4 3,2.396083934054e+03,2.263757435747e+03,0.000000000000e+00
5 4,2.147431358599e+03,1.531027140657e+03,0.000000000000e+00
6 5,2.219631765225e+03,1.778809705036e+03,0.000000000000e+00
7 6,2.035768437796e+03,1.027200720624e+03,0.000000000000e+00
8 7,2.086104691924e+03,1.280331831803e+03,0.000000000000e+00
9 8,1.968429130315e+03,5.155611139919e+02,0.000000000000e+00
10 9,1.996518359798e+03,7.721153833266e+02,0.000000000000e+00
11 10,1.945925638459e+03,0.000000000000e+00,0.000000000000e+00
12 11,1.951554188471e+03,2.580260013091e+02,0.000000000000e+00
13 12,1.968429130315e+03,-5.155611139919e+02,0.000000000000e+00
14 13,1.951554188471e+03,-2.580260013091e+02,0.000000000000e+00
15 14,2.035768437796e+03,-1.027200720624e+03,0.000000000000e+00
16 15,1.996518359798e+03,-7.721153833266e+02,0.000000000000e+00
17 16,2.147431358599e+03,-1.531027140657e+03,0.000000000000e+00
(continues on next page)

226 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 17,2.086104691924e+03,-1.280331831803e+03,0.000000000000e+00
19 18,2.302568552163e+03,-2.023208124219e+03,0.000000000000e+00
20 19,2.219631765225e+03,-1.778809705036e+03,0.000000000000e+00
21 20,2.500000000000e+03,-2.500000000000e+03,0.000000000000e+00

Code block 8.43: Extract of the cables of the mesh in Cal-


culix format of the plane membrane with collaborating ca-
bles.
1 *ELEMENT, TYPE=B32R, ELSET=Eall
2 1, 1, 3, 2
3 2, 2, 5, 4
4 3, 4, 7, 6
5 4, 6, 9, 8
6 5, 8, 11, 10
7 6, 10, 13, 12
8 7, 12, 15, 14
9 8, 14, 17, 16
10 9, 16, 19, 18
11 10, 18, 21, 20
12 11, 1, 23, 22
13 12, 22, 25, 24
14 13, 24, 27, 26
15 14, 26, 29, 28
16 15, 28, 31, 30
17 16, 30, 33, 32
18 17, 32, 35, 34
19 18, 34, 37, 36
20 19, 36, 39, 38
21 20, 38, 41, 40
22 21, 40, 43, 42

Code block 8.44: Extract of the membranes of the mesh in


Calculix format of the plane membrane with collaborating
cables.
1 *ELEMENT, TYPE=S3, ELSET=Eall
2 41, 20, 21, 80
3 42, 80, 21, 81
4 43, 80, 81, 78
5 44, 78, 81, 82
6 45, 78, 82, 79
7 46, 79, 82, 83
8 47, 79, 83, 76
9 48, 76, 83, 84
10 49, 76, 84, 77
11 50, 77, 84, 85
12 51, 77, 85, 74
13 52, 74, 85, 86
14 53, 74, 86, 75
15 54, 75, 86, 87
16 55, 75, 87, 72
17 56, 72, 87, 88
18 57, 72, 88, 73
(continues on next page)

8.9. Plane membrane with collaborating cables 227


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


19 58, 73, 88, 89
20 59, 73, 89, 70
21 60, 70, 89, 90
22 61, 70, 90, 71

8.9.3 Solution

We would like to underline the fact that the numerical solution of the system of equations for the
nonlinear static analysis is delegated to the open-source solver SPOOLES, which is extremely
handy at dealing with the strong nonlinearities stemming from the collaboration of the two
distinct elements.

Code block 8.45: Solution deck in Calculix of the plane


membrane with collaborating cables.
1 ** Include the mesh file containing the definition of all the model.
2 *INCLUDE, INPUT=all.msh
3 ** Include the physical entities that describe the model.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6 *INCLUDE, INPUT=pins.nam
7
8 ** Define the material for the membrane and the cables.
9 ** In particular, we define the coeffient of thermal expansion
10 ** for the cables to simulate the pretensioning of the cables.
11 *MATERIAL, NAME=membr
12 *ELASTIC
13 8e3, 0.4
14 *EXPANSION, TYPE=ISO, ZERO=0.0
15 1.2e-5, 0.0
16 *MATERIAL, NAME=acier
17 *ELASTIC
18 160e3, 0.3
19 *EXPANSION, TYPE=ISO, ZERO=0.0
20 1.2e-5, 0.0
21
22 ** The membrane is 2mm thick and associated to the set named 'membr'.
23 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
24 2
25
26 ** Define the cables as beams with circular section.
27 *BEAM SECTION, ELSET=Ecables, MATERIAL=acier, SECTION=CIRC
28 20, 20
29
30 ** At the beginning all the elements have zero temperature.
31 *INITIAL CONDITIONS, TYPE=TEMPERATURE
32 Nall, 0.0
33

34 ** The membrane and cables are anchored at the four side pins.
35 *BOUNDARY
36 Npins, 1, 3
37

(continues on next page)

228 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


38 ** The load is increased linearly from 0 to 1, and then kept constant.
39 *AMPLITUDE, NAME=aload
40 0.0,0.0, 1.0,1.0, 2.0,1.0
41 ** The pretensioning is applied at time zero, kept constant until one
42 ** and then increased ten times from one to two.
43 *AMPLITUDE, NAME=atemp
44 0.0,1.0, 1.0,1.0, 2.0,10.0
45
46 ** Static nonlinear step for the analysis: request a progressive
47 ** time increment, limited to maximum 0.05, apply the prestressing and
48 ** the external load. Request nodal displacements and forces, and element
49 ** stresses and strains.
50 *STEP, NLGEOM, INC=500
51 *STATIC, SOLVER=SPOOLES
52 1e-6, 2.0, , 0.05
53 *TEMPERATURE, AMPLITUDE=atemp
54 Ncables, -99.52
55 *DLOAD, AMPLITUDE=aload
56 Ememb, P, -0.001
57 *NODE FILE
58 U, RF
59 *EL FILE
60 S, E
61 *END STEP
62 ** The results shows that the form-finding is strictly necessary to
63 ** avoid concentrated stress patterns at the edges.

Code block 8.46: Bash script to start Calculix for the analy-
sis of the plane membrane with collaborating cables.
1 cgx_2.14 -b membrane-plane-cables.fbd

8.9.4 Post-processing

In order to plot only the stresses of the membrane, being the latter of a different order of
magnitude compared to the cables. There are two choices to tackle the problem:
1. Suppress the output for the cables and show only the “S6” elements which represent the
finite element of the membrane.
2. Cap the maximum value of the quantity of interest thus excluding the results originating
from the collaborating cables.

8.9.5 Dlubal comparison

With the commercial software Dlubal we first perform the form finding of the structure, then
load it and finally increase the pretensioning. The results are comparable with the ones obtained
in Calculix, where the form-finding has been delegated, for the time being, to calculations by
hand.

8.9. Plane membrane with collaborating cables 229


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.100: Total displacements of the plane membrane with collaborating cables.

8.101: Displacements in the x and y-direction of the membrane with cables.

230 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.102: Normal stresses in the x and y-direction of the membrane with cables.

8.103: Normal strains in the x and y-direction of the membrane with cables.

8.104: Von-Mises stresses and strains of the membrane with cables.

8.9. Plane membrane with collaborating cables 231


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2
1.8
Node=2966

1.6
Values at Nodes (membrane-plane-cables.fbd)

1.4
1.2
Time
1
0.8
0.6
0.4
0.2
0
20

-20

-40

-60

-80

-100

-120

D3

8.105: Maximum displacement of the plane membrane with cables.

232 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


35
Node=2966

30

25

20
SXX

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


35
Node=2966

30

25

20
SYY

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.106: Normal stresses in the x and y-direction of the center point of the cabled membrane.

8.9. Plane membrane with collaborating cables 233


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


40
Node=2939

35

30

25

20
SXX

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


40
Node=2939

35

30

25

20
SYY

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.107: Normal stresses in the x and y-direction of the mid-point of the cabled membrane.

234 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


40
Node=2426

35

30

25

20
SXX

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


40
Node=2426

35

30

25

20
SYY

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.108: Normal stresses in the x and y-direction of the pin of the cabled membrane.

8.9. Plane membrane with collaborating cables 235


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


0.0025
Node=2966

0.002

0.0015
EXX

0.001

0.0005

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0.0025
Node=2966

0.002

0.0015
EYY

0.001

0.0005

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.109: Normal strains in the x and y-direction of the center point of the cabled membrane.

236 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


7x10-5
Node=2939

6x10-5

5x10-5

4x10-5

3x10-5
EXX

2x10-5

1x10-5

-1x10-5
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0.00025
Node=2939

0.0002

0.00015

0.0001
EYY

5x10-5

-5x10-5

-0.0001
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.110: Normal strains in the x and y-direction of the mid-point of the cabled membrane.

8.9. Plane membrane with collaborating cables 237


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


0
Node=2426

-0.0005

-0.001

-0.0015
EXX

-0.002

-0.0025

-0.003
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0
Node=2426

-0.0005

-0.001

-0.0015
EYY

-0.002

-0.0025

-0.003
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.111: Normal strains in the x and y-direction of the pin of the cabled membrane.

238 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


35
Node=2966

30

25

20
Mises

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0.004
Node=2966

0.0035

0.003

0.0025
Mises

0.002

0.0015

0.001

0.0005

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.112: Von-Mises stresses and strains of the center point of the membrane with cables.

8.9. Plane membrane with collaborating cables 239


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


40
Node=2939

35

30

25
Mises

20

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0.0045
Node=2939

0.004

0.0035

0.003

0.0025
Mises

0.002

0.0015

0.001

0.0005

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.113: Von-Mises stresses and strains of the mid-point of the membrane with cables.

240 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-plane-cables.fbd)


45
Node=2426

40

35

30

25
Mises

20

15

10

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

Values at Nodes (membrane-plane-cables.fbd)


0.0055
Node=2426
0.005

0.0045

0.004

0.0035

0.003
Mises

0.0025

0.002

0.0015

0.001

0.0005

0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Time

8.114: Von-Mises stresses and strain of the pin of the membrane with cables.

8.9. Plane membrane with collaborating cables 241


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.115: Check of the deformations and the 𝜎x of the membrane with cables.

242 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.116: Check of the 𝜎y and the 𝜎mises of the membrane with cables.

8.9. Plane membrane with collaborating cables 243


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.117: Check of the 𝜀x and the 𝜀y of the membrane with cables.

244 Chapter 8. Cables and membranes analysed with FEM


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.118: Check of the 𝜀mises of the membrane and the tension in the cables.

8.9. Plane membrane with collaborating cables 245


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

8.9.6 Conclusions

The example of a plane membrane with collaborating cables shows the importance of the form-
finding procedure to identify a suitable shape of the membrane to allow the correct pretension-
ing of the membrane itself. The cables, which adhere to the border of the membrane, must
be positioned such that the membrane is properly tensioned; the additional prerequisite of the
form-finding to impose an almost uniform stress state guarantees also that the membrane will
be devoid of slack portions and most importantly will react practically super-linearly to the
additional live loads.

246 Chapter 8. Cables and membranes analysed with FEM


CHAPTER 9

Form-finding for pretensioned cable and membrane


structures

This procedure has been developed by Bernard Maurin and René Motro in 1997 in order to pro-
vide a valid method which implements the form-finding theory to tensile membranes combined
with reinforcing cables at the edges or above the fabric [MaMo211].
Both the Force Density Method (Chapter 2) and the Surface Stress Density Method (Chapter 3)
are based on the same solving approach: nodal equilibrium. Therefore, the following procedure
will compute the nodal load due to the membrane and the cables and will set the sum of the
two equal to zero.
n
∑︁ m
∑︁
Rres = Ti + Fj (9.1)
i=1 j=1

9.1 Code structure

The code is structured in different files whose classes and functions are responsible for:
• main.py: defines the interface of the program and starts the execution of the form-finding
procedure, after having parsed the command line arguments.
• parser.py: parses the input and output files, and writes the tests in hdf5 binary format for
later execution by the test suite in pytest.
• ff.py: is the actual form-finding algorithm on top of the Newton-Krylov algorithm, which
solves iteratively the nonlinear system of equations which compose the problem.

247
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

9.1.1 Command line interface

The form finding algorithm is invoked using the command line program written in Python based
on the following interface:

Code block 9.1: Parser for the form-finding algorithm.


1 if __name__ == "__main__":
2 # Call the constructor of the ArgumentParser from argparse and pass
3 # it to the visual description of the utility.
4 parser = argparse.ArgumentParser(
5 description='Solve the form-finding problem for cable and '
6 'membrane structures.',
7 epilog="""Pre and post processing capabilities in Calculix,
8 support for hdf5 and tests. Integration for additional loadings
9 and constitutive laws in Calculix.""")
10 # Add positional arguments, such as mesh topology, problem and solve
11 # path. They must be given in the correct order.
12 parser.add_argument(
13 'mesh_path', type=str,
14 help="""path to the file containing the topology to be solved.""")
15 parser.add_argument(
16 'prob_path',
17 type=str,
18 help="""path to the file containing the definition of the
19 problem."""
20 )
21 parser.add_argument(
22 'solve_path',
23 type=str,
24 help="""path to the file of the solution of the problem.""")
25 # Optionally request a case test to be created in hdf5 format for
26 # testing in pytest.
27 parser.add_argument(
28 '-p',
29 '--test_path',
30 type=str,
31 help="""path to the test file to be created.""")
32 # Print version and exit; --help for the usage of the program.
33 parser.add_argument(
34 '--version', action='version', version='%(prog)s 1.0.0')
35 # Parse the arguments and send them to the main function.
36 arguments = parser.parse_args()
37 main(arguments)

9.1.2 Main entry

The main function accepts only the arguments passed by the parser and starts the execution of
the program:
ff_clc.main(args)
Main entry point for the form-finding algorithm for membrane and cable structures.
Takes care of passing the control to the functions delegated to the pre-processing of the

248 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

mesh and problem files, to the actual form-finding algorithm, and finally to the post-
processor to write the output for the study with additional loadings and nonlinear consti-
tutive laws. Optionally, the user can request a test file to be created for future reference
or inspection.
Parameters args (list) – arguments parsed by the command line parser.
Returns system exit code. 0 if successful.
The parser is written with argparse, a module that makes it easy to write user-friendly
command-line interfaces. We define which arguments we require, and argparse will figure
out how to parse those out of sys.argv.

Code block 9.2: Main entry for the form-finding algorithm.


1 from __future__ import print_function
2 import time
3 import argparse
4 from termcolor import cprint
5 from code_ff.ff import solve_ff
6 from code_ff.parser import read_topology, write_topology, write_test
7
8
9 def main(args):
10 cprint("FORM FINDING FOR CABLE AND MEMBRANE STRUCTURES\n", "blue")
11 # Read the topology and problem definition from the input files.
12 cprint("Reading the mesh and problem files...", "green")
13 nodes, cable, membr, bcc, pretension_cable, pretension_membr, \
14 membr_thickness, cable_area, cable_young, cable_expansion = \
15 read_topology(args.mesh_path,
16 args.prob_path) # noqa: E122
17 # Start the timer for a basic code profiling.
18 start_time = time.time()
19 # Compute the final coordinates of the form-finding for both cables and
20 # membranes.
21 cprint("Starting the form-finding process...", "red")
22 print("Iteration detail:")
23 final_coordinates = solve_ff(nodes, cable, membr, bcc,
24 pretension_cable,
25 pretension_membr,
26 membr_thickness)
27 # Stop the timer to retrieve the time of execution of the form-finding.
28 end_time = time.time()
29 print("\n\nTotal time for the form-finding procedure in sec:",
30 end_time - start_time)
31 # Write the results to a mesh readable by Calculix; in addition,
32 # prepare a skeleton file to be used for the study under additional
33 # loading and more refined constitutive laws.
34 cprint("\nWriting the output files for further post-processing...",
35 "green")
36 write_topology(args.mesh_path, args.solve_path,
37 final_coordinates,
38 cable, pretension_cable, cable_area,
39 cable_young, cable_expansion)
40 # If requested by the user, prepare a test file in binary format
41 # readable by hdf5 to speed up the retrieval of the datasets.
(continues on next page)

9.1. Code structure 249


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


42 if args.test_path:
43 cprint("Writing the test case for the test suite...", "green")
44 write_test(args.test_path, nodes, cable, membr, bcc,
45 pretension_cable,
46 pretension_membr, membr_thickness, final_coordinates)

9.1.3 Input parsing

The topology is read with the following function of the parser:


code_ff.parser.read_topology(file_path, prob_path)
Read the mesh of the problem exported by any mesher (gmsh for instance) in a compati-
ble Abaqus format. Trasverse also the problem definition in ASCII format.
The file path must be a valid path to an .inp file generated by any mesher compatible with
the Abaqus format. For the time being, gmsh is known to work perfectly with the solution
workflow. The problem file is instead a simple ASCII file containing the definition of:
• Characteristic length of the mesh to target the desired stress state.
• Dirichlet boundary conditions for the fixed nodes.
• Pretension in the cables assigned as target force (will be increased according to
the force density method, so longer cables will be more tensioned).
• Pretension in the membrane as target isotropic stress (will be increased according
to the stress density method: larger elements will carry more stress than smaller
entities).
• Thickness of the membranes.
• Young modulus of the cables.
• Thermal expansion coefficient for the cables in order to prescribe a force den-
sity for the solution under additional loads in Calculix.
An example of the ASCII file containing the structure of the form-finding problem for a
simple plane membrane is in the test cases.
Parameters
• file_path (str) – file path to the mesh in a compatible Abaqus
format with nodes and elements.
• prob_path (str) – file path to the ASCII file containing the defi-
nition of the parameters for the form-finding process.
Returns list containing the expansion of all the return values, as described
below.
Return type
expansion of ndarrays and sets with the following meanings and conven-
tions:

250 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• nodes (ndarray) - numpy array containing the location of the nodes


before the form-finding process, given as a matrix, where the
row index represents the node number minus one, and the three
columns the x, y and z-coordinates. The mesh can also contain
sharp changes, but the topology of the boundaries must be strictly
respected.
• cable (ndarray) - numpy array containing the definition of the two-
nodes cable elements, in matrix form, where the first columns rep-
resents the element number, the second and third instead the con-
nected nodes.
• membr (ndarray) - numpy array containing the definition of the
three-nodes triangular membrane elements, in matrix form, where
the first column represents the element number, whereas the sec-
ond, third and fourth the connected nodes.
• bcc (set) - contains the nodes to be pinned during the form-finding
procedure.
• pretension_cable (ndarray) - numpy array containing the preten-
sion of the cables as a force in vector form; the index represents
the position of the cable element in the cable array, whereas the
vector component the pretension itself.
• pretension_membr (ndarray) - numpy array containing the preten-
sion of the membrane as a stress in vector form; the index repre-
sents the position of the membrane element in the membrane array,
whereas the vector component the pretension itself.
• membr_thickness (ndarray) - numpy array containing the thick-
nesses of the membrane, with the same structures as outlined for
pretension_cable or pretension_membr.
• cable_area (ndarray) - numpy array containing the area of the cable
elements in vector form, where the index represents the position of
the cable element in the cable array, whereas the vector component
the area itself.
• cable_young (ndarray) - numpy array containing the Young modu-
lus of the cable element in vector form, where the index represents
the position of the cable element in the cable array, whereas the
vector component the area itself.
• cable_expansion (ndarray) - numpy array containing the thermal
expansion coefficients of the cable element in vector form, where
the index represents the position of the cable element in the cable
array, whereas the vector component the thermal expansion coeffi-
cient itself.
Raises FileNotFoundError – if any of the input files is not found.

9.1. Code structure 251


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 9.3: Parser for the geometry and problem files.
1 import numpy as np
2 import h5py
3 import os
4

5
6 def read_topology(file_path, prob_path):
7 # List container for the nodes in matrix form, where the index
8 # represents the node number minus one, and the columns the x,
9 # y and z-coordinates of the node
10 nodes = []
11 # List container for the cable elements in matrix form, where the
12 # first column represents the element number, whereas the second
13 # and third columns are the nodes connected by the element itself.
14 cable = []
15 # List container for the membrane elements in matrix form, where the
16 # first column represents the element number, whereas the second,
17 # third and fourth are the nodes connected by a three-nodes membrane
18 # plane first order membrane element.
19 membr = []
20 # Set containing the boundary conditions, instead of list to speed
21 # up the lookup during the definition of the boundary equations.
22 bcc = set()
23
24 # Open the file containing the topology and mesh.
25 with open(file_path, 'r') as fin:
26 # Enter the file and retrieve the first line.
27 line = next(fin)
28 # Skip the heading lines.
29 for ii in range(0, 3):
30 line = next(fin)
31 # The first part of the file contains the node definitions to be
32 # passed to the node container. Read until we meet the header
33 # of the element section.
34 while not line.startswith("******* E L E M E N T S *************"):
35 # Split the line according to the formatting of Abaqus and
36 # retrieve the node coordinates.
37 checked_line = line.split(', ')
38 nodes.append([float(checked_line[1]), float(checked_line[2]),
39 float(checked_line[3])])
40 line = next(fin)
41 # Advance a couple of lines to enter the element section.
42 line = next(fin)
43 line = next(fin)
44 # Go on until we find the physical entities which we are not
45 # interested in for the time being.
46 while not line.startswith("*ELSET"):
47 # If a card is placed at the beginning of the line, that is a
48 # header for the set.
49 if not line.startswith("*ELEMENT"):
50 # Split the line according to the Abaqus format and
51 # retrieve the needed information.
52 checked_line = line.split(', ')
53 checked_line_len = len(checked_line)
54 # If the line consists of three entries (element number,
(continues on next page)

252 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


55 # node A and node B), it represents a cable.
56 if checked_line_len == 3:
57 cable.append(
58 [int(checked_line[0]), int(checked_line[1]),
59 int(checked_line[2])])
60 # Otherwise we are looking at a membrane element.
61 else:
62 membr.append(
63 [int(checked_line[0]), int(checked_line[1]),
64 int(checked_line[2]), int(checked_line[3])])
65 line = next(fin)
66 else:
67 line = next(fin)
68
69 # Check if the problem is made of only cables, only membranes or
70 # mixed.
71 if cable:
72 has_cables = True
73 else:
74 has_cables = False
75 if membr:
76 has_membr = True
77 else:
78 has_membr = False
79 # Convert the lists to numpy ndarrays to gain algebraic
80 # capabilities and speed up future calculations.
81 nodes = np.array(nodes)
82 cable = np.array(cable)
83 membr = np.array(membr)
84
85 # Open the ASCII file containing the definition of the parameters
86 # for the form-finding procedure.
87 with open(prob_path, 'r') as fin:
88 line = next(fin)
89 line = next(fin)
90 # Skip the first header and retrieve the characteristic length.
91 characteristic_length = float(line)
92 line = next(fin)
93 line = next(fin)
94 # Until we get the next card, add the boundary conditions to the
95 # set; if written more than once, they are automatically
96 # discarded by the builtin behaviour of sets in Python.
97 if has_cables:
98 end_card = "PRECABLE"
99 else:
100 end_card = "PREMEMBRANE"
101 while not line.startswith(end_card):
102 bcc.add(int(line))
103 line = next(fin)
104 line = next(fin)
105
106 if has_cables:
107 # Extract the default pretension assigned to all cables and
108 # convert it to a force density.
109 default_pretension = float(line) / characteristic_length
110 # Create a ndarray with the same pretension for all cable
(continues on next page)

9.1. Code structure 253


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


111 # elements.
112 pretension_cable = np.full(cable.shape[0], default_pretension)
113 line = next(fin)
114 # Until we reach the next card, retrieve the overrides for the
115 # pretension in the cables.
116 while not line.startswith("CABLEAREA"):
117 checked_line = line.split(' ')
118 pretension_cable[int(checked_line[0]) - 1] = float(
119 checked_line[1]) / characteristic_length
120 line = next(fin)
121 line = next(fin)
122 # Extract the default cable area to be used in the
123 # post-processing phase and fill the default vector for the
124 # area of the two-nodes cable elements.
125 default_cable_area = float(line)
126 cable_area = np.full(cable.shape[0], default_cable_area)
127 line = next(fin)
128 # Until we reach the next card, retrieve the overrides for the
129 # areas of the cables.
130 while not line.startswith("CABLEYOUNG"):
131 checked_line = line.split(' ')
132 cable_area[int(checked_line[0]) - 1] = float(
133 checked_line[1])
134 line = next(fin)
135 line = next(fin)
136 # Extract the default Young modulus for the cables and fill the
137 # corresponding vector to be employed in the output section.
138 default_cable_young = float(line)
139 cable_young = np.full(cable.shape[0], default_cable_young)
140 line = next(fin)
141 # Until we reach the next card, retrieve the overrides for the
142 # Young modulus of the cables.
143 while not line.startswith("CABLEEXPANSION"):
144 checked_line = line.split(' ')
145 cable_young[int(checked_line[0]) - 1] = float(
146 checked_line[1])
147 line = next(fin)
148 line = next(fin)
149 # Retrieve the default thermal expansion coefficient for the
150 # cables, thus permitting to assign a force density in the
151 # cables in the output file to be processed py Calculix for the
152 # study under additional loading.
153 default_cable_expansion = float(line)
154 cable_expansion = np.full(cable.shape[0],
155 default_cable_expansion)
156 line = next(fin)
157 # Until we reach the end of the file, retrieve the overrides of
158 # the thermal expansion coefficient of the cables.
159 if has_membr:
160 end_card = "PREMEMBRANE"
161 else:
162 end_card = "ENDINPUT"
163 while not line.startswith(end_card):
164 checked_line = line.split(' ')
165 cable_expansion[int(checked_line[0]) - 1] = float(
166 checked_line[1])
(continues on next page)

254 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


167 line = next(fin)
168 else:
169 pretension_cable = []
170 cable_area = []
171 cable_young = []
172 cable_expansion = []
173
174 if has_membr:
175 if has_cables:
176 line = next(fin)
177 # The target force assigned in the cable is converted to a
178 # stress density according to the stress density method,
179 # by computing the characteristic area of the elements.
180 characteristic_area = 0.5 * characteristic_length ** 2.0
181 default_pretension = float(line) / characteristic_area
182 # Fill the vector with the default tensions in the membrane
183 # elements.
184 pretension_membr = np.full(membr.shape[0], default_pretension)
185 line = next(fin)
186 # Until we reach the following card, retrieve the overrides for
187 # the stress state in the membrane elements.
188 while not line.startswith("MEMBRANETHICKNESS"):
189 checked_line = line.split(' ')
190 pretension_membr[int(checked_line[0]) - 1] = float(
191 checked_line[1]) / characteristic_area
192 line = next(fin)
193 line = next(fin)
194 # Extract the default thickness for the triangular first order
195 # membrane elements.
196 default_thickness = float(line)
197 membr_thickness = np.full(membr.shape[0], default_thickness)
198 line = next(fin)
199 # Until we reach the next card, retrieve the overrides for the
200 # thickness of the membranes.
201 while not line.startswith("ENDINPUT"):
202 checked_line = line.split(' ')
203 membr_thickness[int(checked_line[0]) - 1] = float(
204 checked_line[1])
205 line = next(fin)
206 else:
207 pretension_membr = []
208 membr_thickness = []
209
210 # Return the computed parameters in the following order; a
211 # dictionary could have been another possibility.
212 return nodes, cable, membr, bcc, pretension_cable, pretension_membr, \
213 membr_thickness, cable_area, cable_young, \
214 cable_expansion # noqa: E127

9.1.4 Output parsing

The form-finding topology is written with the following function of the parser:

9.1. Code structure 255


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

code_ff.parser.write_topology(input_path, solve_path, nodes, cable,


prec, cable_area, cable_young, ca-
ble_expansion)
Write the results of the form-finding procedure for the displacements and the equivalent
thermal loads for the pretension.
The results of the form-finding process are written to a compatible Abaqus file which can
be read by Calculix for the import of the new geometry. In addition, the function outputs
an updated Calculix deck containing the equivalent thermal loads to the pretension in
terms of force density: longer cables are more pretensioned than shorter ones in the
deformed configuration, thus giving the designer new possibilities to investigate different
shapes.
Parameters
• input_path (str) – path to the file containing the initial geometry
in an Abaqus-like format.
• solve_path (str) – path to the Calculix deck acting as a skeleton
for future calculations under additional loads.
• nodes (ndarray) – numpy array containing the location of the
nodes before the form-finding process, given as a matrix, where the
row index represents the node number minus one, and the three
columns the x, y and z-coordinates. The mesh can also contain
sharp changes, but the topology of the boundaries must be strictly
respected.
• cable (ndarray) – numpy array containing the definition of the
two-nodes cable elements, in matrix form, where the first columns
represents the element number, the second and third instead the con-
nected nodes.
• prec (ndarray) – numpy array containing the pretension of the
cables as a force in vector form; the index represents the position of
the cable element in the cable array, whereas the vector component
the pretension itself.
• cable_area (ndarray) – numpy array containing the area of the
cable elements in vector form, where the index represents the position
of the cable element in the cable array, whereas the vector component
the area itself.
• cable_young (ndarray) – numpy array containing the Young
modulus of the cable element in vector form, where the index repre-
sents the position of the cable element in the cable array, whereas the
vector component the area itself.
• cable_expansion (ndarray) – numpy array containing the
thermal expansion coefficients of the cable element in vector form,
where the index represents the position of the cable element in the
cable array, whereas the vector component the thermal expansion co-
efficient itself.

256 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Returns None
Raises
• FileNotFoundError – if any of the input files is not found.
• PermissionError – insufficient permissions to write to the cor-
responding path.

Code block 9.4: Parser for the output of the updated geome-
try and new deck in Calculix
1 def write_topology(input_path, solve_path, nodes, cable, prec,
2 # Based on the name of the file supplied by the user, output the
3 # resulting topology from the form-finding process to the same
4 # directory appending '_resu' to the original name of the file.
5 working_dir_input = os.path.dirname(input_path)
6 output_file = os.path.join(working_dir_input, "form_finding_resu.inp")
7 # At the same time, open the input file with the original topology
8 # and a blank file to write the new geometry after the form-finding
9 # process.
10 with open(input_path, "r") as fp, open(output_file, 'w') as fo:
11 # Initialize the node counter to keep track of the written nodes
12 # in the output file.
13 node_counter = 0
14 line = next(fp) # get the first line of the file
15 fo.write(line)
16 # Copy the header of the input file to the output file.
17 for ii in range(0, 3):
18 line = next(fp)
19 fo.write(line)
20 # Until we reach the elements cards, copy the node to the new
21 # destination with the updated final coordinates.
22 while not line.startswith("******* E L E M E N T S *************"):
23 fo.write("%d, %f, %f, %f\n" % (
24 node_counter + 1, nodes[node_counter, 0],
25 nodes[node_counter, 1], nodes[node_counter, 2]))
26 node_counter += 1 # advance the counter for the node numbering
27 line = next(fp)
28 fo.write(line)
29 # Write everything else to the file in its original form,
30 # in particular the element connections and the physical groups.
31 for line in fp:
32 fo.write(line)
33
34 # Retrieve the number of nodes and cable elements.
35 nodes_len = nodes.shape[0]
36 cable_len = cable.shape[0]
37 # Pre-allocate an empty vector with the nodal temperatures
38 # representing the inelastic contribution of the prestressing.
39 delta_t = np.zeros(nodes_len)
40 for ii in range(0, cable_len):
41 # Extract the starting and end node for the cable elements.
42 start_cable = cable[ii, 1] - 1
43 end_cable = cable[ii, 2] - 1
44 # For the current cable, compute the length in the deformed
45 # configuration.
(continues on next page)

9.1. Code structure 257


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


46 length_cable = np.linalg.norm(
47 nodes[start_cable, :] - nodes[end_cable, :])
48 # Compute the tension to be applied to the cable according to
49 # the force density method.
50 total_tension = length_cable * prec[ii]
51 # Given the geometric and material properties of the cables,
52 # compute the corresponding temperature variation to be applied
53 # in order to simulate the initial prestressing.
54 delta_t[end_cable] = total_tension / (
55 cable_young[ii] * cable_expansion[ii] * cable_area[ii])
56
57 # Based on the file name and path supplied by the user on the
58 # command line, output the new Calculix deck after the form-finding
59 # process to the same directory appending '_resu' to the original
60 # name of the file.
61 working_dir_input = os.path.dirname(solve_path)
62 output_file = os.path.join(working_dir_input, "form_finding_solve.inp")
63 # At the same time, open the input file with the original solution
64 # and a blank file to write the new deck in Calculix with the
65 # thermal loads to simulate the initial prestressing of the cables
66 # according to the force density method.
67 with open(solve_path, 'r') as fin, open(output_file, 'w') as fo:
68 line = next(fin)
69 # Until we reach the cards representing the commands for the
70 # output of the displacements, copy the content of the input file.
71 while "*NODE FILE" not in line:
72 fo.write(line)
73 line = next(fin)
74 # NOTE: the initial temperature must be supplied to 0.0 degrees
75 # by the user in the original deck.
76 fo.write("*TEMPERATURE\n")
77 # Write the card for the definition of the temperature loadings
78 # and write the latter for each node to the file.
79 for ii in range(0, nodes_len):
80 # The temperature is applied recursively to the end node of
81 # the element.
82 fo.write("%d,%f\n" % (ii + 1, -delta_t[ii]))
83 fo.write("*NODE FILE\n")
84 # Copy the end of the input file to the new deck for the study
85 # of the additional loadings.
86 for line in fin:
87 fo.write(line)

9.1.5 Example problem definition

An example of the problem definition is:

Code block 9.5: Example file to define the form-finding prob-


lem for cables and membranes.
CHARACTERISTICLENGTH
500.0
BCC
(continues on next page)

258 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


1
2
3
4
PRECABLE
60.0e3
1 60.0e3
CABLEAREA
314.0
1 314.0
CABLEYOUNG
160E3
1 160E3
CABLEEXPANSION
1.2E-5
1 1.2E-5
PREMEMBRANE
5.0
1 5.0
MEMBRANETHICKNESS
2.0
1 2.0
ENDINPUT

9.1.6 Test functions

The tests are exported by means of the function:


code_ff.parser.write_test(test_path, nodes, cable, membr, bcc,
pretension_cable, pretension_membr,
membr_thickness, final_coordinates)
Stores an optional hdf5 file to be part of the test suite in pytest.
Tests are created by storing, optionally, an hdf5 file containing both the problem defi-
nition, in terms of geometric and static conditions, and the final results after the form-
finding process. hdf5 files are essentially numpy arrays which can be indexed and sliced
regardless of their size on file, allowing to treat huge files up to multi petabytes.
hdf5 files are introduced to act as a transparent layer between the tests and the algorithm
of the form-finding, thus abstracting the I/O operations which are now independent from
the dedicated parser that has been written for Calculix.
Parameters
• test_path (string) – file path to the location where the user
wants to store the hdf5 file for testing.
• nodes (ndarray) – numpy array containing the location of the
nodes after the form-finding process, given as a matrix, where the row
index represents the node number minus one, and the three columns
the x, y and z-coordinates.
• cable (ndarray) – numpy array containing the definition of the

9.1. Code structure 259


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

two-nodes cable elements, in matrix form, where the first columns


represents the element number, the second and third instead the con-
nected nodes.
• membr (ndarray) – numpy array containing the definition of the
three-nodes triangular membrane elements, in matrix form, where the
first column represents the element number, whereas the second, third
and fourth the connected nodes.
• bcc (set) – contains the nodes to be pinned during the form-finding
procedure.
• pretension_cable (ndarray) – numpy array containing the
pretension of the cables as a force in vector form; the index represents
the position of the cable element in the cable array, whereas the vector
component the pretension itself.
• pretension_membr (ndarray) – numpy array containing the
pretension of the membrane as a stress in vector form; the index rep-
resents the position of the membrane element in the membrane array,
whereas the vector component the pretension itself.
• membr_thickness (ndarray) – numpy array containing the
thicknesses of the membrane, with the same structures as outlined
for pretension_cable or pretension_membr.
• final_coordinates (ndarray) – numpy ndarray containing
the final coordinates of the nodes after the form-finding process, with
the same structures as outline in nodes.
Returns None
Raises PermissionError – insufficient permissions to write to the corre-
sponding path.

Code block 9.6: Test writing for the output of the verification
with the hdf5 file.
1 def write_test(test_path, nodes, cable, membr, bcc, pretension_cable,
2 # Create a blank hdf5 file to write the initial topology and static
3 # conditions. The final coordinates after the form-finding process
4 # are added to allow pytest to test without relying on the custom
5 # parser written for Calculix; hdf5 acts as transparent layer to
6 # abstract the input and output operations and also to speed them up
7 # for extremely large files.
8 # 'libver' is set to 'latest' to gain maximum speed to skip legacy
9 # checks.
10 with h5py.File(test_path, 'w', libver='latest') as test_file:
11 # hdf5 files act as regular numpy arrays after having created
12 # the groups with a simple dictionary syntax.
13 test_file["mesh/nodes"] = nodes
14 test_file["mesh/cable"] = cable
15 test_file["mesh/membr"] = membr
16 test_file["static/bcc"] = np.array(list(bcc))
17 test_file["static/pretension_cable"] = pretension_cable
(continues on next page)

260 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 test_file["static/pretension_membr"] = pretension_membr
19 test_file["static/membr_thickness"] = membr_thickness
20 test_file["resu/final_coordinates"] = final_coordinates

9.1.7 Example run

An example run of the program is:

9.1: Example run of the form-finding algorithm in a colored terminal.

9.1.8 Auxiliary functions

9.1.8.1 Lenght as norm

The length of a side is computed with:


code_ff.ff._side_length(x_a, y_a, z_a, x_b, y_b, z_b)
Compute the length of a cable element or of the side of a three-node membrane triangular
element.
The length of the side is computed using the Pitagora’s theorem:
√︀
𝐿 = (𝑥b − 𝑥a )2 + (𝑦b − 𝑦a )2 + (𝑧b − 𝑧a )2 (9.2)

9.1. Code structure 261


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

A different approach using the definition of norm in a three-dimensional euclidean space


is also possible:

𝐿 = ||𝑥2 − 𝑥1 || (9.3)

The difference in terms of computation costs might be considered in a future version.


Parameters
• x_a (float) – x-coordinate of the first point.
• y_a (float) – y-coordinate of the first point.
• z_a (float) – z-coordinate of the first point.
• x_b (float) – x-coordinate of the second point.
• y_b (float) – y-coordinate of the second point.
• z_b (float) – z-coordinate of the second point.
Returns length of a side of a triangle or cable element.
Return type float

Code block 9.7: Pitagora’s theorem or norm to compute the


length of the element.
1 import numpy as np
2 import scipy.optimize as optim
3

4
5 def _side_length(x_a, y_a, z_a, x_b, y_b, z_b):
6 length = np.sqrt(
7 (x_a - x_b) ** 2.0 + (y_a - y_b) ** 2.0 + (z_a - z_b) ** 2.0)
8 return length

9.1.8.2 Area with Erone’s formula

The area is computed with:


code_ff.ff._membr_area(len1, len2, len3)
Computes the area of a triangle by knowing the length of the three sides.
This formulation is based on the Erone’s formula since the length of the triangles needs
computing to be passed to the other functions during the form-finding process. The
formula states:
√︀
𝐴 = 𝑝 · (𝑝 − 𝑎) · (𝑝 − 𝑏) · (𝑝 − 𝑐) (9.4)

Parameters
• len1 (float) – length of the first side of the triangle.
• len2 (float) – length of the second side of the triangle.
• len3 (float) – length of the third side of the triangle.

262 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Returns area of the triangle computed with Erone’s formula.


Return type float

Code block 9.8: Erone’s formula to compute the area of a


triangle.
1 def _membr_area(len1, len2, len3):
2 # Semiperimeter of a triangle.
3 semip = len1 + len2 + len3
4 area = np.sqrt(
5 semip * (semip - len1) * (semip - len2) * (semip - len3))
6 return area

9.1.8.3 Normal to the TRIA3 element

The membrane normal is computed with:


code_ff.ff._membr_normal(x_a, y_a, z_a, x_b, y_b, z_b, x_c, y_c, z_c, length)
Computes the normal to the side of a triangle oriented arbitrarily in a 3D space.
The computation is based on the definition of vectors in a 3D euclidean space, and par-
ticular of dot and cross product.
Parameters
• x_a (float) – x-coordinate of the first node of the triangle.
• y_a (float) – y-coordinate of the first node of the triangle.
• z_a (float) – z-coordinate of the first node of the triangle.
• x_b (float) – x-coordinate of the second node of the triangle.
• y_b (float) – y-coordinate of the second node of the triangle.
• z_b (float) – z-coordinate of the second node of the triangle.
• x_c (float) – x-coordinate of the third node of the triangle.
• y_c (float) – y-coordinate of the third node of the triangle.
• z_c (float) – z-coordinate of the third node of the triangle.
• length (float) – length of the side of the triangle whose normal
we are looking for, computed with the auxiliary function.
Returns the versor defining the normal to the requested side of the triangle
multiplied by the height relative to the same side.
Return type ndarrray(float)
The length of the side has been computed with the auxiliary function obtaining:
√︀
𝐿l = (𝑥b − 𝑥a )2 + (𝑦b − 𝑦a )2 + (𝑧b − 𝑧a )2 (9.5)

9.1. Code structure 263


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

and equally for its adjacent vector:


√︀
𝐿e = (𝑥c − 𝑥b )2 + (𝑦c − 𝑦b )2 + (𝑧c − 𝑧b )2 (9.6)
The vector identifying the direction of the side whose normal we wish to compute is:
𝑎𝑏 = ||𝑥b − 𝑥a || (9.7)
The vector to one of the two adjacent sides is equivalently:
𝑏𝑐 = ||𝑥c − 𝑥b || (9.8)
The length of the projection of the adjacent side on the one whose normal we are looking
for is:
𝑙 = [𝑎𝑏 · 𝑏𝑐]/𝐿l (9.9)
The height of the triangle is computed by means of Pitagora’s theorem:
√︀
ℎ = 𝐿2a − 𝑙2 (9.10)
The normal to the plane containing the three-node membrane element is:
𝑛p = 𝑎𝑏 ∧ 𝑏𝑐 (9.11)
The normal to the side completes the cartesian reference system:
𝑛 = 𝑎𝑏 ∧ 𝑛p (9.12)
Having defined the versor 𝑛
ˆ , we return it multiplied by the height of the triangle:
𝑛=ℎ·𝑛
ˆ (9.13)

Code block 9.9: Cross products to determine the normal to


the side of the membrane element.
1 def _membr_normal(x_a, y_a, z_a, x_b, y_b, z_b, x_c, y_c, z_c, length):
2 # Vector identifying the side of the triangle for which we need to
3 # compute the normal.
4 vec_side = np.array([x_b - x_a, y_b - y_a, z_b - z_a])
5 # Same apporach for the adjacent side.
6 vec_side_lateral = np.array([x_c - x_b, y_c - y_b, z_c - z_b])
7 # Length of the projection of the adjacent side.
8 l_projected = np.dot(vec_side, vec_side_lateral) / length
9 # Norm of the adjacent side.
10 vec_side_lateral_norm = np.linalg.norm(vec_side_lateral)
11 # Height of the triangle with respect to the considered side.
12 height = np.sqrt(-l_projected ** 2.0 + vec_side_lateral_norm ** 2.0)
13 # Normal to the plane containing the finite element.
14 plane_normal = np.cross(vec_side, vec_side_lateral)
15 # Normal to the side; what we were looking for.
16 normal_side = np.cross(vec_side, plane_normal)
17 # Versor of the normal.
18 normal_side_normalised = normal_side / np.linalg.norm(normal_side)
19 # Return the versor multiplied by the height of the triangle.
20 normal_height = normal_side_normalised * height
21 return normal_height

264 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

9.1.8.4 Nodal forces for the membrane

The nodal force is computed with:


code_ff.ff._membr_tension(length, thick, area, pre, ni)
Computes the nodal force exerted by the membrane in a specified direction.
The balanced force needs computing to be supplied to the form-finding routine to com-
plete the stress density method in the formula:

𝑇i = 𝐿2i 𝑡i 𝑄s 𝑛i (9.14)

Parameters
• length (float) – length of the side opposite to the node whose
nodal force we are computing.
• thick (float) – thickness of the considered membrane element.
• area (float) – area of the considered membrane element resup-
plied after having been computed with the auxiliary function.
• pre (float) – stress density for the investigated element retrieved
in the definition of the problem.
• ni (float) – component of the force in the considered direction;
the user must supply the projection of the normal vector in the x, y or
z-direction.
Returns the tension to be employed in the stress density method.
Return type float

Code block 9.10: Nodal force for a node of the membrane


according to the stress density method.
1 def _membr_tension(length, thick, area, pre, ni):
2 ten = length ** 2.0 * thick * pre * ni
3 return ten

9.1.9 Dirchlet boundary equations

The boundary equations are defined by:


code_ff.ff._bcc_eqs(node_number, x_pos, y_pos, z_pos, nodes, eqs, x, bcc)
Writes the boundary equations for a constrained node.
The boundary equations are overwritten multiple times for a constrained nodes; the com-
putational time consumed for the process is equal to the one that should be employed to
check if the equation has already been written.

𝑥i = 𝑥̃︀i 𝑦i = 𝑦̃︀i 𝑧i = 𝑧̃︀i (9.15)

Parameters

9.1. Code structure 265


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• node_number (int) – number of the node to be analysed.


• x_pos (int) – x-position of the node in the stacked vector of both
unknowns and equations.
• y_pos (int) – y-position of the node in the stacked vector of both
unknowns and equations.
• z_pos (int) – z-position of the node in the stacked vector of both
unknowns and equations.
• nodes (ndarray) – numpy array containing the location of the
nodes after the form-finding process, given as a matrix, where the row
index represents the node number minus one, and the three columns
the x, y and z-coordinates.
• eqs (ndarray) – equations for the combined method of the force
and stress density method. The equations are stacked as the vector of
unknowns, which means that the x, y and z-coordinates are vertically
appended.
• x (ndarray) – unknowns for the combined method of the force and
stress density method. The unknowns are stacked as the vector of
equations, which means that the x, y and z-coordinates are vertically
appended.
• bcc (set) – contains the nodes to be pinned during the form-finding
procedure.
Returns True if the node is constrained, False otherwise.
Return type bool

266 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 9.11: Boundary equations for the force and


stress density method.
1 def _bcc_eqs(node_number, x_pos, y_pos, z_pos, nodes, eqs, x, bcc):
2 # Set lookup is much quicker than list lookup.
3 if node_number + 1 in bcc:
4 # Fill in the correct positions according to the stacked vector.
5 eq1 = x[x_pos] - nodes[node_number, 0]
6 eqs[x_pos] = eq1
7 eq2 = x[y_pos] - nodes[node_number, 1]
8 eqs[y_pos] = eq2
9 eq3 = x[z_pos] - nodes[node_number, 2]
10 eqs[z_pos] = eq3
11 # Return True if the node is constrained, False otherwise.
12 return True
13 else:
14 return False

9.1.10 Free equations

9.1.10.1 Cables

The free equations for the cable are:


code_ff.ff._free_eqs_cable(x_a, x_b, y_a, y_b, z_a, z_b, prec, length, xn_a,
yn_a, zn_a, eqs)
Writes the equations for the unconstrained nodes of the cable elements.
The equations represent the nodal equilibrium in the x, y and z-direction and are ex-
pressed by the formula:
N
∑︁
(𝑥b − 𝑥a ) · 𝐹b /𝐿b = 0 (9.16)
b

Parameters
• x_a (float) – x-coordinate of the first node of the cable.
• y_a (float) – y-coordinate of the first node of the cable.
• z_a (float) – z-coordinate of the first node of the cable.
• x_b (float) – x-coordinate of the second node of the cable.
• y_b (float) – y-coordinate of the second node of the cable.
• z_b (float) – z-coordinate of the second node of the cable.
• prec (ndarray) – numpy array containing the pretension of the
cables as a force in vector form; the index represents the position of
the cable element in the cable array, whereas the vector component
the pretension itself.

9.1. Code structure 267


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• length (float) – length of considered cable computed with the


auxiliary function.
• xn_a (int) – x-position of the node in the stacked vector of both
unknowns and equations.
• yn_a (int) – y-position of the node in the stacked vector of both
unknowns and equations.
• zn_a (int) – z-position of the node in the stacked vector of both
unknowns and equations.
• eqs (ndarray) – equations for the combined method of the force
and stress density method. The equations are stacked as the vector of
unknowns, which means that the x, y and z-coordinates are vertically
appended.
Returns side effect modifying the numerical equations for the form-finding
process.
Return type None

Code block 9.12: Equations for the unconstrained nodes ac-


cording to the force density method.
1 def _free_eqs_cable(x_a, x_b, y_a, y_b, z_a, z_b, prec, length, xn_a,
2 # Compute the contribution to the force density method of the
3 # current cable element and sum it in the right position in the
4 # stacked vector of numerical equations.
5 eq1 = (x_b - x_a) * prec
6 eqs[xn_a] += eq1
7 eq2 = (y_b - y_a) * prec
8 eqs[yn_a] += eq2
9 eq3 = (z_b - z_a) * prec
10 eqs[zn_a] += eq3

9.1.10.2 Membrane

The free equations for the membrane are:


code_ff.ff._free_eqs_membr(node_x, node_y, node_z, tx, ty, tz, eqs)
Writes the equations for the unconstrained nodes of the membrane elements.
The equations represent the nodal equilibrium in the x, y and z-direction and are ex-
pressed by the formula:
M
∑︁
𝐿2i 𝑡i 𝑄s 𝑛i = 0 (9.17)
i

where the index ‘i’ spans all the sides opposite to the considered node.
Parameters
• node_x (int) – x-position of the node in the stacked vector of both
unknowns and equations.

268 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• node_y (int) – y-position of the node in the stacked vector of both


unknowns and equations.
• node_z (int) – z-position of the node in the stacked vector of both
unknowns and equations.
• tx (float) – tension in the x-direction applied to the considered
node computed with the auxiliary function.
• ty (float) – tension in the y-direction applied to the considered
node computed with the auxiliary function.
• tz (float) – tension in the z-direction applied to the considered
node computed with the auxiliary function.
• eqs (ndarray) – equations for the combined method of the force
and stress density method. The equations are stacked as the vector of
unknowns, which means that the x, y and z-coordinates are vertically
appended.
Returns side effect modifying the numerical equations for the form-finding
process.
Return type None

Code block 9.13: Equations for the unconstrained nodes ac-


cording to the stress density method.
1 def _free_eqs_membr(node_x, node_y, node_z, tx, ty, tz, eqs):
2 eqs[node_x] += tx
3 eqs[node_y] += ty
4 eqs[node_z] += tz

9.1.11 Wrapper for the objective function

The function passing the control to the form-finding algorithm is:


code_ff.ff.solve_ff(nodes, cable, membr, bcc, pretension_cable, preten-
sion_membr, membr_thickness)
Passes the control to the form-finding objective function and starts the iterations.
The function is needed to gather the params to be submitted to Newton-Krylov, which by
default does not support the args tuple, but must be wrapped in the scipy.optimize.root
function.
Parameters
• nodes (ndarray) – numpy array containing the location of the
nodes before the form-finding process, given as a matrix, where the
row index represents the node number minus one, and the three
columns the x, y and z-coordinates. The mesh can also contain
sharp changes, but the topology of the boundaries must be strictly
respected.

9.1. Code structure 269


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• cable (ndarray) – numpy array containing the definition of the


two-nodes cable elements, in matrix form, where the first columns
represents the element number, the second and third instead the con-
nected nodes.
• membr (ndarray) –
• bcc (set) – contains the nodes to be pinned during the form-finding
procedure.
• pretension_cable (ndarray) – numpy array containing the
pretension of the cables as a force in vector form; the index represents
the position of the cable element in the cable array, whereas the vector
component the pretension itself.
• pretension_membr (ndarray) – numpy array containing the
pretension of the membrane as a stress in vector form; the index rep-
resents the position of the membrane element in the membrane array,
whereas the vector component the pretension itself.
• membr_thickness (ndarray) – numpy array containing the
thicknesses of the membrane, with the same structures as outlined
for pretension_cable or pretension_membr.
Returns numpy ndarray containing the final coordinates computed with the
form-finding process.The final coordinates are stacked as in nodes.
Return type ndarray(float)

Code block 9.14: Wrapper function to instruct the form-


finding algorithm.
1 def solve_ff(nodes, cable, membr, bcc, pretension_cable, pretension_membr,
2 membr_thickness):
3 # Compute the shape of the nodes, cable and membrane elements.
4 number_nodes = nodes.shape[0]
5 number_cable = cable.shape[0]
6 number_membr = membr.shape[0]
7 # Compute the total number of degrees of freedom.
8 number_eqs = 3 * number_nodes
9 # The tentative solution to be supplied to the Newton-Krylov solver
10 # is the undeformed configuration retrieved by the mesh file.
11 tentative_solution = np.concatenate((nodes[:, 0], nodes[:, 1],
12 nodes[:, 2]))
13 # Invoke the Newton-Krylov solver passing the arguments read from
14 # the files supplied by the user.
15 # Additional options are passed too, to control the iteration
16 # process and the Jacobian calculation.
17 soluzione = optim.root(
18 ff_obj,
19 tentative_solution,
20 method="krylov",
21 args=(number_nodes, number_cable, number_membr, number_eqs, nodes,
22 cable, membr, bcc, pretension_cable, pretension_membr,
23 membr_thickness),
(continues on next page)

270 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


24 options={
25 "maxiter": 2500,
26 "line_search": "armijo",
27 "fatol": 0.1,
28 "jac_options": {
29 "method": "lgmres",
30 },
31 "disp": True,
32 }
33 )
34
35 # Final coordinates are stacked in a vector; they are here
36 # transformed in a matrix to support the format implemented in the
37 # interface of the parser.
38 final_coordinates = np.column_stack(
39 (soluzione.x[0:number_nodes],
40 soluzione.x[number_nodes:2 * number_nodes],
41 soluzione.x[2 * number_nodes:]))
42
43 return final_coordinates

9.1.12 Form-finding objective function

The actual form-finding algorithm is:


code_ff.ff.ff_obj(x, number_nodes, number_cable, number_membr, num-
ber_eqs, nodes, cable, membr, bcc, pretension_cable, preten-
sion_membr, membr_thickness)
Solve the form-finding problem for cable and membrane structures by means of the com-
bined theory of the force density and stress density method.
The method is a modification of the traditional algorithm for the force or stress density
method. The input parameters are not divided between free and constrained nodes to
avoid the overhead of the creation of the connectivity matrix, whose form is not trivial
for the nodes shared by both cables and membranes. On the other hand, for the con-
strained nodes, trivial equations which are automatically satisfied are written, whereas
for unconstrained nodes the traditional approach is followed.
Parameters
• x (ndarray) – numpy vector containing the unknowns of the prob-
lem; in this case, the final coordinates obtained by means of the form
finding process.The vector is stacked, which means that the x, y and
z-coordinates are appended vertically before being processed.
• number_nodes (int) – number of the nodes computed by the
shape of the corresponding array.
• number_cable (int) – number of the cable elements computed
by the shape of the corresponding array.
• number_membr (int) – number of the membrane elements com-
puted by the shape of the corresponding array.

9.1. Code structure 271


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

• number_eqs (int) – number of the equations, equal to the total


degrees of freedom, therefore three times the number of nodes.
• nodes (ndarray) – numpy array containing the location of the
nodes after the form-finding process, given as a matrix, where the row
index represents the node number minus one, and the three columns
the x, y and z-coordinates.
• cable (ndarray) – numpy array containing the definition of the
two-nodes cable elements, in matrix form, where the first columns
represents the element number, the second and third instead the con-
nected nodes.
• membr (ndarray) – numpy array containing the definition of the
three-nodes triangular membrane elements, in matrix form, where the
first column represents the element number, whereas the second, third
and fourth the connected nodes.
• bcc (set) – contains the nodes to be pinned during the form-finding
procedure.
• pretension_cable (ndarray) – numpy array containing the
pretension of the cables as a force in vector form; the index represents
the position of the cable element in the cable array, whereas the vector
component the pretension itself.
• pretension_membr (ndarray) – numpy array containing the
pretension of the membrane as a stress in vector form; the index rep-
resents the position of the membrane element in the membrane array,
whereas the vector component the pretension itself.
• membr_thickness (ndarray) – numpy array containing the
thicknesses of the membrane, with the same structures as outlined
for pretension_cable or pretension_membr.
Returns the equations defined by the combined theory of the force density
and stress density method.
Return type ndarray(float)

Code block 9.15: Form-finding for mixed cable and mem-


brane structures.
1 def ff_obj(x, number_nodes, number_cable, number_membr, number_eqs, nodes,
2 cable, membr, bcc, pretension_cable, pretension_membr,
3 membr_thickness):
4 # Preallocate the vector containing the equations for the
5 # form-finding procedure. The equations are not symbolic,
6 # but evaluated numerically at every iteration.
7 eqs = np.zeros(number_eqs)
8
9 # Iterate over the cable elements.
10 for ii in range(0, number_cable):
11 # Retrieve the index of the first and second node of the
(continues on next page)

272 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


12 # two-node cable element in the unknown array extracting both
13 # the x, y and z position.
14 cablen1 = cable[ii, 1] - 1
15 cablen1x = cable[ii, 1] - 1
16 cablen1y = cable[ii, 1] - 1 + number_nodes
17 cablen1z = cable[ii, 1] - 1 + 2 * number_nodes
18 cablen2 = cable[ii, 2] - 1
19 cablen2x = cable[ii, 2] - 1
20 cablen2y = cable[ii, 2] - 1 + number_nodes
21 cablen2z = cable[ii, 2] - 1 + 2 * number_nodes
22 # Create a reference in the correct positions to the array of
23 # the unknowns.
24 cable_1x = x[cablen1x]
25 cable_1y = x[cablen1y]
26 cable_1z = x[cablen1z]
27 cable_2x = x[cablen2x]
28 cable_2y = x[cablen2y]
29 cable_2z = x[cablen2z]
30 # Compute the length of the cable.
31 cable_len = _side_length(cable_1x, cable_1y, cable_1z, cable_2x,
32 cable_2y, cable_2z)
33 # Extract the pretension of the cable on which we are iterating.
34 pre_cable = pretension_cable[ii]
35 # Check if the starting node is constrained; in that case,
36 # write a trivial equation, otherwise write the three equations
37 # for a unconstrained node.
38 if not _bcc_eqs(cablen1, cablen1x, cablen1y, cablen1z, nodes, eqs,
39 x, bcc):
40 # Write the three equations for the unconstrained node.
41 _free_eqs_cable(cable_1x, cable_2x, cable_1y, cable_2y,
42 cable_1z, cable_2z, pre_cable, cable_len,
43 cablen1x, cablen1y, cablen1z, eqs)
44 # Check if the end node is constrained; in that case,
45 # write a trivial equation, otherwise write the three equations
46 # for a unconstrained node.
47 if not _bcc_eqs(cablen2, cablen2x, cablen2y, cablen2z, nodes, eqs,
48 x, bcc):
49 # Write the three equations for the unconstrained node.
50 _free_eqs_cable(cable_2x, cable_1x, cable_2y, cable_1y,
51 cable_2z, cable_1z, pre_cable, cable_len,
52 cablen2x, cablen2y, cablen2z, eqs)
53
54 # Iterate over the three-node membrane elements.
55 for ii in range(0, number_membr):
56 # Retrieve the index of the first, second and third node of the
57 # three-node membrane element in the unknown array extracting both
58 # the x, y and z position.
59 membrn1 = membr[ii, 1] - 1
60 membrn1x = membr[ii, 1] - 1
61 membrn1y = membr[ii, 1] - 1 + number_nodes
62 membrn1z = membr[ii, 1] - 1 + 2 * number_nodes
63 membrn2 = membr[ii, 2] - 1
64 membrn2x = membr[ii, 2] - 1
65 membrn2y = membr[ii, 2] - 1 + number_nodes
66 membrn2z = membr[ii, 2] - 1 + 2 * number_nodes
67 membrn3 = membr[ii, 3] - 1
(continues on next page)

9.1. Code structure 273


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


68 membrn3x = membr[ii, 3] - 1
69 membrn3y = membr[ii, 3] - 1 + number_nodes
70 membrn3z = membr[ii, 3] - 1 + 2 * number_nodes
71 # Create a reference in the correct positions to the array of
72 # the unknowns.
73 membr_1x = x[membrn1x]
74 membr_2x = x[membrn2x]
75 membr_3x = x[membrn3x]
76 membr_1y = x[membrn1y]
77 membr_2y = x[membrn2y]
78 membr_3y = x[membrn3y]
79 membr_1z = x[membrn1z]
80 membr_2z = x[membrn2z]
81 membr_3z = x[membrn3z]
82 # Compute the length of the cable.
83 membrn1n2len = _side_length(membr_1x, membr_1y, membr_1z, membr_2x,
84 membr_2y, membr_2z)
85 membrn2n3len = _side_length(membr_2x, membr_2y, membr_2z, membr_3x,
86 membr_3y, membr_3z)
87 membrn3n1len = _side_length(membr_3x, membr_3y, membr_3z, membr_1x,
88 membr_1y, membr_1z)
89 # Area of the membrane element computed with Erone's formula.
90 membr_sup = _membr_area(membrn1n2len, membrn2n3len, membrn3n1len)
91 # Extract the pretension of the current membrane element.
92 pre_membr = pretension_membr[ii]
93 # Extract the thickness of the current membrane element.
94 thickness = membr_thickness[ii]
95 # If the third node of the membrane is constrained, write the
96 # trivial equations.
97 if not _bcc_eqs(membrn3, membrn3x, membrn3y, membrn3z, nodes, eqs,
98 x, bcc):
99 # If the third node is instead unconstrained, write the
100 # three equations for the free node.
101 # First of all, we compute the normal to the opposite side
102 # of the triangle; after having extracted the vector,
103 # we multiply it by the height of the triangle itself.
104 normal_membr_n1n2 = _membr_normal(membr_1x, membr_1y, membr_1z,
105 membr_2x, membr_2y, membr_2z,
106 membr_3x, membr_3y, membr_3z,
107 membrn1n2len)
108 # Compute the nodal force for node three in the x-direction.
109 tc_membr_n1n2_x = _membr_tension(membrn1n2len, thickness,
110 membr_sup, pre_membr,
111 normal_membr_n1n2[0])
112 # Compute the nodal force for node three in the y-direction.
113 tc_membr_n1n2_y = _membr_tension(membrn1n2len, thickness,
114 membr_sup, pre_membr,
115 normal_membr_n1n2[1])
116 # Compute the nodal force for node three in the z-direction.
117 tc_membr_n1n2_z = _membr_tension(membrn1n2len, thickness,
118 membr_sup, pre_membr,
119 normal_membr_n1n2[2])
120 # Submit all the params to the function delegate to the
121 # writing of the unconstrained equations.
122 _free_eqs_membr(membrn3x, membrn3y, membrn3z, tc_membr_n1n2_x,
123 tc_membr_n1n2_y, tc_membr_n1n2_z, eqs)
(continues on next page)

274 Chapter 9. Form-finding for pretensioned cable and membrane structures


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


124 # If the first node of the membrane is constrained, write the
125 # trivial equations.
126 if not _bcc_eqs(membrn1, membrn1x, membrn1y, membrn1z, nodes, eqs,
127 x, bcc):
128 # First of all, we compute the normal to the opposite side
129 # of the triangle; after having extracted the vector,
130 # we multiply it by the height of the triangle itself.
131 normal_membr_n2n3 = _membr_normal(membr_2x, membr_2y, membr_2z,
132 membr_3x, membr_3y, membr_3z,
133 membr_1x, membr_1y, membr_1z,
134 membrn2n3len)
135 # Compute the nodal force for node one in the x-direction.
136 tc_membr_n2n3_x = _membr_tension(membrn2n3len, thickness,
137 membr_sup, pre_membr,
138 normal_membr_n2n3[0])
139 # Compute the nodal force for node one in the y-direction.
140 tc_membr_n2n3_y = _membr_tension(membrn2n3len, thickness,
141 membr_sup, pre_membr,
142 normal_membr_n2n3[1])
143 # Compute the nodal force for node one in the z-direction.
144 tc_membr_n2n3_z = _membr_tension(membrn2n3len, thickness,
145 membr_sup, pre_membr,
146 normal_membr_n2n3[2])
147 # Submit all the params to the function delegate to the
148 # writing of the unconstrained equations.
149 _free_eqs_membr(membrn1x, membrn1y, membrn1z, tc_membr_n2n3_x,
150 tc_membr_n2n3_y, tc_membr_n2n3_z, eqs)
151 # If the second node of the membrane is constrained, write the
152 # trivial equations.
153 if not _bcc_eqs(membrn2, membrn2x, membrn2y, membrn2z, nodes, eqs,
154 x, bcc):
155 # First of all, we compute the normal to the opposite side
156 # of the triangle; after having extracted the vector,
157 # we multiply it by the height of the triangle itself.
158 normal_membr_n3n1 = _membr_normal(membr_3x, membr_3y, membr_3z,
159 membr_1x, membr_1y, membr_1z,
160 membr_2x, membr_2y, membr_2z,
161 membrn3n1len)
162 # Compute the nodal force for node two in the x-direction.
163 tc_membr_n3n1_x = _membr_tension(membrn3n1len,
164 thickness, membr_sup,
165 pre_membr,
166 normal_membr_n3n1[0])
167 # Compute the nodal force for node two in the y-direction.
168 tc_membr_n3n1_y = _membr_tension(membrn3n1len, thickness,
169 membr_sup, pre_membr,
170 normal_membr_n3n1[1])
171 # Compute the nodal force for node two in the z-direction.
172 tc_membr_n3n1_z = _membr_tension(membrn3n1len, thickness,
173 membr_sup, pre_membr,
174 normal_membr_n3n1[2])
175 # Submit all the params to the function delegate to the
176 # writing of the unconstrained equations.
177 _free_eqs_membr(membrn2x, membrn2y, membrn2z, tc_membr_n3n1_x,
178 tc_membr_n3n1_y, tc_membr_n3n1_z, eqs)
179
(continues on next page)

9.1. Code structure 275


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


180 # Return the computed equations in numeric form.
181 return eqs

276 Chapter 9. Form-finding for pretensioned cable and membrane structures


CHAPTER 10

Verification of the form-finding algorithm

This section is devoted to the verification of the results of the algo deeply described in the
previous Chapter 9. The logical reasoning followed is to initially compute the shape of a plane
cable net and to check that the FDM (Chapter 2) is properly implemented in the the code. After
that a three-dimensional cable net has been tested, the attention was moved to the membrane
structures. In order to verify the correct coding of the SSDM (Chapter 3) a 3D hypar membrane,
constrained at its edges, has been analysed with our algorithm and compared with the results
coming from Dlubal. Once the previous examples have been proved to match the benchmarks,
two other cases of membrane with collaborating cables have been developed and tested.
Tests are run with the following wrapper function that retrieves the desired test case in binary
format in hdf5 and asserts the positiveness of the test.
test_ff_clc._retrieve_and_test_ff(test_path)
Wrapper function to be used in the actual test functions. It executes the form finding
procedure and checks if the prescribed tolerance is met with respect to the test case.
Parameters test_path (str) – path to the case test in hdf5 format.
Returns asserts the positiveness of the test if the latter passed.
Return type None

Code block 10.1: Wrapper function to execute the tests for


the form-finding.
1 import pytest
2 import os
3 import h5py
4 from code_ff.ff import solve_ff
5
6
7 def _retrieve_and_test_ff(test_path):
(continues on next page)

277
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


8 with h5py.File(test_path, 'r') as fin:
9 final_coordinates = solve_ff(
10 fin["mesh/nodes"], fin["mesh/cable"], fin["mesh/membr"],
11 fin["static/bcc"], fin["static/pretension_cable"],
12 fin["static/membr_thickness"],
13 fin["static/pretension_membr"])
14 # Check if the coordinates computed by test are an approximation
15 # of the ones calculated previously for the case test.
16 assert fin["resu/final_coordinates"].value == pytest.approx(
17 final_coordinates, 1e-6)

10.1 Cable net

10.1.1 Introduction

The first example is a plane square cable net which is pretensioned with the same force density
for all the cables; clearly, the cables on the borders will have a higher axial force since the
form-finding will privilege their elongation with respect to the central ones.

10.1.2 Test definition

The test suite includes a test case for a plane square cable net which is also compared graphi-
cally to the same result in Dlubal.
test_ff_clc.test_net()
The form-finding procedure is tested against a simple square cable net with dimension
8m x 8m with 5 cables in each direction. The cable net is hinged at its corners. As for
the material, the cables share a cross-section of 50𝑚𝑚2 and Young modulus of 160GPa.
The coefficient of thermal expansion is set to the real value 1.2 · 10−5 even though it is
just a fictitious value to simulate the inelastic deformation due to the prestressing of the
cables.
The test stresses only the part of algorithm concerning the force density method.
Returns asserts the positiveness of the test.
Return type None

Code block 10.2: Test function for the form-finding of a cable


net.
1 def test_net():
2 _retrieve_and_test_ff(
3 os.path.abspath(
4 "src/python/fsd_calculix/tests/cable_net/form-finding"
5 ".hdf5"))

278 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.1.3 Pre-processing

The cable net is drawn in gmsh and then exported the Abaqus compatible format used by
Calculix.

Code block 10.3: Mesh in gmsh of the cable net before the
form-finding process.
1 // Mesh for a cable net with dimension 8m x 8m with 5 cables in each
2 // direction.
3

4 // Characteristic length that sets the target element size of each point.
5 lc = 100;
6
7 // Nodes geometry defining the connections between the cables.
8 Point(1) = {0, 0, 0, lc};
9 Point(2) = {2, 0, 0, lc};
10 Point(3) = {4, 0, 0, lc};
11 Point(4) = {6, 0, 0, lc};
12 Point(5) = {8, 0, 0, lc};
13 Point(6) = {0, 2, 0, lc};
14 Point(7) = {0, 4, 0, lc};
15 Point(8) = {0, 6, 0, lc};
16 Point(9) = {0, 8, 0, lc};
17 Point(10) = {2, 2, 0, lc};
18 Point(11) = {2, 4, 0, lc};
19 Point(12) = {2, 6, 0, lc};
20 Point(13) = {2, 8, 0, lc};
21 Point(14) = {4, 2, 0, lc};
22 Point(15) = {4, 4, 0, lc};
23 Point(16) = {4, 6, 0, lc};
24 Point(17) = {4, 8, 0, lc};
25 Point(18) = {6, 2, 0, lc};
26 Point(19) = {6, 4, 0, lc};
27 Point(20) = {6, 6, 0, lc};
28 Point(21) = {6, 8, 0, lc};
29 Point(22) = {8, 2, 0, lc};
30 Point(23) = {8, 4, 0, lc};
31 Point(24) = {8, 6, 0, lc};
32 Point(25) = {8, 8, 0, lc};
33
34 // Geometrical lines defining each part of the cables.
35 Line(1) = {1, 6};
36 Line(2) = {6, 7};
37 Line(3) = {7, 8};
38 Line(4) = {8, 9};
39 Line(5) = {9, 13};
40 Line(6) = {13, 12};
41 Line(7) = {12, 8};
42 Line(8) = {12, 11};
43 Line(9) = {11, 7};
44 Line(10) = {6, 10};
45 Line(11) = {1, 2};
46 Line(12) = {2, 3};
47 Line(13) = {3, 14};
48 Line(14) = {14, 10};
(continues on next page)

10.1. Cable net 279


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


49 Line(15) = {10, 11};
50 Line(16) = {11, 15};
51 Line(17) = {15, 16};
52 Line(18) = {16, 20};
53 Line(19) = {12, 16};
54 Line(20) = {16, 17};
55 Line(21) = {17, 13};
56 Line(22) = {17, 21};
57 Line(23) = {21, 25};
58 Line(24) = {25, 24};
59 Line(25) = {24, 20};
60 Line(26) = {20, 21};
61 Line(27) = {20, 19};
62 Line(28) = {19, 18};
63 Line(29) = {18, 4};
64 Line(30) = {4, 5};
65 Line(31) = {5, 22};
66 Line(32) = {22, 23};
67 Line(33) = {23, 24};
68 Line(34) = {23, 19};
69 Line(35) = {19, 15};
70 Line(36) = {15, 14};
71 Line(37) = {14, 18};
72 Line(38) = {18, 22};
73 Line(39) = {3, 4};
74 Line(40) = {2, 10};
75
76
77 // Force gmsh to export the 1D elems.
78 maxLines = 1000000;
79 elemEnd = maxLines; // all elements in a huge model
80 Physical Line(maxLines) = {1:elemEnd};
81
82 // Geometry options for the display.
83 Geometry.LineNumbers = 1;
84 Geometry.PointNumbers = 1;
85
86 // We have only cables in the model, no 2D or 3D elements.
87 Mesh 1;
88
89 // Save the mesh to gmsh format for inspection.
90 Save "cable_net.msh";
91 // Save the mesh to an Abaqus compatible format for Calculix.
92 Mesh.Format = 39;
93 Save "cable_net_gmsh.inp";
94
95 // Save an image of the mesh.
96 Print "cable_net.png";

Code block 10.4: Mesh in Calculix of the cable net before


the form-finding process.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/cable_net/cable_net_gmsh.inp

(continues on next page)

280 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.1: Topology of the plane cable net.

(continued from previous page)


3 *NODE
4 1, 0, 0, 0
5 2, 2, 0, 0
6 3, 4, 0, 0
7 4, 6, 0, 0
8 5, 8, 0, 0
9 6, 0, 2, 0
10 7, 0, 4, 0
11 8, 0, 6, 0
12 9, 0, 8, 0
13 10, 2, 2, 0
14 11, 2, 4, 0
15 12, 2, 6, 0
16 13, 2, 8, 0
17 14, 4, 2, 0
18 15, 4, 4, 0
19 16, 4, 6, 0
20 17, 4, 8, 0
21 18, 6, 2, 0
22 19, 6, 4, 0
23 20, 6, 6, 0
24 21, 6, 8, 0
25 22, 8, 2, 0
26 23, 8, 4, 0
27 24, 8, 6, 0
28 25, 8, 8, 0
29 ******* E L E M E N T S *************
30 *ELEMENT, type=T3D2, ELSET=Line1
31 26, 1, 6
32 *ELEMENT, type=T3D2, ELSET=Line2
33 27, 6, 7
34 *ELEMENT, type=T3D2, ELSET=Line3
35 28, 7, 8
36 *ELEMENT, type=T3D2, ELSET=Line4
37 29, 8, 9

(continues on next page)

10.1. Cable net 281


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


38 *ELEMENT, type=T3D2, ELSET=Line5
39 30, 9, 13
40 *ELEMENT, type=T3D2, ELSET=Line6
41 31, 13, 12
42 *ELEMENT, type=T3D2, ELSET=Line7
43 32, 12, 8
44 *ELEMENT, type=T3D2, ELSET=Line8
45 33, 12, 11
46 *ELEMENT, type=T3D2, ELSET=Line9
47 34, 11, 7
48 *ELEMENT, type=T3D2, ELSET=Line10
49 35, 6, 10
50 *ELEMENT, type=T3D2, ELSET=Line11
51 36, 1, 2
52 *ELEMENT, type=T3D2, ELSET=Line12
53 37, 2, 3
54 *ELEMENT, type=T3D2, ELSET=Line13
55 38, 3, 14
56 *ELEMENT, type=T3D2, ELSET=Line14
57 39, 14, 10
58 *ELEMENT, type=T3D2, ELSET=Line15
59 40, 10, 11
60 *ELEMENT, type=T3D2, ELSET=Line16
61 41, 11, 15
62 *ELEMENT, type=T3D2, ELSET=Line17
63 42, 15, 16
64 *ELEMENT, type=T3D2, ELSET=Line18
65 43, 16, 20
66 *ELEMENT, type=T3D2, ELSET=Line19
67 44, 12, 16
68 *ELEMENT, type=T3D2, ELSET=Line20
69 45, 16, 17
70 *ELEMENT, type=T3D2, ELSET=Line21
71 46, 17, 13
72 *ELEMENT, type=T3D2, ELSET=Line22
73 47, 17, 21
74 *ELEMENT, type=T3D2, ELSET=Line23
75 48, 21, 25
76 *ELEMENT, type=T3D2, ELSET=Line24
77 49, 25, 24
78 *ELEMENT, type=T3D2, ELSET=Line25
79 50, 24, 20
80 *ELEMENT, type=T3D2, ELSET=Line26
81 51, 20, 21
82 *ELEMENT, type=T3D2, ELSET=Line27
83 52, 20, 19
84 *ELEMENT, type=T3D2, ELSET=Line28
85 53, 19, 18
86 *ELEMENT, type=T3D2, ELSET=Line29
87 54, 18, 4
88 *ELEMENT, type=T3D2, ELSET=Line30
89 55, 4, 5
90 *ELEMENT, type=T3D2, ELSET=Line31
91 56, 5, 22
92 *ELEMENT, type=T3D2, ELSET=Line32
93 57, 22, 23
(continues on next page)

282 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


94 *ELEMENT, type=T3D2, ELSET=Line33
95 58, 23, 24
96 *ELEMENT, type=T3D2, ELSET=Line34
97 59, 23, 19
98 *ELEMENT, type=T3D2, ELSET=Line35
99 60, 19, 15
100 *ELEMENT, type=T3D2, ELSET=Line36
101 61, 15, 14
102 *ELEMENT, type=T3D2, ELSET=Line37
103 62, 14, 18
104 *ELEMENT, type=T3D2, ELSET=Line38
105 63, 18, 22
106 *ELEMENT, type=T3D2, ELSET=Line39
107 64, 3, 4
108 *ELEMENT, type=T3D2, ELSET=Line40
109 65, 2, 10
110 *ELSET,ELSET=PhysicalLine1000000
111 28, 27, 26, 29, 30, 31, 32, 33, 34, 35,
112 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
113 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
114 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,

10.1.4 Problem definition

The mechanical and geometric properties of the cable net are here assigned. No specific over-
rides are employed.

10.1. Cable net 283


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.5: File for the definition of the form-finding


problem.
1 CHARACTERISTICLENGTH
2 2.0
3 BCC
4 1
5 5
6 9
7 25
8 PRECABLE
9 1000.0
10 1 1000.0
11 CABLEAREA
12 50.24e-6
13 1 50.24e-6
14 CABLEYOUNG
15 160E9
16 1 160E9
17 CABLEEXPANSION
18 1.2E-5
19 1 1.2E-5
20 ENDINPUT

10.1.5 Solution deck

The solution deck is a Calculix file which will act as a placeholder for processing phase of
the form-finding in Python. The thermal loads to simulate the prestressing will be added here
automatically.

Code block 10.6: Solution deck in Calculix for the analysis


of the cable net after the form-finding.
1 ** Include the new mesh generated by the form finding algorithm
2 ** with the nodal coordinates after the optimization process.
3 *INCLUDE, INPUT=all.msh
4
5 ** Assign a simple linear elastic istropic steel to the cables.
6 *MATERIAL, NAME=steel
7 *ELASTIC
8 160e9, 0.3
9 * EXPANSION, TYPE=ISO, ZERO=0.0
10 1.2e-5, 0.0
11
12 ** Cross-section of the cables.
13 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
14 50.24e-6
15

16 ** Impose a null temperature field on all nodes at T0.


17 *INITIAL CONDITIONS, TYPE=TEMPERATURE
18 Nall, 0.0
19
20 ** Dirichlet boundary conditions for the 4 side pins.
(continues on next page)

284 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


21 *BOUNDARY
22 1, 1, 3
23 5, 1, 3
24 9, 1, 3
25 25, 1, 3
26
27 ** Nonlinear static analysis, request for fixed time incrementation.
28 ** Apply the prestress and request for nodal displacements and reaction
29 ** forces, element section forces and generalised strains.
30 *STEP, NLGEOM
31 *STATIC, SOLVER=SPOOLES, DIRECT
32 0.01, 1.0, , 0.05
33 *NODE FILE
34 U, RF
35 *EL FILE, OUTPUT=2D, SECTION FORCES
36 S, E
37 *END STEP

10.1.6 Orchestrating scripts

Both the pre and post-processing and the finite element solution are automated by a script in
cgx in Calculix.

Code block 10.7: Pre-post processing file in Calculix for the


verification of the form-finding of the cable net.
1 # read the mesh exported by the form-finding algorithm.
2 read form_finding_resu.inp
3

4 view fill
5 rot z
6 hcpy png
7 sys sleep 1
8 sys mv hcpy_1.png form_finding_cable_net_resu_mesh_fill.png
9

10 view line
11 rot z
12 hcpy png
13 sys sleep 1
14 sys mv hcpy_2.png form_finding_cable_net_resu_mesh_line.png
15

16 # save the mesh and groups to file to be recovered by ccx


17 send all abq
18
19 # change element type from beam to truss.
20 sys sed -i "s/B31/T3D2/g" all.msh
21

22 # solve the finite element model with ccx after the edits of the
23 # form-finding algo.
24 sys ccx_2.14 form_finding_solve
25
26 # read the results of the analysis and load them in memory.
27 read form_finding_solve.frd
(continues on next page)

10.1. Cable net 285


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


28
29 # contour plots
30 view fill
31 rot z
32 ds -4 e 4
33 plot fv all
34 sys sleep 1
35 hcpy png
36 sys mv hcpy_3.png form_finding_cable_net_resu_um.png
37
38 view disp off
39 rot z
40 ds -4 e 1
41 plot fv all
42 sys sleep 1
43 hcpy png
44 sys mv hcpy_4.png form_finding_cable_net_resu_ux.png
45
46 ds -4 e 2
47 plot fv all
48 sys sleep 1
49 hcpy png
50 sys mv hcpy_5.png form_finding_cable_net_resu_uy.png
51
52 sys montage form_finding_cable_net_resu_ux.png form_finding_cable_net_resu_
˓→uy.png -tile 2x1 -geometry +0+0 form_finding_cable_net_resu_uxy.png

53
54 ds -4 e 3
55 plot fv all
56 sys sleep 1
57 hcpy png
58 sys mv hcpy_6.png form_finding_cable_net_resu_uz.png
59
60 ds -3 e 3
61 plot fv all
62 sys sleep 1
63 hcpy png
64 sys mv hcpy_7.png form_finding_cable_net_resu_sxx.png
65
66 ds -2 e 3
67 plot fv all
68 sys sleep 1
69 hcpy png
70 sys mv hcpy_8.png form_finding_cable_net_resu_exx.png
71
72 sys montage form_finding_cable_net_resu_sxx.png form_finding_cable_net_
˓→resu_exx.png -tile 2x1 -geometry +0+0 form_finding_cable_net_resu_se.png
73
74 # switch back to deformed shape.
75 rot z
76 ds -4 e 4
77 plot fv all

286 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.8: Bash script to start the verification of the


form-finding of the cable net.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-net.fbd

10.1.7 Form-finding geometry

The mesh resulting from the form-finding algorithm is here listed.

Code block 10.9: Modified Calculix mesh with the new co-
ordinates of the cable net after the form-finding.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/cable_net/cable_net_gmsh.inp
3 *NODE
4 1, 0, 0, 0
5 1, 0.000000, 0.000000, 0.000000
6 2, 2.212766, 1.531917, 0.000000
7 3, 4.000001, 1.957451, 0.000000
8 4, 5.787236, 1.531917, 0.000000
9 5, 8.000000, 0.000000, 0.000000
10 6, 1.531918, 2.212766, 0.000000
11 7, 1.957453, 4.000001, 0.000000
12 8, 1.531918, 5.787234, 0.000000
13 9, 0.000000, 8.000000, 0.000000
14 10, 2.638303, 2.638304, 0.000000
15 11, 2.808515, 4.000003, 0.000000
16 12, 2.638304, 5.361698, 0.000000
17 13, 2.212765, 6.468072, 0.000000
18 14, 4.000003, 2.808515, 0.000000
19 15, 4.000005, 4.000005, 0.000000
20 16, 4.000003, 5.191478, 0.000000
21 17, 4.000001, 6.042540, 0.000000
22 18, 5.361698, 2.638303, 0.000000
23 19, 5.191481, 4.000003, 0.000000
24 20, 5.361699, 5.361698, 0.000000
25 21, 5.787234, 6.468072, 0.000000
26 22, 6.468074, 2.212766, 0.000000
27 23, 6.042534, 4.000001, 0.000000
28 24, 6.468074, 5.787236, 0.000000
29 25, 8.000000, 8.000000, 0.000000
30 ******* E L E M E N T S *************
31 *ELEMENT, type=T3D2, ELSET=Line1
32 26, 1, 6
33 *ELEMENT, type=T3D2, ELSET=Line2
34 27, 6, 7
35 *ELEMENT, type=T3D2, ELSET=Line3
36 28, 7, 8
37 *ELEMENT, type=T3D2, ELSET=Line4
38 29, 8, 9
39 *ELEMENT, type=T3D2, ELSET=Line5
(continues on next page)

10.1. Cable net 287


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


40 30, 9, 13
41 *ELEMENT, type=T3D2, ELSET=Line6
42 31, 13, 12
43 *ELEMENT, type=T3D2, ELSET=Line7
44 32, 12, 8
45 *ELEMENT, type=T3D2, ELSET=Line8
46 33, 12, 11
47 *ELEMENT, type=T3D2, ELSET=Line9
48 34, 11, 7
49 *ELEMENT, type=T3D2, ELSET=Line10
50 35, 6, 10
51 *ELEMENT, type=T3D2, ELSET=Line11
52 36, 1, 2
53 *ELEMENT, type=T3D2, ELSET=Line12
54 37, 2, 3
55 *ELEMENT, type=T3D2, ELSET=Line13
56 38, 3, 14
57 *ELEMENT, type=T3D2, ELSET=Line14
58 39, 14, 10
59 *ELEMENT, type=T3D2, ELSET=Line15
60 40, 10, 11
61 *ELEMENT, type=T3D2, ELSET=Line16
62 41, 11, 15
63 *ELEMENT, type=T3D2, ELSET=Line17
64 42, 15, 16
65 *ELEMENT, type=T3D2, ELSET=Line18
66 43, 16, 20
67 *ELEMENT, type=T3D2, ELSET=Line19
68 44, 12, 16
69 *ELEMENT, type=T3D2, ELSET=Line20
70 45, 16, 17
71 *ELEMENT, type=T3D2, ELSET=Line21
72 46, 17, 13
73 *ELEMENT, type=T3D2, ELSET=Line22
74 47, 17, 21
75 *ELEMENT, type=T3D2, ELSET=Line23
76 48, 21, 25
77 *ELEMENT, type=T3D2, ELSET=Line24
78 49, 25, 24
79 *ELEMENT, type=T3D2, ELSET=Line25
80 50, 24, 20
81 *ELEMENT, type=T3D2, ELSET=Line26
82 51, 20, 21
83 *ELEMENT, type=T3D2, ELSET=Line27
84 52, 20, 19
85 *ELEMENT, type=T3D2, ELSET=Line28
86 53, 19, 18
87 *ELEMENT, type=T3D2, ELSET=Line29
88 54, 18, 4
89 *ELEMENT, type=T3D2, ELSET=Line30
90 55, 4, 5
91 *ELEMENT, type=T3D2, ELSET=Line31
92 56, 5, 22
93 *ELEMENT, type=T3D2, ELSET=Line32
94 57, 22, 23
95 *ELEMENT, type=T3D2, ELSET=Line33
(continues on next page)

288 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


96 58, 23, 24
97 *ELEMENT, type=T3D2, ELSET=Line34
98 59, 23, 19
99 *ELEMENT, type=T3D2, ELSET=Line35
100 60, 19, 15
101 *ELEMENT, type=T3D2, ELSET=Line36
102 61, 15, 14
103 *ELEMENT, type=T3D2, ELSET=Line37
104 62, 14, 18
105 *ELEMENT, type=T3D2, ELSET=Line38
106 63, 18, 22
107 *ELEMENT, type=T3D2, ELSET=Line39
108 64, 3, 4
109 *ELEMENT, type=T3D2, ELSET=Line40
110 65, 2, 10
111 *ELSET,ELSET=PhysicalLine1000000
112 28, 27, 26, 29, 30, 31, 32, 33, 34, 35,
113 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
114 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
115 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,

10.1.8 Modified deck

The modified deck reports the thermal loads simulating the prestressing of the cable.

Code block 10.10: Modified Calculix deck with the thermal


loads for the cable net after the form-finding.
1 ** Include the new mesh generated by the form finding algorithm
2 ** with the nodal coordinates after the optimization process.
3 *INCLUDE, INPUT=all.msh
4
5 ** Assign a simple linear elastic istropic steel to the cables.
6 *MATERIAL, NAME=steel
7 *ELASTIC
8 160e9, 0.3
9 *EXPANSION, TYPE=ISO, ZERO=0.0
10 1.2e-5, 0.0
11
12 ** Cross-section of the cables.
13 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
14 50.24e-6
15

16 ** Impose a null temperature field on all nodes at T0.


17 *INITIAL CONDITIONS, TYPE=TEMPERATURE
18 Nall, 0.0
19
20 ** Dirichlet boundary conditions for the 4 side pins.
21 *BOUNDARY
22 1, 1, 3
23 5, 1, 3
24 9, 1, 3
25 25, 1, 3
(continues on next page)

10.1. Cable net 289


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


26
27 ** Nonlinear static analysis, request for fixed time incrementation.
28 ** Apply the prestress and request for nodal displacements and reaction
29 ** forces, element section forces and generalised strains.
30 *STEP, NLGEOM
31 *STATIC, SOLVER=SPOOLES, DIRECT
32 0.01, 1.0, , 0.05
33 *TEMPERATURE
34 1,-0.000000
35 2,-13.950234
36 3,-9.523016
37 4,-9.523016
38 5,-13.950227
39 6,-13.950236
40 7,-4.411438
41 8,-6.144460
42 9,-13.950234
43 10,-6.144463
44 11,-7.113232
45 12,-6.144404
46 13,-9.523017
47 14,-6.176035
48 15,-6.175959
49 16,-7.113238
50 17,-4.411444
51 18,-7.113212
52 19,-4.411391
53 20,-6.144410
54 21,-6.144397
55 22,-6.144414
56 23,-9.523024
57 24,-9.523024
58 25,-13.950266
59 *NODE FILE
60 U, RF
61 *EL FILE, OUTPUT=2D, SECTION FORCES
62 S, E
63 *END STEP

10.1.9 Post-processing

The post processing is also fully automated in Calculix; the contour plots of displacements,
stresses and strains are extracted, merged and printed on paper.

10.1.10 Dlubal comparison

Choosing the force density method in the graphical interface of the software, we show the per-
fect adherence between the algorithm developed in the thesis and the commercial algo proposed
by Dlubal.

290 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.2: Total displacements of the plane cable net.

10.3: Displacements in the x and y-direction of the plane cable net.

10.1. Cable net 291


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.4: Axial force and axial elongation of the plane cable net.

10.1.11 Conclusions

The force density method proves itself to be very effective for two main reasons:
1. The shape developed through the form-finding process are more visually pleasant with
respect to the pure force method. Inner cables are automatically less tensioned than
cables on the borders without having to assign each pretension in the cable.
2. The solution from a computational point of view is extremely fast, since the iterative
solver needs to solve a preconditioned linear system.

292 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.5: Check of the displacements and tension of a plane cable net.

10.1. Cable net 293


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.2 Anticlastic net

10.2.1 Introduction

This example shows the cabilities of the developed algorithm in the case of the analsyis of a 3D
cable structure of an anticlastic net, which has opposite curvatures at the center points, in partic-
ular curved convexly along a longitudinal plane section and concavely along the perpendicular
section.

10.2.2 Test definition

The test is started with the wrapper function of pytest and the initial guess of the solution,
prescribed while laying down the mesh in gmsh, is a linear interpolation of the nodes between
the position of the lower and higher supports.
test_ff_clc.test_net_anti()
The form-finding procedure is tested against a mesh for an anticlastic cable net with
dimension 5m x 5m with four cables for each direction, hinged at its edges. As for the
material, the cables share a cross-section of 50𝑚𝑚2 and Young modulus of 160GPa. The
coefficient of thermal expansion is set to the real value 1.2 · 10−5 even though it is just a
fictitious value to simulate the inelastic deformation due to the prestressing of the cables.
The test stresses only the part of algorithm concerning the force density method.
Returns asserts the positiveness of the test.
Return type None

Code block 10.11: Test function for the form-finding of an


anticlastic cable net.
1 def test_net_anti():
2 _retrieve_and_test_ff(
3 os.path.abspath(
4 "src/python/fsd_calculix/tests/cable_anticlastica/form-finding"
5 ".hdf5"))

10.2.3 Pre-processing

As usual, the mesh is prepared with a script in gmsh and then exported to Calculix in Abaqus
format. The same file is also exported to MED format for an eventual verification in code_aster.

Code block 10.12: Mesh script in gmsh to produce the mesh


of the anticlastic net.
1 // Mesh for an anticlastic cable net with dimension 5m x 5m with four
2 // cables for each direction.
3

(continues on next page)

294 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


4 // Characteristic length that sets the target element size of each point.
5 lc = 5;
6

7 // Point geoemtry defining the connections between the cables.


8 Point(1) = {0, 1, 1, lc};
9 Point(2) = {0, 2, 1, lc};
10 Point(3) = {0, 3, 1, lc};
11 Point(4) = {0, 4, 1, lc};
12 Point(5) = {1, 0, -1, lc};
13 Point(6) = {1, 1, 0, lc};
14 Point(7) = {1, 2, 0, lc};
15 Point(8) = {1, 3, 0, lc};
16 Point(9) = {1, 4, 0, lc};
17 Point(10) = {1, 5, -1, lc};
18 Point(11) = {2, 0, -1, lc};
19 Point(12) = {2, 1, 0, lc};
20 Point(13) = {2, 2, 0, lc};
21 Point(14) = {2, 3, 0, lc};
22 Point(15) = {2, 4, 0, lc};
23 Point(16) = {2, 5, -1, lc};
24 Point(17) = {3, 0, -1, lc};
25 Point(18) = {3, 1, 0, lc};
26 Point(19) = {3, 2, 0, lc};
27 Point(20) = {3, 3, 0, lc};
28 Point(21) = {3, 4, 0, lc};
29 Point(22) = {3, 5, -1, lc};
30 Point(23) = {4, 0, -1, lc};
31 Point(24) = {4, 1, 0, lc};
32 Point(25) = {4, 2, 0, lc};
33 Point(26) = {4, 3, 0, lc};
34 Point(27) = {4, 4, 0, lc};
35 Point(28) = {4, 5, -1, lc};
36 Point(29) = {5, 1, 1, lc};
37 Point(30) = {5, 2, 1, lc};
38 Point(31) = {5, 3, 1, lc};
39 Point(32) = {5, 4, 1, lc};
40
41 // Line geometry defining each piece of the cables.
42 Line(1) = {1, 6};
43 Line(2) = {2, 7};
44 Line(3) = {3, 8};
45 Line(4) = {4, 9};
46 Line(5) = {5, 6};
47 Line(6) = {6, 7};
48 Line(7) = {7, 8};
49 Line(8) = {8, 9};
50 Line(9) = {9, 10};
51 Line(10) = {6, 12};
52 Line(11) = {7, 13};
53 Line(12) = {8, 14};
54 Line(13) = {9, 15};
55 Line(14) = {11, 12};
56 Line(15) = {12, 13};
57 Line(16) = {13, 14};
58 Line(17) = {14, 15};
59 Line(18) = {15, 16};
(continues on next page)

10.2. Anticlastic net 295


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


60 Line(19) = {12, 18};
61 Line(20) = {13, 19};
62 Line(21) = {14, 20};
63 Line(22) = {15, 21};
64 Line(23) = {17, 18};
65 Line(24) = {18, 19};
66 Line(25) = {19, 20};
67 Line(26) = {20, 21};
68 Line(27) = {21, 22};
69 Line(28) = {18, 24};
70 Line(29) = {19, 25};
71 Line(30) = {20, 26};
72 Line(31) = {21, 27};
73 Line(32) = {23, 24};
74 Line(33) = {24, 25};
75 Line(34) = {25, 26};
76 Line(35) = {26, 27};
77 Line(36) = {27, 28};
78 Line(37) = {24, 29};
79 Line(38) = {25, 30};
80 Line(39) = {26, 31};
81 Line(40) = {27, 32};
82
83 // Force gmsh to export all the line geoemtry.
84 maxLines = 1000000;
85 elemEnd = maxLines; // all elements in a huge model
86 Physical Line(maxLines) = {1:elemEnd};
87
88 // Geometry options for the display.
89 Geometry.LineNumbers = 1;
90 Geometry.PointNumbers = 1;
91

92 // We only have 1D elements in the model, no 2D or 3D elems.


93 Mesh 1;
94
95 // Save the mesh in gmsh for inspection.
96 Save "cable_anticlastica.msh";
97 // Save the mesh to an Abaqus compatible format for gmsh.
98 Mesh.Format = 39;
99 Save "cable_anticlastica_gmsh.inp";
100
101 // Save the image of the mesh.
102 Print "cable_anticlastica.png";

Code block 10.13: Mesh of the anticlastic cable net in Cal-


culix.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/cable_anticlastica/cable_anticlastica_gmsh.inp
3 *NODE
4 1, 0, 1, 1
5 2, 0, 2, 1
6 3, 0, 3, 1
7 4, 0, 4, 1
(continues on next page)

296 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.6: Topology of the anticlastic cable net.

(continued from previous page)


8 5, 1, 0, -1
9 6, 1, 1, 0
10 7, 1, 2, 0
11 8, 1, 3, 0
12 9, 1, 4, 0
13 10, 1, 5, -1
14 11, 2, 0, -1
15 12, 2, 1, 0
16 13, 2, 2, 0
17 14, 2, 3, 0
18 15, 2, 4, 0
19 16, 2, 5, -1
20 17, 3, 0, -1
21 18, 3, 1, 0
22 19, 3, 2, 0
23 20, 3, 3, 0
24 21, 3, 4, 0
25 22, 3, 5, -1
26 23, 4, 0, -1
27 24, 4, 1, 0
28 25, 4, 2, 0
29 26, 4, 3, 0
30 27, 4, 4, 0
31 28, 4, 5, -1
32 29, 5, 1, 1
33 30, 5, 2, 1
34 31, 5, 3, 1
35 32, 5, 4, 1
36 ******* E L E M E N T S *************
(continues on next page)

10.2. Anticlastic net 297


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


37 *ELEMENT, type=T3D2, ELSET=Line1
38 33, 1, 6
39 *ELEMENT, type=T3D2, ELSET=Line2
40 34, 2, 7
41 *ELEMENT, type=T3D2, ELSET=Line3
42 35, 3, 8
43 *ELEMENT, type=T3D2, ELSET=Line4
44 36, 4, 9
45 *ELEMENT, type=T3D2, ELSET=Line5
46 37, 5, 6
47 *ELEMENT, type=T3D2, ELSET=Line6
48 38, 6, 7
49 *ELEMENT, type=T3D2, ELSET=Line7
50 39, 7, 8
51 *ELEMENT, type=T3D2, ELSET=Line8
52 40, 8, 9
53 *ELEMENT, type=T3D2, ELSET=Line9
54 41, 9, 10
55 *ELEMENT, type=T3D2, ELSET=Line10
56 42, 6, 12
57 *ELEMENT, type=T3D2, ELSET=Line11
58 43, 7, 13
59 *ELEMENT, type=T3D2, ELSET=Line12
60 44, 8, 14
61 *ELEMENT, type=T3D2, ELSET=Line13
62 45, 9, 15
63 *ELEMENT, type=T3D2, ELSET=Line14
64 46, 11, 12
65 *ELEMENT, type=T3D2, ELSET=Line15
66 47, 12, 13
67 *ELEMENT, type=T3D2, ELSET=Line16
68 48, 13, 14
69 *ELEMENT, type=T3D2, ELSET=Line17
70 49, 14, 15
71 *ELEMENT, type=T3D2, ELSET=Line18
72 50, 15, 16
73 *ELEMENT, type=T3D2, ELSET=Line19
74 51, 12, 18
75 *ELEMENT, type=T3D2, ELSET=Line20
76 52, 13, 19
77 *ELEMENT, type=T3D2, ELSET=Line21
78 53, 14, 20
79 *ELEMENT, type=T3D2, ELSET=Line22
80 54, 15, 21
81 *ELEMENT, type=T3D2, ELSET=Line23
82 55, 17, 18
83 *ELEMENT, type=T3D2, ELSET=Line24
84 56, 18, 19
85 *ELEMENT, type=T3D2, ELSET=Line25
86 57, 19, 20
87 *ELEMENT, type=T3D2, ELSET=Line26
88 58, 20, 21
89 *ELEMENT, type=T3D2, ELSET=Line27
90 59, 21, 22
91 *ELEMENT, type=T3D2, ELSET=Line28
92 60, 18, 24
(continues on next page)

298 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


93 *ELEMENT, type=T3D2, ELSET=Line29
94 61, 19, 25
95 *ELEMENT, type=T3D2, ELSET=Line30
96 62, 20, 26
97 *ELEMENT, type=T3D2, ELSET=Line31
98 63, 21, 27
99 *ELEMENT, type=T3D2, ELSET=Line32
100 64, 23, 24
101 *ELEMENT, type=T3D2, ELSET=Line33
102 65, 24, 25
103 *ELEMENT, type=T3D2, ELSET=Line34
104 66, 25, 26
105 *ELEMENT, type=T3D2, ELSET=Line35
106 67, 26, 27
107 *ELEMENT, type=T3D2, ELSET=Line36
108 68, 27, 28
109 *ELEMENT, type=T3D2, ELSET=Line37
110 69, 24, 29
111 *ELEMENT, type=T3D2, ELSET=Line38
112 70, 25, 30
113 *ELEMENT, type=T3D2, ELSET=Line39
114 71, 26, 31
115 *ELEMENT, type=T3D2, ELSET=Line40
116 72, 27, 32
117 *ELSET,ELSET=PhysicalLine1000000
118 34, 33, 35, 36, 37, 38, 39, 40, 41, 42,
119 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
120 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
121 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,

10.2.4 Problem definition

In the file for the problem definition, the section and coefficient of thermal expansion of the
cables are assigned to simulate the initial pretensioning of the cables. In addition, the boundary
conditions for the pins are prescribed. No particulr overrides, for both the static boundary
conditions and the geometric and mechanical properties of the material, are assigned.

Code block 10.14: Definition of the form-finding problem of


the anticlastic cable net.
1 CHARACTERISTICLENGTH
2 1.0
3 BCC
4 1
5 2
6 3
7 4
8 5
9 11
10 17
11 23
12 29
(continues on next page)

10.2. Anticlastic net 299


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


13 30
14 31
15 32
16 10
17 16
18 22
19 28
20 PRECABLE
21 1000.0
22 1 1000.0
23 CABLEAREA
24 50.24e-6
25 1 50.24e-6
26 CABLEYOUNG
27 160E9
28 1 160E9
29 CABLEEXPANSION
30 1.2E-5
31 1 1.2E-5
32 ENDINPUT

10.2.5 Solution deck

We report here the initial solution deck that act as a placeholder for the edits that will be
operated by the form-finding algorithm.

Code block 10.15: Solution deck in Calculix for the analysis


of the pretensioning of the anticlastic cable net.
1 ** Include all the mesh exported by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3
4 ** The material employed for the cables is a simple linear elastic
5 ** isotropic steel.
6 *MATERIAL, NAME=steel
7 *ELASTIC
8 160e9, 0.3
9 * EXPANSION, TYPE=ISO, ZERO=0.0
10 1.2e-5, 0.0
11
12 ** Cross-section of the cables.
13 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
14 50.24e-6
15
16 ** Null temperature field on all the nodes at T0.
17 *INITIAL CONDITIONS, TYPE=TEMPERATURE
18 Nall, 0.0
19
20 ** Dirichlet boundary conditions for the nodes at the edges.
21 *BOUNDARY
22 1, 1, 3
23 2, 1, 3
24 3, 1, 3
(continues on next page)

300 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


25 4, 1, 3
26 5, 1, 3
27 11, 1, 3
28 17, 1, 3
29 23, 1, 3
30 29, 1, 3
31 30, 1, 3
32 31, 1, 3
33 32, 1, 3
34 10, 1, 3
35 16, 1, 3
36 22, 1, 3
37 28, 1, 3
38
39 ** Nonlinear static analysis: requested fixed time incrementation,
40 ** and apply the prestress.
41 *STEP, NLGEOM
42 *STATIC, SOLVER=SPOOLES, DIRECT
43 0.01, 1.0, , 0.05
44 *NODE FILE
45 U, RF
46 *EL FILE, OUTPUT=2D, SECTION FORCES
47 S, E
48 *END STEP
49 ** Request nodal displacements and reaction forces, and element
50 ** stresses and strains. For the stresses, section forces rather
51 ** than stresses.

10.2.6 Orchestrating scripts

The solution process, both in terms of preprocessing in gmsh, solution in ccx and post-
processing in cgx is fully automated.

Code block 10.16: Pre-post file in Calculix for the analysis


workflow of the anticlastic net.
1 # read the mesh exported by the form-finding algorithm.
2 read form_finding_resu.inp
3
4 # save a preview of the mesh geometry, showing the thickness of
5 # the cables.
6 view fill
7 rot -z
8 rot u -45
9 rot c -30
10 hcpy png
11 sys sleep 1
12 sys mv hcpy_1.png form_finding_cable_anticlastica_resu_mesh_fill.png
13
14 # save the mesh as a wireframe.
15 view line
16 rot -z
17 rot u -45
(continues on next page)

10.2. Anticlastic net 301


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 rot c -30
19 hcpy png
20 sys sleep 1
21 sys mv hcpy_2.png form_finding_cable_anticlastica_resu_mesh_line.png
22
23 # save the mesh and groups to file to be recovered by ccx
24 send all abq
25
26 # change element type, from beam to truss.
27 sys sed -i "s/B31/T3D2/g" all.msh
28
29 # solve the modified model exported by the form-finding algorithm.
30 sys ccx_2.14 form_finding_solve
31
32 # read the results of the anlysis and load them in memory
33 read form_finding_solve.frd
34
35 # contour plots
36 view fill
37 rot -z
38 rot u -45
39 rot c -30
40 ds -4 e 4
41 plot fv all
42 sys sleep 1
43 hcpy png
44 sys mv hcpy_3.png form_finding_cable_anticlastica_resu_um.png
45
46 view disp off
47 ds -4 e 1
48 plot fv all
49 sys sleep 1
50 hcpy png
51 sys mv hcpy_4.png form_finding_cable_anticlastica_resu_ux.png
52
53 ds -4 e 2
54 plot fv all
55 sys sleep 1
56 hcpy png
57 sys mv hcpy_5.png form_finding_cable_anticlastica_resu_uy.png
58
59 sys montage form_finding_cable_anticlastica_resu_ux.png form_finding_cable_
˓→anticlastica_resu_uy.png -tile 2x1 -geometry +0+0 form_finding_cable_
˓→anticlastica_resu_uxy.png

60
61 ds -4 e 3
62 plot fv all
63 sys sleep 1
64 hcpy png
65 sys mv hcpy_6.png form_finding_cable_anticlastica_resu_uz.png
66
67 ds -3 e 3
68 plot fv all
69 sys sleep 1
70 hcpy png
71 sys mv hcpy_7.png form_finding_cable_anticlastica_resu_sxx.png
(continues on next page)

302 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


72
73 ds -2 e 3
74 plot fv all
75 sys sleep 1
76 hcpy png
77 sys mv hcpy_8.png form_finding_cable_anticlastica_resu_exx.png
78
79 sys montage form_finding_cable_anticlastica_resu_sxx.png form_finding_
˓→cable_anticlastica_resu_exx.png -tile 2x1 -geometry +0+0 form_finding_

˓→cable_anticlastica_resu_es.png
80
81
82 # switch back to the deformed shape
83 rot -z
84 rot u -45
85 rot c -30
86 view disp
87 ds -4 e 4
88 plot fv all

Code block 10.17: Bash script to start Calculix from the


command line for the anticlastic cable net.
1 #!/usr/bin/env bash
2 cgx_2.14 -b cable-anticlastica.fbd

10.2.7 Form-finding geometry

The initial mesh is modified according to the form-finding algorithm to prepare the input file
for subsequent analysis for possible live loads.

Code block 10.18: Modified Calculix with the updated nodes


after the form-finding of the anticlastic cable net.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/cable_anticlastica/cable_anticlastica_gmsh.inp
3 *NODE
4 1, 0, 1, 1
5 1, 0.000000, 1.000000, 1.000000
6 2, 0.000000, 2.000000, 1.000000
7 3, 0.000000, 3.000000, 1.000000
8 4, 0.000000, 4.000000, 1.000000
9 5, 1.000000, 0.000000, -1.000000
10 6, 1.000000, 1.000000, 0.000000
11 7, 1.000000, 2.000000, 0.333333
12 8, 1.000000, 3.000000, 0.333333
13 9, 1.000000, 4.000000, 0.000000
14 10, 1.000000, 5.000000, -1.000000
15 11, 2.000000, 0.000000, -1.000000
16 12, 2.000000, 1.000000, -0.333333
17 13, 2.000000, 2.000000, 0.000000
(continues on next page)

10.2. Anticlastic net 303


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 14, 2.000000, 3.000000, 0.000000
19 15, 2.000000, 4.000000, -0.333333
20 16, 2.000000, 5.000000, -1.000000
21 17, 3.000000, 0.000000, -1.000000
22 18, 3.000000, 1.000000, -0.333333
23 19, 3.000000, 2.000000, 0.000000
24 20, 3.000000, 3.000000, 0.000000
25 21, 3.000000, 4.000000, -0.333333
26 22, 3.000000, 5.000000, -1.000000
27 23, 4.000000, 0.000000, -1.000000
28 24, 4.000000, 1.000000, 0.000000
29 25, 4.000000, 2.000000, 0.333333
30 26, 4.000000, 3.000000, 0.333333
31 27, 4.000000, 4.000000, 0.000000
32 28, 4.000000, 5.000000, -1.000000
33 29, 5.000000, 1.000000, 1.000000
34 30, 5.000000, 2.000000, 1.000000
35 31, 5.000000, 3.000000, 1.000000
36 32, 5.000000, 4.000000, 1.000000
37 ******* E L E M E N T S *************
38 *ELEMENT, type=T3D2, ELSET=Line1
39 33, 1, 6
40 *ELEMENT, type=T3D2, ELSET=Line2
41 34, 2, 7
42 *ELEMENT, type=T3D2, ELSET=Line3
43 35, 3, 8
44 *ELEMENT, type=T3D2, ELSET=Line4
45 36, 4, 9
46 *ELEMENT, type=T3D2, ELSET=Line5
47 37, 5, 6
48 *ELEMENT, type=T3D2, ELSET=Line6
49 38, 6, 7
50 *ELEMENT, type=T3D2, ELSET=Line7
51 39, 7, 8
52 *ELEMENT, type=T3D2, ELSET=Line8
53 40, 8, 9
54 *ELEMENT, type=T3D2, ELSET=Line9
55 41, 9, 10
56 *ELEMENT, type=T3D2, ELSET=Line10
57 42, 6, 12
58 *ELEMENT, type=T3D2, ELSET=Line11
59 43, 7, 13
60 *ELEMENT, type=T3D2, ELSET=Line12
61 44, 8, 14
62 *ELEMENT, type=T3D2, ELSET=Line13
63 45, 9, 15
64 *ELEMENT, type=T3D2, ELSET=Line14
65 46, 11, 12
66 *ELEMENT, type=T3D2, ELSET=Line15
67 47, 12, 13
68 *ELEMENT, type=T3D2, ELSET=Line16
69 48, 13, 14
70 *ELEMENT, type=T3D2, ELSET=Line17
71 49, 14, 15
72 *ELEMENT, type=T3D2, ELSET=Line18
73 50, 15, 16
(continues on next page)

304 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


74 *ELEMENT, type=T3D2, ELSET=Line19
75 51, 12, 18
76 *ELEMENT, type=T3D2, ELSET=Line20
77 52, 13, 19
78 *ELEMENT, type=T3D2, ELSET=Line21
79 53, 14, 20
80 *ELEMENT, type=T3D2, ELSET=Line22
81 54, 15, 21
82 *ELEMENT, type=T3D2, ELSET=Line23
83 55, 17, 18
84 *ELEMENT, type=T3D2, ELSET=Line24
85 56, 18, 19
86 *ELEMENT, type=T3D2, ELSET=Line25
87 57, 19, 20
88 *ELEMENT, type=T3D2, ELSET=Line26
89 58, 20, 21
90 *ELEMENT, type=T3D2, ELSET=Line27
91 59, 21, 22
92 *ELEMENT, type=T3D2, ELSET=Line28
93 60, 18, 24
94 *ELEMENT, type=T3D2, ELSET=Line29
95 61, 19, 25
96 *ELEMENT, type=T3D2, ELSET=Line30
97 62, 20, 26
98 *ELEMENT, type=T3D2, ELSET=Line31
99 63, 21, 27
100 *ELEMENT, type=T3D2, ELSET=Line32
101 64, 23, 24
102 *ELEMENT, type=T3D2, ELSET=Line33
103 65, 24, 25
104 *ELEMENT, type=T3D2, ELSET=Line34
105 66, 25, 26
106 *ELEMENT, type=T3D2, ELSET=Line35
107 67, 26, 27
108 *ELEMENT, type=T3D2, ELSET=Line36
109 68, 27, 28
110 *ELEMENT, type=T3D2, ELSET=Line37
111 69, 24, 29
112 *ELEMENT, type=T3D2, ELSET=Line38
113 70, 25, 30
114 *ELEMENT, type=T3D2, ELSET=Line39
115 71, 26, 31
116 *ELEMENT, type=T3D2, ELSET=Line40
117 72, 27, 32
118 *ELSET,ELSET=PhysicalLine1000000
119 34, 33, 35, 36, 37, 38, 39, 40, 41, 42,
120 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
121 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
122 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,

10.2.8 Modified deck

The modified deck in Calculix reports the fictitious temperature loads to be assigned to the
cables to simulate the force density which is at the core of the method.

10.2. Anticlastic net 305


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.19: Modified Calculix with the updated nodes


after the form-finding of the anticlastic cable net.
1 ** Include all the mesh exported by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3
4 ** The material employed for the cables is a simple linear elastic
5 ** isotropic steel.
6 *MATERIAL, NAME=steel
7 *ELASTIC
8 160e9, 0.3
9 * EXPANSION, TYPE=ISO, ZERO=0.0
10 1.2e-5, 0.0
11

12 ** Cross-section of the cables.


13 *SOLID SECTION, ELSET=Eall, MATERIAL=steel
14 50.24e-6
15
16 ** Null temperature field on all the nodes at T0.
17 *INITIAL CONDITIONS, TYPE=TEMPERATURE
18 Nall, 0.0
19
20 ** Dirichlet boundary conditions for the nodes at the edges.
21 *BOUNDARY
22 1, 1, 3
23 2, 1, 3
24 3, 1, 3
25 4, 1, 3
26 5, 1, 3
27 11, 1, 3
28 17, 1, 3
29 23, 1, 3
30 29, 1, 3
31 30, 1, 3
32 31, 1, 3
33 32, 1, 3
34 10, 1, 3
35 16, 1, 3
36 22, 1, 3
37 28, 1, 3
38
39 ** Nonlinear static analysis: requested fixed time incrementation,
40 ** and apply the prestress.
41 *STEP, NLGEOM
42 *STATIC, SOLVER=SPOOLES, DIRECT
43 0.01, 1.0, , 0.05
44 *TEMPERATURE
45 1,-0.000000
46 2,-0.000000
47 3,-0.000000
48 4,-0.000000
49 5,-0.000000
50 6,-14.661018
51 7,-10.927677
52 8,-10.366906
53 9,-10.927677
(continues on next page)

306 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


54 10,-14.661018
55 11,-0.000000
56 12,-12.459472
57 13,-10.927677
58 14,-10.366906
59 15,-10.927677
60 16,-12.459472
61 17,-0.000000
62 18,-12.459472
63 19,-10.927677
64 20,-10.366906
65 21,-10.927677
66 22,-12.459472
67 23,-0.000000
68 24,-14.661018
69 25,-10.927677
70 26,-10.366906
71 27,-10.927677
72 28,-14.661018
73 29,-14.661018
74 30,-12.459472
75 31,-12.459472
76 32,-14.661018
77 *NODE FILE
78 U, RF
79 *EL FILE, OUTPUT=2D, SECTION FORCES
80 S, E
81 *END STEP
82 ** Request nodal displacements and reaction forces, and element
83 ** stresses and strains. For the stresses, section forces rather
84 ** than stresses.

10.2.9 Post-processing

The post-processing in cgx plots the contour maps for the displacements, stresses and strains,
in both coordinate directions; in this case, no graphs for the same quantities at the pins and in
the mid-point of the span for different values of the external load are plot since the prestressing
is applied instantaneously.

10.2.10 Dlubal comparison

As in the previous example of the plane cable net, we employ again the Dlubal software to
verify the developed algorithm; the same force density is assigned to all cables and the linear
system of the force density method is solved returning the exact results retrieved with the
algorithm discussed in this thesis.

10.2. Anticlastic net 307


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.7: Total displacements of the anticlastic cable net.

10.8: Displacements in the x and y-direction of the anticlastic cable net.

308 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.9: Axial force and axial elongation of the anticlastic cable net.

10.2.11 Conclusions

The example of the 3D anticlastic cable net shows off the cabalities of the algorithm to tackle
3D problems too. The proposed method, in the case of a structured composed of cables only,
needs to solve only a linear system, which, independently from the initial guess, the Newton-
Krylov algorithm solves iteratively in no more than three function evaluations.

10.2. Anticlastic net 309


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.10: Check of the form-finding of the anticlastic cable net.

310 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.3 Hypar membrane with fixed edges

10.3.1 Introduction

The example of the hypar membrane with fixed edges tests the part of the developed algorithm
related to the application of the stress density method. In this case, the actual value of the
assigned stress density does not influence the final result, because, without cables, only the
ratio between the stress densities of the elements modifies the final geometry (different values
of the coefficients for the elements on the borders and center for instance).

10.3.2 Test definition

The test suite includes a case for a hypar membrane with fixed edges with uniform stress den-
sity. The test function is as usual suitable for testing in pytest.
test_ff_clc.test_hypar()
The form-finding procedure is tested against a simple square membrane, hinged at its
corners, but with a couple of hinges located 2m higher than the other two.
The size of the membrane is 5x5m, and its thickness is 2mm. The cables are laid at the
edges of the membrane. The target force in the cables is set to 30 kN (which will be
adjusted according to the force density method) and the isotropic stress in the membrane
to 3 MPa (it will also be corrected according to the stress density method).
In this example, the combined method of the stress density and force density method is
tested.
Returns asserts the positiveness of the test.
Return type None

Code block 10.20: Test function for the form-finding of a


hypar membrane with fixed edges.
1 def test_hypar():
2 _retrieve_and_test_ff(
3 os.path.abspath(
4 "src/python/fsd_calculix/tests/membrane_hypar/form-finding"
5 ".hdf5"))

10.3.3 Pre-processing

The preprocessing for the generation of the mesh is operated in gmsh, where an approximate
shape of the finaly hypar is drawn, thus allowing the Netwon-Krylov algorithm to converge
faster.

10.3. Hypar membrane with fixed edges 311


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.21: Mesh in gmsh of the hypar membrane


with fixed edges before the form-finding.
1 // Characteristic length of the mesh subdividing the membrane.
2 lc = 500.0;
3
4 // Geometrical parameters for the hypar.
5 l = 5000.0; // length of the membrane.
6 h = 2000.0; // height of the membrane.
7
8 // Geometrical points defining the anchor points for the hypar.
9 Point(1) = {0, 0, h, lc};
10 Point(2) = {l, 0, 0, lc};
11 Point(3) = {l, l, h, lc};
12 Point(4) = {0, l, 0, lc};
13
14 // Lines defining the fixed edges for the hypar without cables.
15 Line(1) = {1, 2};
16 Line(2) = {2, 3};
17 Line(3) = {3, 4};
18 Line(4) = {4, 1};
19
20 // Line loop enclosing the membrane.
21 Line Loop(1) = {1, 2, 3, 4};
22
23 // Geometrical surface defing the membrane.
24 Surface(1) = {1};
25
26 // Request a transfinite surface if possible.
27 Transfinite Surface {1} = {};
28
29 // Physical entities to define the elements to be exported.
30 Physical Line("cables", 200) = {1, 2, 3, 4};
31 Physical Surface("memb", 300) = {1};
32
33 // Mesh first order and export also the node sets.
34 Mesh.ElementOrder = 1;
35 Mesh.SaveGroupsOfNodes = 1;
36
37 // Mesh 2D, since we do not have any 3D element.
38 Mesh 2;
39
40 // Save the mesh to gmsh format for inspection.
41 Save "membrane_hypar_fixed.msh";
42 // Save the mesh to a compatible Abaqus format for Calculix.
43 Mesh.Format = 39;
44 Save "membrane_hypar_fixed_gmsh.inp";
45
46 // Save an image of the mesh.
47 Print "membrane_hypar_fixed.png";

312 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.11: Topology of the hypar membrane with fixed edges.

Code block 10.22: Nodes of the mesh of the hypar membrane


with fixed edges before the form-finding.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_hypar_fixed/membrane_hypar_fixed_gmsh.inp
3 *NODE
4 1, 0, 0, 2000
5 2, 5000, 0, 0
6 3, 5000, 5000, 2000
7 4, 0, 5000, 0
8 5, 454.5454545452, 0, 1818.1818181819
9 6, 909.09090909011, 0, 1636.363636364
10 7, 1363.6363636353, 0, 1454.5454545459
11 8, 1818.1818181808, 0, 1272.7272727277
12 9, 2272.7272727254, 0, 1090.9090909098
13 10, 2727.2727272709, 0, 909.09090909163
14 11, 3181.8181818182, 0, 727.27272727272
15 12, 3636.3636363654, 0, 545.45454545382
16 13, 4090.9090909126, 0, 363.63636363497
17 14, 4545.4545454563, 0, 181.81818181747
18 15, 5000, 454.54545454518, 181.81818181807
19 16, 5000, 909.09090909001, 363.636363636
20 17, 5000, 1363.6363636351, 545.45454545405
21 18, 5000, 1818.1818181806, 727.27272727225
22 19, 5000, 2272.7272727253, 909.0909090901
23 20, 5000, 2727.2727272708, 1090.9090909083

10.3. Hypar membrane with fixed edges 313


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.23: Elements of the mesh of the hypar mem-


brane with fixed edges before the form-finding.
1 ******* E L E M E N T S *************
2 *ELEMENT, type=CPS3, ELSET=Surface1
3 49, 1, 5, 44
4 50, 44, 5, 45
5 51, 44, 45, 43
6 52, 43, 45, 46
7 53, 43, 46, 42
8 54, 42, 46, 47
9 55, 42, 47, 41
10 56, 41, 47, 48
11 57, 41, 48, 40
12 58, 40, 48, 49
13 59, 40, 49, 39
14 60, 39, 49, 50
15 61, 39, 50, 38
16 62, 38, 50, 51
17 63, 38, 51, 37
18 64, 37, 51, 52
19 65, 37, 52, 36
20 66, 36, 52, 53
21 67, 36, 53, 35
22 68, 35, 53, 54
23 69, 35, 54, 4
24 70, 4, 54, 34
25 71, 5, 6, 45
26 72, 45, 6, 55
27 73, 45, 55, 46
28 74, 46, 55, 56
29 75, 46, 56, 47
30 76, 47, 56, 57
31 77, 47, 57, 48
32 78, 48, 57, 58
33 79, 48, 58, 49
34 80, 49, 58, 59
35 81, 49, 59, 50
36 82, 50, 59, 60
37 83, 50, 60, 51
38 84, 51, 60, 61
39 85, 51, 61, 52
40 86, 52, 61, 62
41 87, 52, 62, 53
42 88, 53, 62, 63
43 89, 53, 63, 54
44 90, 54, 63, 64
45 91, 54, 64, 34
46 92, 34, 64, 33
47 93, 6, 7, 55
48 94, 55, 7, 65
49 95, 55, 65, 56
50 96, 56, 65, 66
51 97, 56, 66, 57
52 98, 57, 66, 67
(continues on next page)

314 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


53 99, 57, 67, 58
54 100, 58, 67, 68
55 101, 58, 68, 59
56 102, 59, 68, 69
57 103, 59, 69, 60
58 104, 60, 69, 70
59 105, 60, 70, 61
60 106, 61, 70, 71
61 107, 61, 71, 62
62 108, 62, 71, 72
63 109, 62, 72, 63
64 110, 63, 72, 73
65 111, 63, 73, 64
66 112, 64, 73, 74
67 113, 64, 74, 33
68 114, 33, 74, 32
69 115, 7, 8, 65
70 116, 65, 8, 75
71 117, 65, 75, 66

Code block 10.24: Physical entities of the mesh of the hypar


membrane before the form-finding.
1 *ELSET,ELSET=memb
2 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
3 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
4 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
5 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
6 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
7 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
8 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
9 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
10 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
11 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
12 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
13 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
14 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
15 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
16 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
17 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
18 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
19 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
20 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
21 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
22 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
23 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
24 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
25 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
26 289, 290,
27 *NSET,NSET=cables
28 6, 21, 22, 23, 24, 1, 2, 28, 29, 30,
29 31, 32, 33, 7, 10, 15, 3, 38, 39, 40,
30 41, 42, 43, 35, 36, 37, 34, 9, 44, 25,
31 26, 27, 8, 11, 12, 13, 4, 16, 17, 18,
32 19, 20, 14, 5,
(continues on next page)

10.3. Hypar membrane with fixed edges 315


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


33 *NSET,NSET=memb
34 78, 79, 80, 81, 82, 45, 85, 86, 87, 88,
35 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
36 99, 100, 101, 102, 103, 104, 105, 106, 107, 6,
37 21, 22, 23, 24, 1, 2, 28, 29, 30, 31,
38 32, 33, 7, 54, 55, 56, 57, 58, 59, 60,
39 61, 10, 15, 3, 38, 39, 40, 41, 42, 43,
40 46, 47, 48, 49, 50, 51, 52, 53, 35, 36,
41 37, 34, 9, 108, 109, 110, 111, 112, 113, 114,
42 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
43 125, 126, 127, 128, 129, 130, 62, 63, 64, 65,
44 66, 67, 68, 69, 70, 44, 25, 26, 27, 8,
45 11, 12, 13, 4, 131, 132, 133, 134, 135, 136,
46 137, 138, 139, 140, 141, 142, 143, 144, 71, 72,
47 73, 74, 75, 76, 77, 83, 84, 16, 17, 18,
48 19, 20, 14, 5,

10.3.4 Problem definition

The problem definition file contains only the information about the boundary conditions; the
mechanical and geometric properties, being uniform on the all domain in this particular case,
do not influence the final shape.

Code block 10.25: Definition of the form-finding problem for


the hypar membrane with fixed edges
1 CHARACTERISTICLENGTH
2 500.0
3 BCC
4 1
5 2
6 3
7 4
8 5
9 6
10 7
11 8
12 9
13 10
14 11
15 12
16 13
17 14
18 15
19 16
20 17
21 18
22 19
23 20
24 21
25 22
26 23
(continues on next page)

316 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


27 24
28 25
29 26
30 27
31 28
32 29
33 30
34 31
35 32
36 33
37 34
38 35
39 36
40 37
41 38
42 39
43 40
44 41
45 42
46 43
47 44
48 PREMEMBRANE
49 1.0
50 1 1.0
51 MEMBRANETHICKNESS
52 2.0
53 1 2.0
54 ENDINPUT

10.3.5 Solution deck

The solution deck acts as a placeholder for the following verification in Calculix, which will
show that the shape obtained after the form-finding is in a stress-free state since no pretension-
ing is induce being the cables absent.

Code block 10.26: Solution deck in Calculix for the solution


of the form-finding of the hypar membrane with fixed edges.
1 ** Include all the mesh generated by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Inclue also the sets defining the membrane and the cables.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Assign a simple isotropic elastic linear material to the membrane.
8 *MATERIAL, NAME=membr
9 *ELASTIC
10 8e3, 0.4
11 *EXPANSION, ZERO=0.0
12 1.2e-5, 0.0
13
14 ** The membrane is 2mm thick; assign the material previously defined.
(continues on next page)

10.3. Hypar membrane with fixed edges 317


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


15 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
16 2
17

18 ** Dirichlet boundary conditions for the cables that are fixed at the
19 ** edges.
20 *BOUNDARY
21 Ncables, 1, 3
22
23 ** Impose a null temperature field on the whole model at T0.
24 *INITIAL CONDITIONS, TYPE=TEMPERATURE
25 Nall, 0.0
26
27 ** Static nonlinear analysis: request fixed time incrementation.
28 ** Ask for nodal displacements and reaction forces, and element
29 ** stresses and strains after having imposed the prestress.
30 *STEP, NLGEOM
31 *STATIC, SOLVER=SPOOLES, DIRECT
32 0.01, 1.0, , 0.05
33 *NODE FILE
34 U, RF
35 *EL FILE
36 S, E
37 *END STEP
38 ** No load is applied in this analysis; it is just a skeleton for
39 ** the imposition of additional loads.

10.3.6 Orchestrating scripts

The pre-processing in gmsh and cgx, the solution in ccx and the final post-processing in cgx is
fully automated by a script written in Calculix and a bash script to start the analysis program-
matically.

Code block 10.27: Pre-post processing file in Calculix for


the analysis of the hypar membrane with fixed edges.
1 # change element type since gmsh uses plane stress elems by default.
2 sys sed -i "s/CPS3/S3/g" form_finding_resu.inp
3
4 # read the mesh generated by the form-finding algorithm.
5 read form_finding_resu.inp
6 view line
7
8 # save an image of the mesh as filled geometry.
9 view fill
10 rot -z
11 rot u -50
12 rot c -10
13 hcpy png
14 sys sleep 1
15 sys mv hcpy_1.png form_finding_membrane_plane_resu_mesh_fill.png
16
17 # save an image of the mesh with wireframe geometry.
(continues on next page)

318 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 view line
19 rot -z
20 rot u -50
21 rot c -10
22 hcpy png
23 sys sleep 1
24 sys mv hcpy_2.png form_finding_membrane_plane_resu_mesh_line.png
25
26 # save the mesh and physical sets to file to bre retrieved by ccx.
27 send all abq
28 send memb abq names
29 send cables abq names
30
31 # solve the finite element model with ccx
32 sys ccx_2.14 form_finding_solve
33 view fill
34
35 # read the solution file and load it in memory
36 read form_finding_solve.frd
37
38 # contour plots: impose min-max to isolate the membrane.
39 view fill
40 rot -z
41 rot u -50
42 rot c -10
43 ds -4 e 4
44 plot fv all
45 sys sleep 1
46 hcpy png
47 sys mv hcpy_3.png form_finding_membrane_hypar_fixed_resu_um.png
48
49 view disp off
50 rot -z
51 ds -4 e 1
52 plot fv all
53 sys sleep 1
54 hcpy png
55 sys mv hcpy_4.png form_finding_membrane_hypar_fixed_resu_ux.png
56
57 ds -4 e 2
58 plot fv all
59 sys sleep 1
60 hcpy png
61 sys mv hcpy_5.png form_finding_membrane_hypar_fixed_resu_uy.png
62
63 sys montage form_finding_membrane_hypar_fixed_resu_ux.png form_finding_
˓→membrane_hypar_fixed_resu_uy.png -tile 2x1 -geometry +0+0 form_finding_
˓→membrane_hypar_fixed_resu_uxy.png
64

65 ds -4 e 3
66 plot fv all
67 sys sleep 1
68 hcpy png
69 sys mv hcpy_6.png form_finding_membrane_hypar_fixed_resu_uz.png
70

71 ds -3 e 1
(continues on next page)

10.3. Hypar membrane with fixed edges 319


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


72 plot fv all
73 min 0
74 max 7
75 sys sleep 1
76 hcpy png
77 sys mv hcpy_7.png form_finding_membrane_hypar_fixed_resu_sxx.png
78
79 ds -3 e 2
80 plot fv all
81 min 0
82 max 7
83 sys sleep 1
84 hcpy png
85 sys mv hcpy_8.png form_finding_membrane_hypar_fixed_resu_syy.png
86

87 sys montage form_finding_membrane_hypar_fixed_resu_sxx.png form_finding_


˓→membrane_hypar_fixed_resu_syy.png -tile 2x1 -geometry +0+0 form_finding_
˓→membrane_hypar_fixed_resu_sxxyy.png
88
89 ds -3 e 7
90 plot fv all
91 min 0
92 max 7
93 sys sleep 1
94 hcpy png
95 sys mv hcpy_9.png form_finding_membrane_hypar_fixed_resu_sm.png
96
97 ds -2 e 1
98 plot fv all
99 sys sleep 1
100 hcpy png
101 sys mv hcpy_10.png form_finding_membrane_hypar_fixed_resu_exx.png
102
103 ds -2 e 2
104 plot fv all
105 sys sleep 1
106 hcpy png
107 sys mv hcpy_11.png form_finding_membrane_hypar_fixed_resu_eyy.png
108
109 sys montage form_finding_membrane_hypar_fixed_resu_exx.png form_finding_
˓→membrane_hypar_fixed_resu_eyy.png -tile 2x1 -geometry +0+0 form_finding_
˓→membrane_hypar_fixed_resu_exxyy.png
110
111 ds -2 e 7
112 plot fv all
113 sys sleep 1
114 hcpy png
115 sys mv hcpy_12.png form_finding_membrane_hypar_fixed_resu_em.png
116

117 sys montage form_finding_membrane_hypar_fixed_resu_sm.png form_finding_


˓→membrane_hypar_fixed_resu_em.png -tile 2x1 -geometry +0+0 form_finding_
˓→membrane_hypar_fixed_resu_sem.png
118
119 # switch back to the deformed shape
120 rot -z
121 rot u -50
(continues on next page)

320 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


122 rot c -10
123 ds -4 e 4
124 plot fv all

Code block 10.28: Bash script to start Calculix automat-


ically for the solution of the hypar membrane with fixed
edges.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-hypar-fixed.fbd

10.3.7 Form-finding geometry

The geometry obtained after the form-finding procedure is very close to the one employed as
starting guess from gmsh; this ensures that the convergence of the Newton-Krylov algorithm is
fast.

Code block 10.29: Modified Calculix mesh with the updated


node coordinates after the form-finding for the hypar mem-
brane with fixed edges.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_hypar_fixed/membrane_hypar_fixed_gmsh.inp

3 *NODE
4 1, 0, 0, 2000
5 1, 0.000000, 0.000000, 2000.000000
6 2, 5000.000000, 0.000000, 0.000000
7 3, 5000.000000, 5000.000000, 2000.000000
8 4, 0.000000, 5000.000000, 0.000000
9 5, 454.545455, 0.000000, 1818.181818
10 6, 909.090909, 0.000000, 1636.363636
11 7, 1363.636364, 0.000000, 1454.545455
12 8, 1818.181818, 0.000000, 1272.727273
13 9, 2272.727273, 0.000000, 1090.909091
14 10, 2727.272727, 0.000000, 909.090909
15 11, 3181.818182, 0.000000, 727.272727
16 12, 3636.363636, 0.000000, 545.454545
17 13, 4090.909091, 0.000000, 363.636364
18 14, 4545.454545, 0.000000, 181.818182
19 15, 5000.000000, 454.545455, 181.818182
20 16, 5000.000000, 909.090909, 363.636364
21 17, 5000.000000, 1363.636364, 545.454545
22 18, 5000.000000, 1818.181818, 727.272727
23 19, 5000.000000, 2272.727273, 909.090909
24 20, 5000.000000, 2727.272727, 1090.909091
25 21, 5000.000000, 3181.818182, 1272.727273
26 22, 5000.000000, 3636.363636, 1454.545455
27 23, 5000.000000, 4090.909091, 1636.363636
28 24, 5000.000000, 4545.454545, 1818.181818
29 25, 4545.454545, 5000.000000, 1818.181818
(continues on next page)

10.3. Hypar membrane with fixed edges 321


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


30 26, 4090.909091, 5000.000000, 1636.363636
31 27, 3636.363636, 5000.000000, 1454.545455
32 28, 3181.818182, 5000.000000, 1272.727273
33 29, 2727.272727, 5000.000000, 1090.909091
34 30, 2272.727273, 5000.000000, 909.090909
35 31, 1818.181818, 5000.000000, 727.272727
36 32, 1363.636364, 5000.000000, 545.454545
37 33, 909.090909, 5000.000000, 363.636364
38 34, 454.545455, 5000.000000, 181.818182
39 35, 0.000000, 4545.454545, 181.818182
40 36, 0.000000, 4090.909091, 363.636364
41 37, 0.000000, 3636.363636, 545.454545
42 38, 0.000000, 3181.818182, 727.272727
43 39, 0.000000, 2727.272727, 909.090909
44 40, 0.000000, 2272.727273, 1090.909091
45 41, 0.000000, 1818.181818, 1272.727273
46 42, 0.000000, 1363.636364, 1454.545455
47 43, 0.000000, 909.090909, 1636.363636
48 44, 0.000000, 454.545455, 1818.181818
49 45, 436.762241, 436.762240, 1677.394213
50 46, 437.939609, 884.851979, 1528.133084
51 47, 441.087495, 1339.305211, 1378.079661
52 48, 443.678743, 1797.807964, 1228.047695
53 49, 444.805655, 2259.029076, 1077.994523
54 50, 444.076495, 2722.015356, 927.622611
55 51, 441.383610, 3185.973015, 776.527350
56 52, 436.860640, 3650.154747, 624.257094
57 53, 430.925950, 4113.736004, 470.353834
58 54, 424.865644, 4575.134352, 314.686035
59 55, 884.851978, 437.939612, 1528.133085
60 56, 885.533618, 885.533635, 1410.816313
61 57, 889.672378, 1340.398888, 1293.095886
62 58, 893.003540, 1800.593413, 1175.872189
63 59, 893.818761, 2264.665535, 1058.862309
64 60, 891.350577, 2731.376336, 941.403373
65 61, 885.398996, 3199.545326, 822.686335
66 62, 876.284678, 3667.921486, 701.888392
67 63, 865.437764, 4134.562223, 578.555854
68 64, 886.263989, 4569.074044, 470.353834
69 65, 1339.305197, 441.087502, 1378.079661
70 66, 1340.398847, 889.672407, 1293.095894
71 67, 1345.114850, 1345.114911, 1208.184944
72 68, 1348.424805, 1806.097942, 1124.208540
73 69, 1348.184843, 2271.357070, 1040.665771
74 70, 1343.438943, 2739.615956, 956.590955
75 71, 1334.033018, 3209.484609, 870.868495
76 72, 1321.017949, 3678.982028, 782.594463
77 73, 1332.078505, 4123.715296, 701.888395
78 74, 1349.845230, 4563.139347, 624.257090
79 75, 1797.807934, 443.678752, 1228.047707
80 76, 1800.593340, 893.003573, 1175.872201
81 77, 1806.097884, 1348.424837, 1124.208549
82 78, 1809.182184, 1809.182194, 1073.802999
83 79, 1807.597926, 2274.267842, 1023.974173
84 80, 1800.416628, 2742.455643, 973.532034
85 81, 1787.986837, 3212.013140, 921.211768
(continues on next page)

322 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


86 82, 1790.515388, 3665.966934, 870.868500
87 83, 1800.454645, 4114.600970, 822.686332
88 84, 1814.026941, 4558.616388, 776.527336
89 85, 2259.029027, 444.805661, 1077.994538
90 86, 2264.665465, 893.818761, 1058.862328
91 87, 2271.357034, 1348.184819, 1040.665778
92 88, 2274.267885, 1807.597851, 1023.974171
93 89, 2271.304610, 2271.304450, 1007.944296
94 90, 2261.891812, 2738.108171, 991.216560
95 91, 2257.544377, 3199.583314, 973.532038
96 92, 2260.384020, 3656.561014, 956.590953
97 93, 2268.623602, 4108.649421, 941.403358
98 94, 2277.984593, 4555.923509, 927.622595
99 95, 2722.015312, 444.076491, 927.622625
100 96, 2731.376285, 891.350556, 941.403386
101 97, 2739.615964, 1343.438882, 956.590954
102 98, 2742.455766, 1800.416492, 973.532013
103 99, 2738.108413, 2261.891595, 991.216544
104 100, 2728.695584, 2728.695354, 1007.944296
105 101, 2725.732159, 3192.402049, 1023.974172
106 102, 2728.642869, 3651.815172, 1040.665761
107 103, 2735.334396, 4106.181256, 1058.862292
108 104, 2740.970885, 4555.194348, 1077.994510
109 105, 3185.972984, 441.383601, 776.527360
110 106, 3199.545307, 885.398960, 822.686337
111 107, 3209.484680, 1334.032929, 870.868467
112 108, 3212.013334, 1787.986683, 921.211733
113 109, 3199.583563, 2257.544219, 973.532009
114 110, 3192.402166, 2725.732111, 1023.974172
115 111, 3190.817774, 3190.817853, 1073.802999
116 112, 3193.901991, 3651.575233, 1124.208532
117 113, 3199.406540, 4106.996476, 1175.872179
118 114, 3202.192001, 4556.321263, 1228.047685
119 115, 3650.154733, 436.860632, 624.257096
120 116, 3667.921507, 876.284643, 701.888377
121 117, 3678.982144, 1321.017878, 782.594432
122 118, 3665.967120, 1790.515329, 870.868462
123 119, 3656.561152, 2260.384059, 956.590956
124 120, 3651.815164, 2728.643028, 1040.665788
125 121, 3651.575121, 3193.902181, 1124.208556
126 122, 3654.885051, 3654.885193, 1208.184944
127 123, 3659.601078, 4110.327646, 1293.095881
128 124, 3660.694769, 4558.912511, 1378.079655
129 125, 4113.736007, 430.925943, 470.353832
130 126, 4134.562264, 865.437747, 578.555836
131 127, 4123.715392, 1332.078508, 701.888374
132 128, 4114.601064, 1800.454727, 822.686343
133 129, 4108.649447, 2268.623783, 941.403403
134 130, 4106.181214, 2735.334607, 1058.862346
135 131, 4106.996408, 3199.406714, 1175.872212
136 132, 4110.327573, 3659.601186, 1293.095899
137 133, 4114.466352, 4114.466396, 1410.816314
138 134, 4115.148011, 4562.060394, 1528.133082
139 135, 4575.134359, 424.865643, 314.686030
140 136, 4569.074068, 886.264003, 470.353832
141 137, 4563.139378, 1349.845293, 624.257102
(continues on next page)

10.3. Hypar membrane with fixed edges 323


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


142 138, 4558.616402, 1814.027063, 776.527375
143 139, 4555.923504, 2277.984739, 927.622642
144 140, 4555.194331, 2740.971014, 1077.994552
145 141, 4556.321242, 3202.192094, 1228.047716
146 142, 4558.912495, 3660.694819, 1378.079666
147 143, 4562.060384, 4115.148031, 1528.133087
148 144, 4563.237757, 4563.237761, 1677.394213

10.3.8 Modified deck

The solution is modified but only null temperatures are introduced since there are no thermal
loads to be applied because pretensioned cables are totally absent. For this reason, the mem-
brane, independently from the assigned value of the stress density, will be in a stress-free state.

Code block 10.30: Modified Calculix deck with the thermal


loads after the form-finding for the hypar membrane with
fixed edges.
1 ** Include all the mesh generated by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Inclue also the sets defining the membrane and the cables.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Assign a simple isotropic elastic linear material to the membrane.
8 *MATERIAL, NAME=membr
9 *ELASTIC
10 8e3, 0.4
11 *EXPANSION, ZERO=0.0
12 1.2e-5, 0.0
13

14 ** The membrane is 2mm thick; assign the material previously defined.


15 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
16 2
17
18 ** Dirichlet boundary conditions for the cables that are fixed at the
19 ** edges.
20 *BOUNDARY
21 Ncables, 1, 3
22
23 ** Impose a null temperature field on the whole model at T0.
24 *INITIAL CONDITIONS, TYPE=TEMPERATURE
25 Nall, 0.0
26
27 ** Static nonlinear analysis: request fixed time incrementation.
28 ** Ask for nodal displacements and reaction forces, and element
29 ** stresses and strains after having imposed the prestress.
30 *STEP, NLGEOM
31 *STATIC, SOLVER=SPOOLES, DIRECT
32 0.01, 1.0, , 0.05
33 *TEMPERATURE
34 1,-0.000000
(continues on next page)

324 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


35 2,-0.000000
36 3,-0.000000
37 4,-0.000000
38 5,-0.000000
39 6,-0.000000
40 7,-0.000000
41 8,-0.000000
42 9,-0.000000
43 10,-0.000000
44 11,-0.000000
45 12,-0.000000
46 13,-0.000000
47 14,-0.000000
48 15,-0.000000
49 16,-0.000000
50 17,-0.000000
51 18,-0.000000
52 19,-0.000000
53 20,-0.000000
54 21,-0.000000
55 22,-0.000000
56 23,-0.000000
57 24,-0.000000
58 25,-0.000000
59 26,-0.000000
60 27,-0.000000
61 28,-0.000000
62 29,-0.000000
63 30,-0.000000
64 31,-0.000000
65 32,-0.000000
66 33,-0.000000
67 34,-0.000000
68 35,-0.000000
69 36,-0.000000
70 37,-0.000000
71 38,-0.000000
72 39,-0.000000
73 40,-0.000000
74 41,-0.000000
75 42,-0.000000
76 43,-0.000000
77 44,-0.000000
78 45,-0.000000
79 46,-0.000000
80 47,-0.000000
81 48,-0.000000
82 49,-0.000000
83 50,-0.000000
84 51,-0.000000
85 52,-0.000000
86 53,-0.000000
87 54,-0.000000
88 55,-0.000000
89 56,-0.000000
90 57,-0.000000
(continues on next page)

10.3. Hypar membrane with fixed edges 325


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


91 58,-0.000000
92 59,-0.000000
93 60,-0.000000
94 61,-0.000000
95 62,-0.000000
96 63,-0.000000
97 64,-0.000000
98 65,-0.000000
99 66,-0.000000
100 67,-0.000000
101 68,-0.000000
102 69,-0.000000
103 70,-0.000000
104 71,-0.000000
105 72,-0.000000
106 73,-0.000000
107 74,-0.000000
108 75,-0.000000
109 76,-0.000000
110 77,-0.000000
111 78,-0.000000
112 79,-0.000000
113 80,-0.000000
114 81,-0.000000
115 82,-0.000000
116 83,-0.000000
117 84,-0.000000
118 85,-0.000000
119 86,-0.000000
120 87,-0.000000
121 88,-0.000000
122 89,-0.000000
123 90,-0.000000
124 91,-0.000000
125 92,-0.000000
126 93,-0.000000
127 94,-0.000000
128 95,-0.000000
129 96,-0.000000
130 97,-0.000000
131 98,-0.000000
132 99,-0.000000
133 100,-0.000000
134 101,-0.000000
135 102,-0.000000
136 103,-0.000000
137 104,-0.000000
138 105,-0.000000
139 106,-0.000000
140 107,-0.000000
141 108,-0.000000
142 109,-0.000000
143 110,-0.000000
144 111,-0.000000
145 112,-0.000000
146 113,-0.000000
(continues on next page)

326 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


147 114,-0.000000
148 115,-0.000000
149 116,-0.000000
150 117,-0.000000
151 118,-0.000000
152 119,-0.000000
153 120,-0.000000
154 121,-0.000000
155 122,-0.000000
156 123,-0.000000
157 124,-0.000000
158 125,-0.000000
159 126,-0.000000
160 127,-0.000000
161 128,-0.000000
162 129,-0.000000
163 130,-0.000000
164 131,-0.000000
165 132,-0.000000
166 133,-0.000000
167 134,-0.000000
168 135,-0.000000
169 136,-0.000000
170 137,-0.000000
171 138,-0.000000
172 139,-0.000000
173 140,-0.000000
174 141,-0.000000
175 142,-0.000000
176 143,-0.000000
177 144,-0.000000
178 *NODE FILE
179 U, RF
180 *EL FILE
181 S, E
182 *END STEP
183 ** No load is applied in this analysis; it is just a skeleton for
184 ** the imposition of additional loads.

10.3.9 Post-processing

Post processing is fully automated in cgx to produce the contour plots of the displacements in
the three directions, the stresses and strains for the coordinate plane directions and the Mises
stresses and strains.

10.3.10 Dlubal comparison

Being the distorsion of the new mesh found by means of the stress density method, the result
obtained with Dlubal using a target stress value (and not a density) is very similar to the one
produced with the algorithm discussed in this thesis. However, Dlubal shows for the the stresses

10.3. Hypar membrane with fixed edges 327


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.12: Total displacements of the hypar membrane with fixed edges.

10.13: Displacements in the x and y-direction of the hypar membrane with fixed edges.

328 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.14: Normal stresses in the x and y-direction of the hypar membrane with fixed edges.

10.15: Normal strains in the x and y-direction of the hypar membrane with fixed edges.

10.3. Hypar membrane with fixed edges 329


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.16: Von-Mises stresses and strains of the hypar membrane with fixed edges.

330 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

the target value, even though no loads are applied. On the other hand, the membrane has null
strains everywhere.

10.3.11 Conclusions

The verification of the algorithm for the part concerning the stress density method highlights
that, in particular for cable or membrane only structures, the value of the assigned stress density
is not important, as far as its absolute value is concerned, but only the ratio of the stress densities
of the elements in the structure influences the final shape. In fact, different shapes, even though
belonging to the same class, can be obtained by varying the stress density coefficient for the
center and border elements.

10.3. Hypar membrane with fixed edges 331


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.17: Check of the displacements and the 𝜎x of the hypar membrane with fixed edges.

332 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.18: Check of 𝜎y and the 𝜎mises of the hypar membrane with fixed edges.

10.3. Hypar membrane with fixed edges 333


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.19: Check of 𝜀x and the 𝜀y of the hypar membrane with fixed edges.

334 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.20: Check of 𝜀mises of the hypar membrane with fixed edges.

10.3. Hypar membrane with fixed edges 335


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.4 Plane membrane with cables on the borders

10.4.1 Introduction

The example concerning the plane membrane with cables on the borders is the first verification
test for mixed cable and membrane tensile structures. The results show all the potentialities
of the studied method, which combines the force and stress density method to solve hybrid
structures. Not only the ratio between the force or stress density method can be respectively
changed, but also the ratio between the stress and force, giving rise to different shapes due to
the different interaction between the taut cables and membranes.

10.4.2 Test definition

The test suite includes a case for a plane membrane with cables on the borders which are re-
sponsible for the application of the initial prestressing by means of, computationally speaking,
a simulated thermal load.
test_ff_clc.test_plane()
The form-finding procedure is tested against a simple square plane membrane, hinged at
its corners.
The size of the membrane is 5x5m, and its thickness is 2mm. The cables are laid at the
edges of the membrane. The target force in the cables is set to 60 kN (which will be
adjusted according to the force density method) and the isotropic stress in the membrane
to 5 MPa (it will also be corrected according to the stress density method).
In this example, the mixed method (force density plus stress density method) is tested.
Returns asserts the positiveness of the test.
Return type None

Code block 10.31: Test function for the form-finding of a


plane membrane with cables.
1 def test_plane():
2 _retrieve_and_test_ff(
3 os.path.abspath(
4 "src/python/fsd_calculix/tests/membrane_plane/form-finding"
5 ".hdf5"))

10.4.3 Pre-processing

We start by producing the mesh with a gmsh script which first draws the geometrical entities
(points, lines, and surfaces) and then assigns significant physical entities to be retrieved in
Calculix to distinguish between the inner surface and the border lines representing respectively
the membrane and the cables.

336 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.32: Mesh in gmsh of the plane membrane with


cables before the form-finding process.
1 // Characteristic length for the mesh.
2 lc = 500.0;
3
4 // Length of the side of the square membrane.
5 l = 5000.0;
6

7 // Definition of the point geometrical entities.


8 Point(1) = {0, 0, 0, lc};
9 Point(2) = {l, 0, 0, lc};
10 Point(3) = {l, l, 0, lc};
11 Point(4) = {0, l, 0, lc};
12

13 // Definition of the line geometrical entities.


14 Line(1) = {1, 2};
15 Line(2) = {2, 3};
16 Line(3) = {3, 4};
17 Line(4) = {4, 1};
18

19 // Line loop according to the verse of the definition of the lines.


20 Line Loop(1) = {1, 2, 3, 4};
21
22 // Surface enclosed by the previous line loop.
23 Surface(1) = {1};
24

25 // Force the production of a regular transfinite surface.


26 Transfinite Surface {1} = {};
27
28 // Definition of the physical entities: lines representing the cables
29 // and surfaces for the membranes.
30 Physical Line("cables", 200) = {1, 2, 3, 4};
31 Physical Surface("memb", 300) = {1};
32
33 // Impose a first order mesh for quicker convergence in Calculix
34 // for large nonlinear problems.
35 Mesh.ElementOrder = 1;
36 // Export also the node sets, not only the element sets.
37 Mesh.SaveGroupsOfNodes = 1;
38
39 // Geometry options for the display
40 Geometry.LineNumbers = 1;
41 Geometry.PointNumbers = 1;
42 Geometry.SurfaceNumbers = 1;
43
44
45 // Mesh only 2D, we do not have 3D entities.
46 Mesh 2;
47

48 // Save the file also to the gmsh ASCII format for inspection.
49 Save "membrane_plane.msh";
50 Mesh.Format = 39; // abaqus format
51 Save "membrane_plane_gmsh.inp";
52 Mesh.Format = 33; // med-hdf5 format
53
(continues on next page)

10.4. Plane membrane with cables on the borders 337


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


54 // Save an image of the initial topology
55 Print "membrane_plane.png";
56 Save "membrana_plane.med";
57
58 // Save an image of the mesh
59 Print "membrane_plane.png";

10.21: Topology for the form-finding of a plane membrane with cables.

Code block 10.33: Nodes of the mesh of the plane membrane


with cables.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_plane/membrane_plane_gmsh.inp

3 *NODE
4 1, 0, 0, 0
5 2, 5000, 0, 0
6 3, 5000, 5000, 0
7 4, 0, 5000, 0
8 5, 499.99999999971, 0, 0
9 6, 999.99999999888, 0, 0
10 7, 1499.9999999988, 0, 0
11 8, 1999.9999999989, 0, 0
12 9, 2499.9999999969, 0, 0
13 10, 2999.9999999991, 0, 0
14 11, 3500.0000000014, 0, 0
15 12, 4000.0000000037, 0, 0
16 13, 4500.0000000022, 0, 0
17 14, 5000, 499.99999999971, 0
(continues on next page)

338 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


18 15, 5000, 999.99999999888, 0
19 16, 5000, 1499.9999999988, 0
20 17, 5000, 1999.9999999989, 0
21 18, 5000, 2499.9999999969, 0
22 19, 5000, 2999.9999999991, 0
23 20, 5000, 3500.0000000014, 0

Code block 10.34: Elements of the mesh of the plane mem-


brane with cables.
1 ******* E L E M E N T S *************
2 *ELEMENT, type=T3D2, ELSET=Line1
3 5, 1, 5
4 6, 5, 6
5 7, 6, 7
6 8, 7, 8
7 9, 8, 9
8 10, 9, 10
9 11, 10, 11
10 12, 11, 12
11 13, 12, 13
12 14, 13, 2
13 *ELEMENT, type=T3D2, ELSET=Line2
14 15, 2, 14
15 16, 14, 15
16 17, 15, 16
17 18, 16, 17
18 19, 17, 18
19 20, 18, 19
20 21, 19, 20
21 22, 20, 21
22 23, 21, 22
23 24, 22, 3
24 *ELEMENT, type=T3D2, ELSET=Line3
25 25, 3, 23
26 26, 23, 24
27 27, 24, 25
28 28, 25, 26
29 29, 26, 27
30 30, 27, 28
31 31, 28, 29
32 32, 29, 30
33 33, 30, 31
34 34, 31, 4
35 *ELEMENT, type=T3D2, ELSET=Line4
36 35, 4, 32
37 36, 32, 33
38 37, 33, 34
39 38, 34, 35
40 39, 35, 36
41 40, 36, 37
42 41, 37, 38
43 42, 38, 39
44 43, 39, 40
45 44, 40, 1
(continues on next page)

10.4. Plane membrane with cables on the borders 339


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


46 *ELEMENT, type=CPS3, ELSET=Surface1
47 45, 1, 5, 40
48 46, 40, 5, 41
49 47, 40, 41, 39
50 48, 39, 41, 42
51 49, 39, 42, 38
52 50, 38, 42, 43
53 51, 38, 43, 37
54 52, 37, 43, 44
55 53, 37, 44, 36
56 54, 36, 44, 45
57 55, 36, 45, 35
58 56, 35, 45, 46
59 57, 35, 46, 34
60 58, 34, 46, 47
61 59, 34, 47, 33
62 60, 33, 47, 48

Code block 10.35: Physical entities of the mesh of the plane


membrane with cables.
1 *ELSET,ELSET=cables
2 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
3 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
4 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
5 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
6 *ELSET,ELSET=memb
7 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
8 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
9 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
10 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
11 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
12 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
13 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
14 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
15 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
16 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
17 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
18 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
19 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
20 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
21 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
22 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
23 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
24 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
25 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
26 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
27 *NSET,NSET=cables
28 12, 13, 7, 23, 24, 25, 26, 27, 28, 29,
29 8, 10, 6, 9, 14, 15, 16, 1, 17, 18,
30 19, 20, 21, 22, 11, 3, 4, 30, 31, 32,
31 33, 34, 35, 36, 37, 38, 39, 40, 2, 5,
32 *NSET,NSET=memb
33 12, 13, 7, 23, 24, 25, 26, 27, 28, 29,
34 8, 10, 6, 80, 81, 82, 83, 84, 85, 86,
(continues on next page)

340 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


35 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
36 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
37 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
38 117, 118, 52, 53, 54, 55, 56, 57, 58, 59,
39 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
40 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
41 9, 41, 42, 43, 44, 14, 15, 16, 1, 17,
42 18, 19, 20, 21, 22, 119, 120, 121, 11, 3,
43 4, 30, 31, 32, 33, 34, 35, 36, 37, 38,
44 39, 40, 2, 5, 48, 49, 50, 51, 45, 46,
45 47,

10.4.4 Problem definition

The text file containing the problem definition is a merge of the ones employed for first the
force density method and then the stress density method. The arguments are stacked cleverly
to allow the parser to process first the cable elements and then the membrane elems.

Code block 10.36: Definition of the form-finding for the


plane membrane with cables.
1 CHARACTERISTICLENGTH
2 500.0
3 BCC
4 1
5 2
6 3
7 4
8 PRECABLE
9 60.0e3
10 1 60.0e3
11 CABLEAREA
12 314.0
13 1 314.0
14 CABLEYOUNG
15 160E3
16 1 160E3
17 CABLEEXPANSION
18 1.2E-5
19 1 1.2E-5
20 PREMEMBRANE
21 5.0
22 1 5.0
23 MEMBRANETHICKNESS
24 2.0
25 1 2.0
26 ENDINPUT

10.4. Plane membrane with cables on the borders 341


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.4.5 Solution deck

The deck resembles the skeleton to be used by the form-finding algorithm to assign the fictitious
thermal loads to simulate numerically the prestressing. An elastic isotropic material for both
the membrane and the steel is used, and nonlinear geometric effects are turned on.

Code block 10.37: Calculix deck for the analysis of the plane
membrane with cables.
1 ** Include all the mesh produced by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Include also the sets defining the membrane and cables.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Material for the membrane and steel; simple linear elastic isotropic
8 ** model.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12 *EXPANSION, ZERO=0.0
13 1.2e-5, 0.0
14 *MATERIAL, NAME=steel
15 *ELASTIC
16 160e3, 0.3
17 * EXPANSION, TYPE=ISO, ZERO=0.0
18 1.2e-5, 0.0
19
20 ** The membrane is 2mm thick.
21 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
22 2
23
24 ** Simulate the cable as a two-node beam element with negligible flexural
25 ** stifness. Approximated to a rectangular beam with same cross-section.
26 ** First order circular beam elements are not possible in Calculix,
27 ** only second order.
28 *BEAM SECTION, ELSET=Ecables, MATERIAL=steel, SECTION=RECT
29 17.72, 17.72
30
31 ** Impose a null temperature field on the whole model at T0.
32 *INITIAL CONDITIONS, TYPE=TEMPERATURE
33 Nall, 0.0
34
35 ** Dirichlet boundary conditions for the four side pins.
36 *BOUNDARY
37 1, 1, 3
38 2, 1, 3
39 3, 1, 3
40 4, 1, 3
41
42 ** Nonlinear static analysis: request a fixed time incrementation;
43 ** apply the pretensioning to the cables at T0, then ask for
44 ** the nodal displacements and reaction forces, but also element stresses
45 ** and strains.
46 *STEP, NLGEOM
47 *STATIC, SOLVER=SPOOLES, DIRECT
(continues on next page)

342 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


48 0.01, 1.0, , 0.05
49 *NODE FILE
50 U, RF
51 *EL FILE
52 S, E
53 *END STEP

10.4.6 Orchestrating scripts

The pre-post phase and calculation steps are fully automated by a script written in Calculix
using a sort of bash language. The script in gmsh is meshed, the physical groups are written to
file to be retrieved by ccx and finally the countour plots are drawn.

Code block 10.38: Calculix file for the pre-post phase of the
plane membrane with cables.
1 # change element type because gmsh by default uses plane stress elems.
2 sys sed -i "s/CPS3/S3/g" form_finding_resu.inp
3
4 # read the mesh produced by the form-finding algorithm.
5 read form_finding_resu.inp
6
7 # save an image of the mesh as filled geometry.
8 view fill
9 rot z
10 hcpy png
11 sys sleep 1
12 sys mv hcpy_1.png form_finding_membrane_plane_resu_mesh_fill.png
13

14 # save an image of the mesh with wireframe geometry.


15 view line
16 rot z
17 hcpy png
18 sys sleep 1
19 sys mv hcpy_2.png form_finding_membrane_plane_resu_mesh_line.png
20
21 # save the mesh and sets for later reuse by ccx during the FEA solution.
22 send all abq
23 send memb abq names
24 send cables abq names
25

26 # solve the finite element model modified by the form-finding algo.


27 sys ccx_2.14 form_finding_solve
28
29 # read the solution file and load it in memory.
30 read form_finding_solve.frd
31
32
33 # contour plots: impose min-max to isolate the membrane.
34 view fill
35 rot z
36 ds -4 e 4
(continues on next page)

10.4. Plane membrane with cables on the borders 343


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


37 plot fv all
38 sys sleep 1
39 hcpy png
40 sys mv hcpy_3.png form_finding_membrane_plane_resu_um.png
41
42 view disp off
43 rot z
44 ds -4 e 1
45 plot fv all
46 sys sleep 1
47 hcpy png
48 sys mv hcpy_4.png form_finding_membrane_plane_resu_ux.png
49
50 ds -4 e 2
51 plot fv all
52 sys sleep 1
53 hcpy png
54 sys mv hcpy_5.png form_finding_membrane_plane_resu_uy.png
55
56 sys montage form_finding_membrane_plane_resu_ux.png form_finding_membrane_
˓→plane_resu_uy.png -tile 2x1 -geometry +0+0 form_finding_membrane_plane_

˓→resu_uxy.png
57
58 ds -4 e 3
59 plot fv all
60 sys sleep 1
61 hcpy png
62 sys mv hcpy_6.png form_finding_membrane_plane_resu_uz.png
63
64 ds -3 e 1
65 plot fv all
66 min 0
67 max 10
68 sys sleep 1
69 hcpy png
70 sys mv hcpy_7.png form_finding_membrane_plane_resu_sxx.png
71
72 ds -3 e 2
73 plot fv all
74 min 0
75 max 10
76 sys sleep 1
77 hcpy png
78 sys mv hcpy_8.png form_finding_membrane_plane_resu_syy.png
79
80 sys montage form_finding_membrane_plane_resu_sxx.png form_finding_membrane_
˓→plane_resu_syy.png -tile 2x1 -geometry +0+0 form_finding_membrane_plane_
˓→resu_sxxyy.png
81

82 ds -3 e 7
83 plot fv all
84 min 0
85 max 10
86 sys sleep 1
87 hcpy png
88 sys mv hcpy_9.png form_finding_membrane_plane_resu_sm.png
(continues on next page)

344 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


89
90 ds -2 e 1
91 plot fv all
92 sys sleep 1
93 hcpy png
94 sys mv hcpy_10.png form_finding_membrane_plane_resu_exx.png
95
96 ds -2 e 2
97 plot fv all
98 sys sleep 1
99 hcpy png
100 sys mv hcpy_11.png form_finding_membrane_plane_resu_eyy.png
101
102 sys montage form_finding_membrane_plane_resu_exx.png form_finding_membrane_
˓→plane_resu_eyy.png -tile 2x1 -geometry +0+0 form_finding_membrane_plane_

˓→resu_exxyy.png
103
104 ds -2 e 7
105 plot fv all
106 sys sleep 1
107 hcpy png
108 sys mv hcpy_12.png form_finding_membrane_plane_resu_em.png
109
110 sys montage form_finding_membrane_plane_resu_sm.png form_finding_membrane_
˓→plane_resu_em.png -tile 2x1 -geometry +0+0 form_finding_membrane_plane_
˓→resu_sem.png

111
112 # switch back to the deformed shape
113 rot z
114 ds -4 e 4
115 plot fv all

Code block 10.39: Bash script to start the form-finding of


the plane membrane with cables
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-plane.fbd

10.4.7 Form-finding geometry

The updated geometry after the form-finding procedure is automatically written to a new mesh
file in Calculix to be later processed by the ccx solver.

Code block 10.40: New mesh in Calculix after the form-


finding of of a plane membrane with cables
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_plane/membrane_plane_gmsh.inp
3 *NODE
4 1, 0, 0, 0
5 1, 0.000000, 0.000000, 0.000000
(continues on next page)

10.4. Plane membrane with cables on the borders 345


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


6 2, 5000.000000, 0.000000, 0.000000
7 3, 5000.000000, 5000.000000, 0.000000
8 4, 0.000000, 5000.000000, 0.000000
9 5, 438.360582, 340.222892, 0.000000
10 6, 906.024057, 624.854362, 0.000000
11 7, 1415.060058, 830.975618, 0.000000
12 8, 1949.771130, 957.061948, 0.000000
13 9, 2497.471303, 999.885670, 0.000000
14 10, 3044.995836, 957.767055, 0.000000
15 11, 3579.172474, 830.967385, 0.000000
16 12, 4087.566962, 622.523651, 0.000000
17 13, 4561.173300, 340.200842, 0.000000
18 14, 4659.781406, 438.809330, 0.000000
19 15, 4377.457566, 912.417786, 0.000000
20 16, 4169.022672, 1420.826562, 0.000000
21 17, 4042.225937, 1955.009601, 0.000000
22 18, 4000.108051, 2502.536055, 0.000000
23 19, 4042.930730, 3050.236814, 0.000000
24 20, 4169.014288, 3584.947695, 0.000000
25 21, 4375.136806, 4093.980150, 0.000000
26 22, 4659.773334, 4561.641607, 0.000000
27 23, 4561.641215, 4659.774348, 0.000000
28 24, 4093.980858, 4375.138998, 0.000000
29 25, 3584.946457, 4169.017697, 0.000000
30 26, 3050.235105, 4042.933658, 0.000000
31 27, 2502.534040, 4000.112217, 0.000000
32 28, 1955.006894, 4042.232859, 0.000000
33 29, 1420.822651, 4169.028522, 0.000000
34 30, 912.434139, 4377.476357, 0.000000
35 31, 438.831128, 4659.802308, 0.000000
36 32, 340.207172, 4561.180677, 0.000000
37 33, 622.526509, 4087.572116, 0.000000
38 34, 830.965566, 3579.173715, 0.000000
39 35, 957.759207, 3044.988940, 0.000000
40 36, 999.876481, 2497.463953, 0.000000
41 37, 957.051834, 1949.765504, 0.000000
42 38, 830.968738, 1415.055467, 0.000000
43 39, 624.850384, 906.023772, 0.000000
44 40, 340.220801, 438.360195, 0.000000
45 41, 906.092493, 906.099317, 0.000000
46 42, 1025.403802, 1276.583268, 0.000000
47 43, 1135.669715, 1685.527469, 0.000000
48 44, 1204.877071, 2116.415392, 0.000000
49 45, 1227.846965, 2559.387058, 0.000000
50 46, 1202.436868, 2998.446251, 0.000000
51 47, 1137.944430, 3406.243373, 0.000000
52 48, 1055.084119, 3752.879123, 0.000000
53 49, 914.125574, 4085.944075, 0.000000
54 50, 1276.552188, 1025.359759, 0.000000
55 51, 1356.617508, 1356.466047, 0.000000
56 52, 1431.662264, 1719.271435, 0.000000
57 53, 1482.319686, 2106.230199, 0.000000
58 54, 1505.618899, 2503.508698, 0.000000
59 55, 1507.291620, 2883.987382, 0.000000
60 56, 1502.530174, 3218.527026, 0.000000
61 57, 1469.567888, 3530.549524, 0.000000
(continues on next page)

346 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


62 58, 1247.541677, 3944.652724, 0.000000
63 59, 1685.683535, 1135.706403, 0.000000
64 60, 1719.651506, 1431.609673, 0.000000
65 61, 1759.088917, 1759.056558, 0.000000
66 62, 1790.576967, 2111.450562, 0.000000
67 63, 1817.347526, 2470.654844, 0.000000
68 64, 1847.731114, 2810.096600, 0.000000
69 65, 1869.057317, 3131.211653, 0.000000
70 66, 1782.162185, 3497.085585, 0.000000
71 67, 1594.018890, 3861.868000, 0.000000
72 68, 2116.718186, 1204.910126, 0.000000
73 69, 2106.546968, 1482.404129, 0.000000
74 70, 2110.875327, 1791.122265, 0.000000
75 71, 2124.810662, 2125.458049, 0.000000
76 72, 2155.971224, 2466.976710, 0.000000
77 73, 2198.967273, 2801.330003, 0.000000
78 74, 2190.996766, 3151.721748, 0.000000
79 75, 2116.552422, 3492.299638, 0.000000
80 76, 2001.420830, 3797.561869, 0.000000
81 77, 2559.630407, 1227.859130, 0.000000
82 78, 2503.199489, 1505.945372, 0.000000
83 79, 2469.969783, 1817.775743, 0.000000
84 80, 2466.190292, 2156.525828, 0.000000
85 81, 2499.505926, 2500.570013, 0.000000
86 82, 2534.249564, 2843.188439, 0.000000
87 83, 2530.298491, 3181.943739, 0.000000
88 84, 2496.321330, 3494.268656, 0.000000
89 85, 2440.360335, 3772.156802, 0.000000
90 86, 2998.321994, 1202.543693, 0.000000
91 87, 2883.571381, 1507.512953, 0.000000
92 88, 2809.298939, 1848.062633, 0.000000
93 89, 2800.052268, 2199.725608, 0.000000
94 90, 2844.461869, 2532.628057, 0.000000
95 91, 2875.605956, 2874.166380, 0.000000
96 92, 2888.624376, 3209.207811, 0.000000
97 93, 2893.352831, 3517.657323, 0.000000
98 94, 2883.363580, 3795.092263, 0.000000
99 95, 3406.050684, 1138.033371, 0.000000
100 96, 3218.003077, 1502.753326, 0.000000
101 97, 3130.003372, 1869.643601, 0.000000
102 98, 3152.588003, 2189.419538, 0.000000
103 99, 3183.058500, 2528.880714, 0.000000
104 100, 3209.100551, 2888.922181, 0.000000
105 101, 3240.743703, 3240.997194, 0.000000
106 102, 3280.388590, 3568.345314, 0.000000
107 103, 3314.355456, 3864.286154, 0.000000
108 104, 3752.552507, 1055.271521, 0.000000
109 105, 3529.657398, 1470.119245, 0.000000
110 106, 3497.653371, 1781.063094, 0.000000
111 107, 3493.008057, 2115.579313, 0.000000
112 108, 3494.215143, 2496.775158, 0.000000
113 109, 3517.582739, 2893.761224, 0.000000
114 110, 3568.280869, 3280.579436, 0.000000
115 111, 3643.376859, 3643.433215, 0.000000
116 112, 3723.410975, 3974.596807, 0.000000
117 113, 4085.382825, 914.515291, 0.000000
(continues on next page)

10.4. Plane membrane with cables on the borders 347


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


118 114, 3944.979804, 1246.937499, 0.000000
119 115, 3862.205576, 1593.520867, 0.000000
120 116, 3797.486040, 2001.704513, 0.000000
121 117, 3772.130902, 2440.585164, 0.000000
122 118, 3795.093831, 2883.464416, 0.000000
123 119, 3864.275010, 3314.356970, 0.000000
124 120, 3974.557553, 3723.357137, 0.000000
125 121, 4093.855598, 4093.847810, 0.000000
126 ******* E L E M E N T S *************
127 *ELEMENT, type=T3D2, ELSET=Line1
128 5, 1, 5
129 6, 5, 6
130 7, 6, 7
131 8, 7, 8
132 9, 8, 9
133 10, 9, 10
134 11, 10, 11
135 12, 11, 12
136 13, 12, 13
137 14, 13, 2
138 *ELEMENT, type=T3D2, ELSET=Line2
139 15, 2, 14
140 16, 14, 15
141 17, 15, 16
142 18, 16, 17
143 19, 17, 18
144 20, 18, 19
145 21, 19, 20
146 22, 20, 21
147 23, 21, 22
148 24, 22, 3
149 *ELEMENT, type=T3D2, ELSET=Line3
150 25, 3, 23
151 26, 23, 24
152 27, 24, 25
153 28, 25, 26
154 29, 26, 27
155 30, 27, 28
156 31, 28, 29
157 32, 29, 30
158 33, 30, 31
159 34, 31, 4
160 *ELEMENT, type=T3D2, ELSET=Line4
161 35, 4, 32
162 36, 32, 33
163 37, 33, 34
164 38, 34, 35
165 39, 35, 36
166 40, 36, 37
167 41, 37, 38
168 42, 38, 39
169 43, 39, 40
170 44, 40, 1
171 *ELEMENT, type=CPS3, ELSET=Surface1
172 45, 1, 5, 40
173 46, 40, 5, 41
(continues on next page)

348 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


174 47, 40, 41, 39
175 48, 39, 41, 42
176 49, 39, 42, 38
177 50, 38, 42, 43
178 51, 38, 43, 37
179 52, 37, 43, 44
180 53, 37, 44, 36
181 54, 36, 44, 45
182 55, 36, 45, 35
183 56, 35, 45, 46
184 57, 35, 46, 34
185 58, 34, 46, 47
186 59, 34, 47, 33
187 60, 33, 47, 48
188 61, 33, 48, 32
189 62, 32, 48, 49
190 63, 32, 49, 4
191 64, 4, 49, 31
192 65, 5, 6, 41
193 66, 41, 6, 50
194 67, 41, 50, 42
195 68, 42, 50, 51
196 69, 42, 51, 43
197 70, 43, 51, 52
198 71, 43, 52, 44
199 72, 44, 52, 53
200 73, 44, 53, 45
201 74, 45, 53, 54
202 75, 45, 54, 46
203 76, 46, 54, 55
204 77, 46, 55, 47
205 78, 47, 55, 56
206 79, 47, 56, 48
207 80, 48, 56, 57
208 81, 48, 57, 49
209 82, 49, 57, 58
210 83, 49, 58, 31
211 84, 31, 58, 30
212 85, 6, 7, 50
213 86, 50, 7, 59
214 87, 50, 59, 51
215 88, 51, 59, 60
216 89, 51, 60, 52
217 90, 52, 60, 61
218 91, 52, 61, 53
219 92, 53, 61, 62
220 93, 53, 62, 54
221 94, 54, 62, 63
222 95, 54, 63, 55
223 96, 55, 63, 64
224 97, 55, 64, 56
225 98, 56, 64, 65
226 99, 56, 65, 57
227 100, 57, 65, 66
228 101, 57, 66, 58
229 102, 58, 66, 67
(continues on next page)

10.4. Plane membrane with cables on the borders 349


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


230 103, 58, 67, 30
231 104, 30, 67, 29
232 105, 7, 8, 59
233 106, 59, 8, 68
234 107, 59, 68, 60
235 108, 60, 68, 69
236 109, 60, 69, 61
237 110, 61, 69, 70
238 111, 61, 70, 62
239 112, 62, 70, 71
240 113, 62, 71, 63
241 114, 63, 71, 72
242 115, 63, 72, 64
243 116, 64, 72, 73
244 117, 64, 73, 65
245 118, 65, 73, 74
246 119, 65, 74, 66
247 120, 66, 74, 75
248 121, 66, 75, 67
249 122, 67, 75, 76
250 123, 67, 76, 29
251 124, 29, 76, 28
252 125, 8, 9, 68
253 126, 68, 9, 77
254 127, 68, 77, 69
255 128, 69, 77, 78
256 129, 69, 78, 70
257 130, 70, 78, 79
258 131, 70, 79, 71
259 132, 71, 79, 80
260 133, 71, 80, 72
261 134, 72, 80, 81
262 135, 72, 81, 73
263 136, 73, 81, 82
264 137, 73, 82, 74
265 138, 74, 82, 83
266 139, 74, 83, 75
267 140, 75, 83, 84
268 141, 75, 84, 76
269 142, 76, 84, 85
270 143, 76, 85, 28
271 144, 28, 85, 27
272 145, 9, 10, 77
273 146, 77, 10, 86
274 147, 77, 86, 78
275 148, 78, 86, 87
276 149, 78, 87, 79
277 150, 79, 87, 88
278 151, 79, 88, 80
279 152, 80, 88, 89
280 153, 80, 89, 81
281 154, 81, 89, 90
282 155, 81, 90, 82
283 156, 82, 90, 91
284 157, 82, 91, 83
285 158, 83, 91, 92
(continues on next page)

350 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


286 159, 83, 92, 84
287 160, 84, 92, 93
288 161, 84, 93, 85
289 162, 85, 93, 94
290 163, 85, 94, 27
291 164, 27, 94, 26
292 165, 10, 11, 86
293 166, 86, 11, 95
294 167, 86, 95, 87
295 168, 87, 95, 96
296 169, 87, 96, 88
297 170, 88, 96, 97
298 171, 88, 97, 89
299 172, 89, 97, 98
300 173, 89, 98, 90
301 174, 90, 98, 99
302 175, 90, 99, 91
303 176, 91, 99, 100
304 177, 91, 100, 92
305 178, 92, 100, 101
306 179, 92, 101, 93
307 180, 93, 101, 102
308 181, 93, 102, 94
309 182, 94, 102, 103
310 183, 94, 103, 26
311 184, 26, 103, 25
312 185, 11, 12, 95
313 186, 95, 12, 104
314 187, 95, 104, 96
315 188, 96, 104, 105
316 189, 96, 105, 97
317 190, 97, 105, 106
318 191, 97, 106, 98
319 192, 98, 106, 107
320 193, 98, 107, 99
321 194, 99, 107, 108
322 195, 99, 108, 100
323 196, 100, 108, 109
324 197, 100, 109, 101
325 198, 101, 109, 110
326 199, 101, 110, 102
327 200, 102, 110, 111
328 201, 102, 111, 103
329 202, 103, 111, 112
330 203, 103, 112, 25
331 204, 25, 112, 24
332 205, 12, 13, 104
333 206, 104, 13, 113
334 207, 104, 113, 105
335 208, 105, 113, 114
336 209, 105, 114, 106
337 210, 106, 114, 115
338 211, 106, 115, 107
339 212, 107, 115, 116
340 213, 107, 116, 108
341 214, 108, 116, 117
(continues on next page)

10.4. Plane membrane with cables on the borders 351


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


342 215, 108, 117, 109
343 216, 109, 117, 118
344 217, 109, 118, 110
345 218, 110, 118, 119
346 219, 110, 119, 111
347 220, 111, 119, 120
348 221, 111, 120, 112
349 222, 112, 120, 121
350 223, 112, 121, 24
351 224, 24, 121, 23
352 225, 13, 2, 113
353 226, 113, 2, 14
354 227, 113, 14, 114
355 228, 114, 14, 15
356 229, 114, 15, 115
357 230, 115, 15, 16
358 231, 115, 16, 116
359 232, 116, 16, 17
360 233, 116, 17, 117
361 234, 117, 17, 18
362 235, 117, 18, 118
363 236, 118, 18, 19
364 237, 118, 19, 119
365 238, 119, 19, 20
366 239, 119, 20, 120
367 240, 120, 20, 21
368 241, 120, 21, 121
369 242, 121, 21, 22
370 243, 121, 22, 23
371 244, 23, 22, 3
372 *ELSET,ELSET=cables
373 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
374 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
375 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
376 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
377 *ELSET,ELSET=memb
378 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
379 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
380 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
381 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
382 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
383 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
384 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
385 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
386 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
387 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
388 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
389 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
390 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
391 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
392 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
393 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
394 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
395 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
396 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
397 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
(continues on next page)

352 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


398 *NSET,NSET=cables
399 12, 13, 7, 23, 24, 25, 26, 27, 28, 29,
400 8, 10, 6, 9, 14, 15, 16, 1, 17, 18,
401 19, 20, 21, 22, 11, 3, 4, 30, 31, 32,
402 33, 34, 35, 36, 37, 38, 39, 40, 2, 5,
403 *NSET,NSET=memb
404 12, 13, 7, 23, 24, 25, 26, 27, 28, 29,
405 8, 10, 6, 80, 81, 82, 83, 84, 85, 86,
406 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
407 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
408 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
409 117, 118, 52, 53, 54, 55, 56, 57, 58, 59,
410 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
411 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
412 9, 41, 42, 43, 44, 14, 15, 16, 1, 17,
413 18, 19, 20, 21, 22, 119, 120, 121, 11, 3,
414 4, 30, 31, 32, 33, 34, 35, 36, 37, 38,
415 39, 40, 2, 5, 48, 49, 50, 51, 45, 46,
416 47,

10.4.8 Modified deck

The modified deck in Calculix contains the nodal temperatures to simulate the initial prestress-
ing; as already explained in the section concerning the analysis of the code, the pretensioning
is due to the taut cables, which in turn stress the membrane.

Code block 10.41: Calculix deck for the analysis of a plane


membrane with cables.
1 ** Include all the mesh produced by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Include also the sets defining the membrane and cables.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6

7 ** Material for the membrane and steel; simple linear elastic isotropic
8 ** model.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12 *EXPANSION, ZERO=0.0
13 1.2e-5, 0.0
14 *MATERIAL, NAME=steel
15 *ELASTIC
16 160e3, 0.3
17 *EXPANSION, TYPE=ISO, ZERO=0.0
18 1.2e-5, 0.0
19
20 ** The membrane is 2mm thick.
21 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
22 2
23

(continues on next page)

10.4. Plane membrane with cables on the borders 353


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


24 ** Simulate the cable as a two-node beam element with negligible flexural
25 ** stifness. Approximated to a rectangular beam with same cross-section.
26 ** First order circular beam elements are not possible in Calculix,
27 ** only second order.
28 *BEAM SECTION, ELSET=Ecables, MATERIAL=steel, SECTION=RECT
29 17.72, 17.72
30
31 ** Impose a null temperature field on the whole model at T0.
32 *INITIAL CONDITIONS, TYPE=TEMPERATURE
33 Nall, 0.0
34
35 ** Dirichlet boundary conditions for the four side pins.
36 *BOUNDARY
37 1, 1, 3
38 2, 1, 3
39 3, 1, 3
40 4, 1, 3
41
42 ** Nonlinear static analysis: request a fixed time incrementation;
43 ** apply the pretensioning to the cables at T0, then ask for
44 ** the nodal displacements and reaction forces, but also element stresses
45 ** and strains.
46 *STEP, NLGEOM
47 *STATIC, SOLVER=SPOOLES, DIRECT
48 0.01, 1.0, , 0.05
49 *TEMPERATURE
50 1,-110.449095
51 2,-110.520030
52 3,-110.449528
53 4,-110.520343
54 5,-110.449411
55 6,-108.971085
56 7,-109.312203
57 8,-109.350265
58 9,-109.349478
59 10,-109.303770
60 11,-109.279436
61 12,-109.368389
62 13,-109.747259
63 14,-110.519463
64 15,-109.747727
65 16,-109.370352
66 17,-109.280541
67 18,-109.304140
68 19,-109.349578
69 20,-109.350101
70 21,-109.311643
71 22,-108.971265
72 23,-110.449466
73 24,-108.970956
74 25,-109.311911
75 26,-109.350214
76 27,-109.349620
77 28,-109.304320
78 29,-109.280725
79 30,-109.367598
(continues on next page)

354 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


80 31,-109.747011
81 32,-110.519642
82 33,-109.747285
83 34,-109.368756
84 35,-109.280735
85 36,-109.303840
86 37,-109.349150
87 38,-109.349917
88 39,-109.311192
89 40,-108.970907
90 41,-0.000000
91 42,-0.000000
92 43,-0.000000
93 44,-0.000000
94 45,-0.000000
95 46,-0.000000
96 47,-0.000000
97 48,-0.000000
98 49,-0.000000
99 50,-0.000000
100 51,-0.000000
101 52,-0.000000
102 53,-0.000000
103 54,-0.000000
104 55,-0.000000
105 56,-0.000000
106 57,-0.000000
107 58,-0.000000
108 59,-0.000000
109 60,-0.000000
110 61,-0.000000
111 62,-0.000000
112 63,-0.000000
113 64,-0.000000
114 65,-0.000000
115 66,-0.000000
116 67,-0.000000
117 68,-0.000000
118 69,-0.000000
119 70,-0.000000
120 71,-0.000000
121 72,-0.000000
122 73,-0.000000
123 74,-0.000000
124 75,-0.000000
125 76,-0.000000
126 77,-0.000000
127 78,-0.000000
128 79,-0.000000
129 80,-0.000000
130 81,-0.000000
131 82,-0.000000
132 83,-0.000000
133 84,-0.000000
134 85,-0.000000
135 86,-0.000000
(continues on next page)

10.4. Plane membrane with cables on the borders 355


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


136 87,-0.000000
137 88,-0.000000
138 89,-0.000000
139 90,-0.000000
140 91,-0.000000
141 92,-0.000000
142 93,-0.000000
143 94,-0.000000
144 95,-0.000000
145 96,-0.000000
146 97,-0.000000
147 98,-0.000000
148 99,-0.000000
149 100,-0.000000
150 101,-0.000000
151 102,-0.000000
152 103,-0.000000
153 104,-0.000000
154 105,-0.000000
155 106,-0.000000
156 107,-0.000000
157 108,-0.000000
158 109,-0.000000
159 110,-0.000000
160 111,-0.000000
161 112,-0.000000
162 113,-0.000000
163 114,-0.000000
164 115,-0.000000
165 116,-0.000000
166 117,-0.000000
167 118,-0.000000
168 119,-0.000000
169 120,-0.000000
170 121,-0.000000
171 *NODE FILE
172 U, RF
173 *EL FILE
174 S, E
175 *END STEP

10.4.9 Post-processing

We report here the results in terms of displacements (magnitude, x and y-direction), stresses and
strains (magnitude, x and y-directions). We also plot the same quantities for some characteristic
points versus the applied load multiplier, in this case resembled by the time incrementation.

10.4.10 Dlubal comparison

Even though showing a similar trend for the displacements, we shall immediately point out that
the solution implemented in Dlubal is different: the stress in the cables is a force density but not

356 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.22: Total displacements of the plane membrane with cables.

10.23: Displacements in the x and y-direction of the plane membrane with cables.

10.4. Plane membrane with cables on the borders 357


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.24: Normal stresses in the x and y-direction of the plane membrane with cables.

10.25: Normal strains in the x and y-direction of the plane membrane with cables.

358 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.26: Von-Mises stresses and strains of the plane membrane with cables.

10.4. Plane membrane with cables on the borders 359


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

per finite element whereas for geometrical entity, and the target stress in an actual stress. For
simple plane and 3D structures this does not affect the reasoning, instead for complex shapes
Dlubal introduces the projected algorithm, which returns results similar to the ones discussed
in the thesis.

10.4.11 Conclusions

The collaboration between the cables and the membrane is essential to guarantee the structural
stability of the system before, but especially under, the application of the live loads. As already
seen for the nonlinear behaviour of cable structures, the pretension should not however be
excessive, causing the membrane to enter the plastic field under the application of the additional
loads; this would certainly lead to total loss of the aesthetic properties of the material, but at the
same time of the structural properties, because the membrane would manifest a shape similar
to the one of a sagged cable. In conclusion, compressive zones are absolutely to be avoided,
but also plasticity should never be reached; in addition, viscoelasticity under severe loads may
lead to increased further deformation in time.

360 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.27: Check of the displacements and the 𝜎x of the plane membrane with cables.

10.4. Plane membrane with cables on the borders 361


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.28: Check of 𝜎y and the 𝜎mises of the plane membrane with cables.

362 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.29: Check of 𝜀x and the 𝜀y of the plane membrane with cables.

10.4. Plane membrane with cables on the borders 363


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.30: Check of 𝜀mises of the plane membrane with cables.

364 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.5 Hypar membrane with cables on the borders

10.5.1 Introduction

We finally present a 3D example of the form-finding of a spatial structure composed of both


membranes and cables. The membrane and cables are anchored at four pins which, seen in
plan, make up a square: two of them are located at the ground level, whereas the other two are
elevated. A solid initial guess for the solution is provided by the mesh created with the reported
script in gmsh.

10.5.2 Test definition

The test suite includes a case for a hypar membrane with cables on the borders. pytest collects
iteratively the tests and executes them (eventually parallely with xdist).
test_ff_clc.test_hypar()
The form-finding procedure is tested against a simple square membrane, hinged at its
corners, but with a couple of hinges located 2m higher than the other two.
The size of the membrane is 5x5m, and its thickness is 2mm. The cables are laid at the
edges of the membrane. The target force in the cables is set to 30 kN (which will be
adjusted according to the force density method) and the isotropic stress in the membrane
to 3 MPa (it will also be corrected according to the stress density method).
In this example, the combined method of the stress density and force density method is
tested.
Returns asserts the positiveness of the test.
Return type None

Code block 10.42: Test function for the form-finding of a


hypar membrane with cables.
1 def test_hypar():
2 _retrieve_and_test_ff(
3 os.path.abspath(
4 "src/python/fsd_calculix/tests/membrane_hypar/form-finding"
5 ".hdf5"))

10.5.3 Pre-processing

The mesh is created as usual with the bottom-up approach already seen in gmsh (top-down with
OpenCASCADE would be counterproductive).

10.5. Hypar membrane with cables on the borders 365


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.43: Mesh in gmsh of a hypar membrane with


cables before the form-finding process.
1 // Characteristic length of the membrane and cables.
2 // Import quantity for the definition of the force and stress density.
3 lc = 500.0;
4
5 // Length of the projected side of the hypar and height difference
6 // between the supports.
7 l = 5000.0;
8 h = 2000.0;
9
10 // Geometric points defining the pins or anchor points for both the
11 // cables and the membrane.
12 Point(1) = {0, 0, h, lc};
13 Point(2) = {l, 0, 0, lc};
14 Point(3) = {l, l, h, lc};
15 Point(4) = {0, l, 0, lc};
16

17 // Geometric lines defining the edges of the membrane, which are also
18 // the cable themselves.
19 Line(1) = {1, 2};
20 Line(2) = {2, 3};
21 Line(3) = {3, 4};
22 Line(4) = {4, 1};
23
24 // Line looo enclosing the membrane to define the surface.
25 Line Loop(1) = {1, 2, 3, 4};
26
27 // Geometric surface representing the membrane.
28 Surface(1) = {1};
29
30 // Ask for a transfinite surface if possible.
31 Transfinite Surface {1} = {};
32
33 // Physical lines for the cables and membranes; mark this entities for
34 // export.
35 Physical Line("cables", 200) = {1, 2, 3, 4};
36 Physical Surface("memb", 300) = {1};
37
38 // Mesh first order for faster converence.
39 Mesh.ElementOrder = 1;
40 // Create also the sets for the nodes in Calculix.
41 Mesh.SaveGroupsOfNodes = 1;
42
43 // Mesh only 2D; we do not have any 3D elems.
44 Mesh 2;
45

46 // Save the mesh in gmsh format for inspection.


47 Save "membrane_hypar.msh";
48 // Save the mesh in an Abaqus compatible format for Calculix.
49 Mesh.Format = 39;
50 Save "membrane_hypar_gmsh.inp";
51 // Export also to code_aster in case we needed it.
52 Mesh.Format = 33;
53 Save "membrane_hypar.med";
(continues on next page)

366 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


54
55 // Save also a screenshot of the initial topology.
56 Print "membrane_hypar.png";

10.31: Topology of the hypar membrane with cables.

Code block 10.44: Nodes of the mesh of the hypar membrane


with cables.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_hypar/membrane_hypar_gmsh.inp
3 *NODE
4 1, 0, 0, 2000
5 2, 5000, 0, 0
6 3, 5000, 5000, 2000
7 4, 0, 5000, 0
8 5, 454.5454545452, 0, 1818.1818181819
9 6, 909.09090909011, 0, 1636.363636364
10 7, 1363.6363636353, 0, 1454.5454545459
11 8, 1818.1818181808, 0, 1272.7272727277
12 9, 2272.7272727254, 0, 1090.9090909098
13 10, 2727.2727272709, 0, 909.09090909163
14 11, 3181.8181818182, 0, 727.27272727272
15 12, 3636.3636363654, 0, 545.45454545382
16 13, 4090.9090909126, 0, 363.63636363497
17 14, 4545.4545454563, 0, 181.81818181747
18 15, 5000, 454.54545454518, 181.81818181807
19 16, 5000, 909.09090909001, 363.636363636
20 17, 5000, 1363.6363636351, 545.45454545405
(continues on next page)

10.5. Hypar membrane with cables on the borders 367


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


21 18, 5000, 1818.1818181806, 727.27272727225
22 19, 5000, 2272.7272727253, 909.0909090901
23 20, 5000, 2727.2727272708, 1090.9090909083

Code block 10.45: Elements of the mesh of the hypar mem-


brane with cables.
1 ******* E L E M E N T S *************
2 *ELEMENT, type=T3D2, ELSET=Line1
3 5, 1, 5
4 6, 5, 6
5 7, 6, 7
6 8, 7, 8
7 9, 8, 9
8 10, 9, 10
9 11, 10, 11
10 12, 11, 12
11 13, 12, 13
12 14, 13, 14
13 15, 14, 2
14 *ELEMENT, type=T3D2, ELSET=Line2
15 16, 2, 15
16 17, 15, 16
17 18, 16, 17
18 19, 17, 18
19 20, 18, 19
20 21, 19, 20
21 22, 20, 21
22 23, 21, 22
23 24, 22, 23
24 25, 23, 24
25 26, 24, 3
26 *ELEMENT, type=T3D2, ELSET=Line3
27 27, 3, 25
28 28, 25, 26
29 29, 26, 27
30 30, 27, 28
31 31, 28, 29
32 32, 29, 30
33 33, 30, 31
34 34, 31, 32
35 35, 32, 33
36 36, 33, 34
37 37, 34, 4
38 *ELEMENT, type=T3D2, ELSET=Line4
39 38, 4, 35
40 39, 35, 36
41 40, 36, 37
42 41, 37, 38
43 42, 38, 39
44 43, 39, 40
45 44, 40, 41
46 45, 41, 42
47 46, 42, 43
48 47, 43, 44
(continues on next page)

368 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


49 48, 44, 1
50 *ELEMENT, type=CPS3, ELSET=Surface1
51 49, 1, 5, 44
52 50, 44, 5, 45
53 51, 44, 45, 43
54 52, 43, 45, 46
55 53, 43, 46, 42
56 54, 42, 46, 47
57 55, 42, 47, 41
58 56, 41, 47, 48
59 57, 41, 48, 40
60 58, 40, 48, 49
61 59, 40, 49, 39
62 60, 39, 49, 50
63 61, 39, 50, 38
64 62, 38, 50, 51
65 63, 38, 51, 37
66 64, 37, 51, 52
67 65, 37, 52, 36
68 66, 36, 52, 53
69 67, 36, 53, 35
70 68, 35, 53, 54
71 69, 35, 54, 4

Code block 10.46: Physical entities of the mesh of the hypar


membrane with cables.
1 *ELSET,ELSET=cables
2 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
3 26, 5, 6, 7, 8, 9, 10, 11, 12, 13,
4 14, 15, 27, 28, 29, 30, 31, 32, 33, 34,
5 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
6 45, 46, 47, 48,
7 *ELSET,ELSET=memb
8 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
9 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
10 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
11 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
12 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
13 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
14 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
15 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
16 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
17 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
18 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
19 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
20 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
21 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
22 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
23 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
24 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
25 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
26 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
27 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
28 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
(continues on next page)

10.5. Hypar membrane with cables on the borders 369


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


29 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
30 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
31 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
32 289, 290,
33 *NSET,NSET=cables
34 25, 26, 27, 28, 29, 24, 35, 6, 5, 30,
35 31, 32, 33, 34, 1, 10, 11, 12, 13, 14,
36 4, 18, 19, 20, 21, 22, 23, 7, 9, 15,
37 16, 17, 8, 2, 3, 43, 44, 36, 37, 38,
38 39, 40, 41, 42,
39 *NSET,NSET=memb
40 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
41 25, 26, 27, 28, 29, 24, 35, 6, 5, 78,
42 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
43 89, 90, 91, 92, 30, 31, 32, 33, 34, 1,
44 45, 46, 47, 48, 10, 11, 12, 13, 14, 4,
45 18, 19, 20, 21, 22, 23, 94, 95, 96, 97,
46 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
47 108, 109, 110, 111, 112, 113, 114, 7, 9, 59,
48 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
49 70, 71, 72, 73, 74, 75, 76, 77, 93, 15,
50 16, 17, 8, 115, 116, 117, 118, 119, 120, 121,
51 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
52 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
53 142, 143, 144, 2, 3, 43, 44, 36, 37, 38,
54 39, 40, 41, 42,

10.5.4 Problem definition

The definition of the problem is a merge of the files used for the force and stress density method.
The file is sorted according to the type of element to allow the parser to trasverse the file only
once.

Code block 10.47: Definition of the form-finding for the hy-


par membrane with cables.
1 CHARACTERISTICLENGTH
2 500.0
3 BCC
4 1
5 2
6 3
7 4
8 PRECABLE
9 30.0e3
10 1 30.0e3
11 CABLEAREA
12 314.0
13 1 314.0
14 CABLEYOUNG
15 160E3
16 1 160E3
(continues on next page)

370 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


17 CABLEEXPANSION
18 1.2E-5
19 1 1.2E-5
20 PREMEMBRANE
21 3.0
22 1 3.0
23 MEMBRANETHICKNESS
24 2.0
25 1 2.0
26 ENDINPUT

10.5.5 Solution deck

The solution deck plays a fundamental role in the analysis of the hypar membrane with cables;
not only it acts as the skeleton for the insertion of the thermal loads simulating the initial
inelastic prestressing, but it also drives the nonlinear Newton solver. Greater attention needs
to be payed to the solver params due to the high nonlinearity induced by the interaction of the
cables and membrane.

Code block 10.48: Calculix deck for the analysis of the hypar
membrane with cables.
1 ** Include all the mesh generated by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Include also the physical sets defining the cables and the membrane.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Assign a simple linear elastic isotropic material to both the membrane
8 ** and the cables.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12 *EXPANSION, ZERO=0.0
13 1.2e-5, 0.0
14 *MATERIAL, NAME=steel
15 *ELASTIC
16 160e3, 0.3
17 * EXPANSION, TYPE=ISO, ZERO=0.0
18 1.2e-5, 0.0
19
20 ** The membrane is 2mm thick; assign the material too.
21 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
22 2
23

24 ** Equivalent beam section for the cable, sharing the same area.
25 ** Beams with circular section are not possible for first order elems.
26 *BEAM SECTION, ELSET=Ecables, MATERIAL=steel, SECTION=RECT
27 17.72, 17.72
28

29 ** Apply a null temperature field on the whole model at T0.


30 *INITIAL CONDITIONS, TYPE=TEMPERATURE
(continues on next page)

10.5. Hypar membrane with cables on the borders 371


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


31 Nall, 0.0
32
33 ** Dirichlet boundary conditions at the pins.
34 *BOUNDARY
35 1, 1, 3
36 2, 1, 3
37 3, 1, 3
38 4, 1, 3
39

40 ** Static nonlinear analysis; apply the total pretension immediately at


41 ** T0; request a fixed time incrementation.
42 *STEP, NLGEOM
43 *STATIC, SOLVER=SPOOLES, DIRECT
44 0.01, 1.0, , 0.05
45 *NODE FILE
46 U, RF
47 *EL FILE
48 S, E
49 *END STEP
50 ** Request nodal displacements and reaction forces, but also stresses and
51 ** strains for the elements.

10.5.6 Orchestrating scripts

The pre-post and solution phases are carefully automated using cgx from Calculix. The param-
eters can be changed in the problem definition file, and the printed results for the report can be
straightforwardly generated by cgx which takes care of entire solution workflow until the final
print of the contour plots.

Code block 10.49: Calculix file for the pre-post phase of the
hypar membrane with cables.
1 # change element type since gmsh uses plane stress elems by default.
2 sys sed -i "s/CPS3/S3/g" form_finding_resu.inp
3
4 # read the mesh generated by the form-finding algorithm.
5 read form_finding_resu.inp
6 view line
7
8 # save an image of the mesh as filled geometry.
9 view fill
10 rot -z
11 rot u -50
12 rot c -10
13 hcpy png
14 sys sleep 1
15 sys mv hcpy_1.png form_finding_membrane_plane_resu_mesh_fill.png
16
17 # save an image of the mesh with wireframe geometry.
18 view line
19 rot -z
20 rot u -50
(continues on next page)

372 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


21 rot c -10
22 hcpy png
23 sys sleep 1
24 sys mv hcpy_2.png form_finding_membrane_plane_resu_mesh_line.png
25
26 # save the mesh and physical sets to file to bre retrieved by ccx.
27 send all abq
28 send memb abq names
29 send cables abq names
30
31 # solve the finite element model with ccx
32 sys ccx_2.14 form_finding_solve
33 view fill
34
35 # read the solution file and load it in memory
36 read form_finding_solve.frd
37
38 # contour plots: impose min-max to isolate the membrane.
39 view fill
40 rot -z
41 rot u -50
42 rot c -10
43 ds -4 e 4
44 plot fv all
45 sys sleep 1
46 hcpy png
47 sys mv hcpy_3.png form_finding_membrane_hypar_resu_um.png
48
49 view disp off
50 rot -z
51 ds -4 e 1
52 plot fv all
53 sys sleep 1
54 hcpy png
55 sys mv hcpy_4.png form_finding_membrane_hypar_resu_ux.png
56
57 ds -4 e 2
58 plot fv all
59 sys sleep 1
60 hcpy png
61 sys mv hcpy_5.png form_finding_membrane_hypar_resu_uy.png
62
63 sys montage form_finding_membrane_hypar_resu_ux.png form_finding_membrane_
˓→hypar_resu_uy.png -tile 2x1 -geometry +0+0 form_finding_membrane_hypar_

˓→resu_uxy.png
64
65 ds -4 e 3
66 plot fv all
67 sys sleep 1
68 hcpy png
69 sys mv hcpy_6.png form_finding_membrane_hypar_resu_uz.png
70
71 ds -3 e 1
72 plot fv all
73 min 0
74 max 7
(continues on next page)

10.5. Hypar membrane with cables on the borders 373


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


75 sys sleep 1
76 hcpy png
77 sys mv hcpy_7.png form_finding_membrane_hypar_resu_sxx.png
78
79 ds -3 e 2
80 plot fv all
81 min 0
82 max 7
83 sys sleep 1
84 hcpy png
85 sys mv hcpy_8.png form_finding_membrane_hypar_resu_syy.png
86
87 sys montage form_finding_membrane_hypar_resu_sxx.png form_finding_membrane_
˓→hypar_resu_syy.png -tile 2x1 -geometry +0+0 form_finding_membrane_hypar_
˓→resu_sxxyy.png

88
89 ds -3 e 7
90 plot fv all
91 min 0
92 max 7
93 sys sleep 1
94 hcpy png
95 sys mv hcpy_9.png form_finding_membrane_hypar_resu_sm.png
96
97 ds -2 e 1
98 plot fv all
99 sys sleep 1
100 hcpy png
101 sys mv hcpy_10.png form_finding_membrane_hypar_resu_exx.png
102
103 ds -2 e 2
104 plot fv all
105 sys sleep 1
106 hcpy png
107 sys mv hcpy_11.png form_finding_membrane_hypar_resu_eyy.png
108
109 sys montage form_finding_membrane_hypar_resu_exx.png form_finding_membrane_
˓→hypar_resu_eyy.png -tile 2x1 -geometry +0+0 form_finding_membrane_hypar_

˓→resu_exxyy.png
110
111 ds -2 e 7
112 plot fv all
113 sys sleep 1
114 hcpy png
115 sys mv hcpy_12.png form_finding_membrane_hypar_resu_em.png
116
117 sys montage form_finding_membrane_hypar_resu_sm.png form_finding_membrane_
˓→hypar_resu_em.png -tile 2x1 -geometry +0+0 form_finding_membrane_hypar_
˓→resu_sem.png

118
119 # switch back to the deformed shape
120 rot -z
121 rot u -50
122 rot c -10
123 ds -4 e 4
124 plot fv all

374 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 10.50: Bash script to start the form-finding of


the hypar membrane with cables.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-hypar.fbd

10.5.7 Form-finding geometry

The new geometry obtained thanks to the form-finding procedure is, as far as the central part
of the mesh is concerned, very similar to the input one; in fact, the convergence has been fast
thanks to the clever initial guess provided by the geometry drawn in gmsh.

Code block 10.51: Calculix modified deck for the analysis of


a hypar membrane with cables.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→tests/membrane_hypar/membrane_hypar_gmsh.inp
3 *NODE
4 1, 0, 0, 2000
5 1, 0.000000, 0.000000, 2000.000000
6 2, 5000.000000, 0.000000, 0.000000
7 3, 5000.000000, 5000.000000, 2000.000000
8 4, 0.000000, 5000.000000, 0.000000
9 5, 385.708653, 327.858379, 1803.902897
10 6, 794.871603, 618.195033, 1611.847497
11 7, 1247.902244, 839.741702, 1426.366965
12 8, 1733.304136, 990.366199, 1249.790275
13 9, 2238.485650, 1067.221886, 1081.143666
14 10, 2750.353955, 1067.197136, 915.742487
15 11, 3254.620136, 989.296877, 747.343565
16 12, 3740.004448, 836.673933, 570.831337
17 13, 4192.087201, 611.142829, 386.498858
18 14, 4610.808630, 326.955235, 195.341102
19 15, 4672.243087, 388.768203, 195.400070
20 16, 4387.674556, 807.483853, 386.647250
21 17, 4163.483834, 1261.180228, 571.349397
22 18, 4009.908033, 1745.588239, 747.396582
23 19, 3932.133579, 2250.215694, 915.753905
24 20, 3932.039646, 2762.155115, 1081.165310
25 21, 4008.736726, 3267.370375, 1249.784289
26 22, 4159.415915, 3752.634989, 1426.320270
27 23, 4381.292003, 4205.434810, 1611.806754
28 24, 4671.941646, 4614.438102, 1803.891503
29 25, 4614.435063, 4672.007572, 1803.908655
30 26, 4205.208240, 4381.524651, 1611.808115
31 27, 3752.777849, 4159.486631, 1426.412524
32 28, 3267.386267, 4008.997488, 1249.888557
33 29, 2762.142875, 3932.287426, 1081.284290
34 30, 2250.230874, 3932.352012, 915.852033
35 31, 1745.350650, 4010.119048, 747.321273
36 32, 1261.030283, 4163.718720, 571.236224
(continues on next page)

10.5. Hypar membrane with cables on the borders 375


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


37 33, 807.738310, 4388.199697, 386.545375
38 34, 389.332062, 4672.950928, 195.378744
39 35, 327.841498, 4611.595232, 195.316965
40 36, 613.096012, 4193.727237, 386.428488
41 37, 836.150966, 3738.964279, 571.457739
42 38, 990.364370, 3255.550284, 747.280176
43 39, 1067.731916, 2750.353558, 915.832295
44 40, 1067.507004, 2238.444663, 1081.271061
45 41, 990.571091, 1733.204147, 1249.879190
46 42, 840.046138, 1247.716443, 1426.417087
47 43, 618.140811, 795.143520, 1611.803303
48 44, 327.906017, 385.672506, 1803.904854
49 45, 946.734698, 948.581092, 1480.720312
50 46, 1053.896569, 1260.158927, 1368.096307
51 47, 1141.672341, 1598.766565, 1257.296805
52 48, 1217.285722, 1980.668884, 1142.172006
53 49, 1255.407485, 2377.729067, 1031.976231
54 50, 1243.283053, 2809.391982, 912.620242
55 51, 1219.232546, 3151.057314, 819.794240
56 52, 1095.927112, 3572.515473, 679.915410
57 53, 1063.107080, 3803.566467, 611.058188
58 54, 912.011235, 4092.427949, 494.565324
59 55, 1248.831338, 1045.233382, 1373.366801
60 56, 1345.363252, 1333.871342, 1279.260336
61 57, 1396.181843, 1642.734644, 1198.640262
62 58, 1452.792072, 1978.959433, 1115.972782
63 59, 1464.844238, 2385.350814, 1025.553648
64 60, 1523.819918, 2648.632949, 970.478583
65 61, 1430.167338, 3101.870909, 861.966180
66 62, 1474.825341, 3313.134416, 822.590813
67 63, 1455.276167, 3555.306672, 765.766565
68 64, 1211.524793, 3934.248440, 616.001287
69 65, 1600.602337, 1141.825069, 1256.764844
70 66, 1661.233529, 1395.036330, 1194.556290
71 67, 1682.357398, 1672.784764, 1142.618550
72 68, 1682.439227, 2033.661567, 1081.360797
73 69, 1788.339378, 2249.455393, 1039.046951
74 70, 1700.935790, 2722.421997, 963.599436
75 71, 1789.632136, 2937.999889, 935.089379
76 72, 1827.155482, 3184.534210, 902.776296
77 73, 1724.998184, 3507.609077, 834.321198
78 74, 1473.601863, 3868.705879, 701.267780
79 75, 1989.003028, 1218.348040, 1139.661255
80 76, 2005.391319, 1452.376228, 1110.031345
81 77, 1942.474144, 1747.332319, 1089.372276
82 78, 2066.446563, 1938.199170, 1052.707488
83 79, 1952.921859, 2386.208447, 1014.752181
84 80, 2054.781139, 2614.933023, 990.604640
85 81, 2126.611368, 2876.280136, 971.402870
86 82, 2110.912486, 3181.964262, 945.076112
87 83, 1977.058208, 3511.444661, 887.939656
88 84, 1812.934837, 3799.147906, 805.521868
89 85, 2391.232134, 1255.368103, 1027.610658
90 86, 2314.326578, 1504.731433, 1040.276278
91 87, 2389.862848, 1691.528333, 1020.140965
92 88, 2233.593132, 2082.189725, 1025.216574
(continues on next page)

376 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


93 89, 2309.784028, 2325.366306, 1008.365827
94 90, 2384.631139, 2601.017521, 998.685615
95 91, 2425.190906, 2899.622986, 995.154416
96 92, 2374.909217, 3221.610539, 982.586157
97 93, 2284.625280, 3511.176327, 954.083493
98 94, 2201.495180, 3753.246338, 916.339683
99 95, 2768.154445, 1255.261294, 926.790715
100 96, 2774.130424, 1447.211612, 938.369593
101 97, 2579.931757, 1799.368562, 989.997215
102 98, 2588.338199, 2058.320718, 992.928796
103 99, 2633.993693, 2343.692037, 996.539711
104 100, 2695.649289, 2634.234180, 1006.832610
105 101, 2701.027112, 2955.705408, 1021.015844
106 102, 2669.542247, 3260.232635, 1028.808472
107 103, 2632.512753, 3524.563462, 1029.369836
108 104, 2618.706366, 3744.516333, 1030.743478
109 105, 3217.580975, 1180.874300, 792.877494
110 106, 2991.650885, 1512.996550, 897.917224
111 107, 2913.133906, 1793.147484, 939.034363
112 108, 2900.088336, 2087.197787, 965.733971
113 109, 2953.696518, 2365.492907, 988.119750
114 110, 2980.083907, 2679.748735, 1019.760585
115 111, 2985.414936, 3002.000930, 1052.959832
116 112, 2985.601310, 3298.477894, 1082.897014
117 113, 3011.875393, 3546.894676, 1113.926981
118 114, 3018.095749, 3781.977940, 1141.696504
119 115, 3498.266229, 1154.903214, 714.307701
120 116, 3294.961748, 1481.249656, 827.491902
121 117, 3203.502744, 1796.889560, 894.947909
122 118, 3223.829824, 2063.146222, 933.357313
123 119, 3244.137094, 2362.132497, 979.434384
124 120, 3253.052825, 2695.209493, 1032.601871
125 121, 3268.708424, 3027.713866, 1086.721164
126 122, 3317.587649, 3316.202428, 1140.800624
127 123, 3351.415749, 3600.688688, 1196.716151
128 124, 3399.736364, 3856.493764, 1256.471874
129 125, 3802.723325, 1050.362799, 607.998997
130 126, 3571.892597, 1423.616830, 754.029402
131 127, 3536.940712, 1682.315294, 818.723905
132 128, 3525.687424, 1961.869700, 882.077374
133 129, 3510.664355, 2296.940437, 956.583234
134 130, 3508.062601, 2658.563195, 1034.675594
135 131, 3545.306902, 2996.180309, 1110.152381
136 132, 3598.786980, 3337.205641, 1193.071534
137 133, 3661.966998, 3651.836578, 1277.605459
138 134, 3738.579983, 3944.396900, 1367.319661
139 135, 4101.024922, 895.808969, 487.850910
140 136, 3953.085140, 1185.795898, 604.032573
141 137, 3874.450969, 1466.961485, 697.864382
142 138, 3797.945781, 1820.194319, 807.628532
143 139, 3748.763860, 2214.402528, 920.535443
144 140, 3744.341483, 2609.714015, 1027.830031
145 141, 3780.512713, 3010.890806, 1139.431093
146 142, 3854.599158, 3395.384789, 1254.902310
147 143, 3950.930012, 3746.753457, 1371.219213
148 144, 4048.875427, 4050.279446, 1479.247221

10.5. Hypar membrane with cables on the borders 377


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.5.8 Modified deck

The modified deck is again the exact copy of the input one, except for the fact that the thermal
loads to simulate the prestressing have been added. We here suggest to edit the solution deck
before submitting another analysis for live loads to tweak the convergence parameters in case
the automatic incrementation were not enough to fulfill the desired convergence requirements.

Code block 10.52: Calculix modified deck for the analysis of


a hypar membrane with cables.
1 ** Include all the mesh generated by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Include also the physical sets defining the cables and the membrane.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Assign a simple linear elastic isotropic material to both the membrane
8 ** and the cables.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12 *EXPANSION, ZERO=0.0
13 1.2e-5, 0.0
14 *MATERIAL, NAME=steel
15 *ELASTIC
16 160e3, 0.3
17 *EXPANSION, TYPE=ISO, ZERO=0.0
18 1.2e-5, 0.0
19
20 ** The membrane is 2mm thick; assign the material too.
21 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
22 2
23

24 ** Equivalent beam section for the cable, sharing the same area.
25 ** Beams with circular section are not possible for first order elems.
26 *BEAM SECTION, ELSET=Ecables, MATERIAL=steel, SECTION=RECT
27 17.72, 17.72
28

29 ** Apply a null temperature field on the whole model at T0.


30 *INITIAL CONDITIONS, TYPE=TEMPERATURE
31 Nall, 0.0
32
33 ** Dirichlet boundary conditions at the pins.
34 *BOUNDARY
35 1, 1, 3
36 2, 1, 3
37 3, 1, 3
38 4, 1, 3
39
40 ** Static nonlinear analysis; apply the total pretension immediately at
41 ** T0; request a fixed time incrementation.
42 *STEP, NLGEOM
43 *STATIC, SOLVER=SPOOLES, DIRECT
44 0.01, 1.0, , 0.05
45 *TEMPERATURE
46 1,-54.028685
(continues on next page)

378 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


47 2,-54.194233
48 3,-54.030506
49 4,-54.211192
50 5,-54.028448
51 6,-53.464407
52 7,-53.476238
53 8,-53.546514
54 9,-53.553429
55 10,-53.535845
56 11,-53.475156
57 12,-53.598854
58 13,-53.522415
59 14,-53.837008
60 15,-54.214215
61 16,-53.859634
62 17,-53.614421
63 18,-53.523128
64 19,-53.505791
65 20,-53.542893
66 21,-53.553468
67 22,-53.534383
68 23,-53.470607
69 24,-53.470195
70 25,-54.026139
71 26,-53.478722
72 27,-53.443162
73 28,-53.540097
74 29,-53.555822
75 30,-53.540934
76 31,-53.534703
77 32,-53.517184
78 33,-53.592180
79 34,-53.842548
80 35,-54.190508
81 36,-53.825592
82 37,-53.668146
83 38,-53.444898
84 39,-53.559204
85 40,-53.540843
86 41,-53.558883
87 42,-53.550180
88 43,-53.449334
89 44,-53.483928
90 45,-0.000000
91 46,-0.000000
92 47,-0.000000
93 48,-0.000000
94 49,-0.000000
95 50,-0.000000
96 51,-0.000000
97 52,-0.000000
98 53,-0.000000
99 54,-0.000000
100 55,-0.000000
101 56,-0.000000
102 57,-0.000000
(continues on next page)

10.5. Hypar membrane with cables on the borders 379


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


103 58,-0.000000
104 59,-0.000000
105 60,-0.000000
106 61,-0.000000
107 62,-0.000000
108 63,-0.000000
109 64,-0.000000
110 65,-0.000000
111 66,-0.000000
112 67,-0.000000
113 68,-0.000000
114 69,-0.000000
115 70,-0.000000
116 71,-0.000000
117 72,-0.000000
118 73,-0.000000
119 74,-0.000000
120 75,-0.000000
121 76,-0.000000
122 77,-0.000000
123 78,-0.000000
124 79,-0.000000
125 80,-0.000000
126 81,-0.000000
127 82,-0.000000
128 83,-0.000000
129 84,-0.000000
130 85,-0.000000
131 86,-0.000000
132 87,-0.000000
133 88,-0.000000
134 89,-0.000000
135 90,-0.000000
136 91,-0.000000
137 92,-0.000000
138 93,-0.000000
139 94,-0.000000
140 95,-0.000000
141 96,-0.000000
142 97,-0.000000
143 98,-0.000000
144 99,-0.000000
145 100,-0.000000
146 101,-0.000000
147 102,-0.000000
148 103,-0.000000
149 104,-0.000000
150 105,-0.000000
151 106,-0.000000
152 107,-0.000000
153 108,-0.000000
154 109,-0.000000
155 110,-0.000000
156 111,-0.000000
157 112,-0.000000
158 113,-0.000000
(continues on next page)

380 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


159 114,-0.000000
160 115,-0.000000
161 116,-0.000000
162 117,-0.000000
163 118,-0.000000
164 119,-0.000000
165 120,-0.000000
166 121,-0.000000
167 122,-0.000000
168 123,-0.000000
169 124,-0.000000
170 125,-0.000000
171 126,-0.000000
172 127,-0.000000
173 128,-0.000000
174 129,-0.000000
175 130,-0.000000
176 131,-0.000000
177 132,-0.000000
178 133,-0.000000
179 134,-0.000000
180 135,-0.000000
181 136,-0.000000
182 137,-0.000000
183 138,-0.000000
184 139,-0.000000
185 140,-0.000000
186 141,-0.000000
187 142,-0.000000
188 143,-0.000000
189 144,-0.000000
190 *NODE FILE
191 U, RF
192 *EL FILE
193 S, E
194 *END STEP
195 ** Request nodal displacements and reaction forces, but also stresses and
196 ** strains for the elements.

10.5.9 Post-processing

We here report the final contour plots automated by cgx for the displacements (magnitude, x
and y-direction), stresses and strains (x and y-dir, Mises).

10.5.10 Dlubal comparison

The shapes produced by the Dlubal commercial software are slightly different from the ones
generated by the algorithm discussed in this thesis, because:
1. The force density for the cables is not assigned as a density per finite element, but per
geometrical entitiy, which means for the entire cable between two anchored pins.

10.5. Hypar membrane with cables on the borders 381


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.32: Total displacements of the hypar membrane with cables.

10.33: Displacements in the x and y-direction of the hypar membrane with cables.

382 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.34: Normal stresses in the x and y-direction of the hypar membrane with cables.

10.35: Normal strains in the x and y-direction of the hypar membrane with cables.

10.5. Hypar membrane with cables on the borders 383


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.36: Von-Mises stresses and strains of the hypar membrane with cables.

384 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

2. The stress is imposed as a target fixed stress; the software does not allow the definition
of a stress density on different finite elements.
Especially for 3D structures, this difference is generally negligible, especially when the addi-
tional live loads are considered. However, this aspect may impose a limitation on the possible
obtainable shapes since the geometry must be partitioned in advanced to assign different coef-
ficients.

10.5.11 Conclusions

The example of the hypar membrane with cables is the first real-world application against
which the code is tested. Even though only the topology of the problem is important as far as
the form-finding procedure is concerned, we want to stress the fact that a solid guess of the
solution should be generally given to the solver. This can be easily achieved by OpenCAS-
CADE kernel in gmsh, or in case of more complex geometries, an industrial alternative could
be the employment of CAD packages such as Solid Edge, or even the tools in Shape Studio of
Siemens NX Nastran.

10.5. Hypar membrane with cables on the borders 385


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.37: Check of the displacement and the 𝜎x of the hypar membrane with cables.

386 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.38: Check of 𝜎y and the 𝜎mises of the hypar membrane with cables.

10.5. Hypar membrane with cables on the borders 387


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.39: Check of 𝜀x and the 𝜀y of the hypar membrane with cables.

388 Chapter 10. Verification of the form-finding algorithm


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

10.40: Check of 𝜀mises and of the internal action in the cable of the hypar membrane with
cables.

10.5. Hypar membrane with cables on the borders 389


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

390 Chapter 10. Verification of the form-finding algorithm


CHAPTER 11

Form-finding and live loads

The most important goal of the form-finding is the establishment of a mostly uniform pre-
tensioning in the membrane in order to avoid compressive zones after the application of the
external live loads. In addition, a serious pre-tensioning ensures that the membrane is nowhere
slack, thus the exhibited behaviour, even though geometrically nonlinear, is only slightly su-
perlinear.
We therefore verify an hexagonal membrane pre-tensioned by means of cables on both the
borders and from the pins at ground level to the top of the middle columns.

11.1 Hexagonal membrane with cables

11.1.1 Pre-processing

The pre-processing for the production of the mesh is done in gmsh, requesting a mesh with a
frontal algorithm to increase the regularity of the triangular discretizazion, which in turn allows
a faster convergence of the NK method.

Code block 11.1: Mesh in gmsh of the hexagonal membrane


before the form-finding process.
1 lc = 1000.0;
2
3 l = 5000.0;
4 h = 3000.0;
5
6 Point(1) = {0, 0, 0, lc};
7 Point(2) = {l, l, 0, lc};
8 Point(3) = {l, -l, 0, lc};
(continues on next page)

391
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


9 Point(4) = {2*l, l, 0, lc};
10 Point(5) = {2*l, -l, 0, lc};
11 Point(6) = {3*l, 0, 0, lc};
12 Point(7) = {l, 0, h, lc};
13 Point(8) = {2*l, 0, h, lc};
14
15 Line(1) = {1, 2};
16 Line(2) = {2, 4};
17 Line(3) = {4, 6};
18 Line(4) = {6, 5};
19 Line(5) = {5, 3};
20 Line(6) = {3, 1};
21 Line(7) = {7, 1};
22 Line(8) = {7, 8};
23 Line(9) = {8, 6};
24 Line(10) = {2, 7};
25 Line(11) = {7, 3};
26 Line(12) = {4, 8};
27 Line(13) = {8, 5};
28
29 Line Loop(1) = {1, 10, 7};
30 Line Loop(2) = {6, -7, 11};
31 Line Loop(3) = {-10, 2, 12, -8};
32 Line Loop(4) = {-11, 8, 13, 5};
33 Line Loop(5) = {-12, 3, -9};
34 Line Loop(6) = {-13, 9, 4};
35
36 Surface(1) = {1};
37 Surface(2) = {2};
38 Surface(3) = {3};
39 Surface(4) = {4};
40 Surface(5) = {5};
41 Surface(6) = {6};
42
43 // Choose a frontal algorithm for the membrane to increase the
44 // regularity of the mesh.
45 Mesh.Algorithm = 6;
46

47 Physical Line("cables", 200) = {1:13};


48 Physical Surface("memb", 300) = {1:6};
49
50 Mesh.ElementOrder = 1;
51 Mesh.SaveGroupsOfNodes = 1;
52

53 Mesh 2;
54
55 Save "membrana_hex.msh";
56 Mesh.Format = 39;
57 Save "membrana_hex_gmsh.inp";
58 Mesh.Format = 33;
59 Save "membrana_hex.med";
60
61 Print "membrane_hex.png";

392 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.1: Topology for the form-finding of a hexagonal membrane with cables.

11.1. Hexagonal membrane with cables 393


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 11.2: Extract of the nodes of the mesh of the


hexagonal membrane before the form-finding process.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→structures/membrane_hex/membrana_hex_gmsh.inp
3 *NODE
4 1, 0, 0, 0
5 2, 5000, 5000, 0
6 3, 5000, -5000, 0
7 4, 10000, 5000, 0
8 5, 10000, -5000, 0
9 6, 15000, 0, 0
10 7, 5000, 0, 3000
11 8, 10000, 0, 3000
12 9, 624.9999999997, 624.9999999997, 0
13 10, 1249.9999999988, 1249.9999999988, 0
14 11, 1874.9999999989, 1874.9999999989, 0
15 12, 2499.9999999969, 2499.9999999969, 0
16 13, 3124.9999999997, 3124.9999999997, 0
17 14, 3750.0000000026, 3750.0000000026, 0
18 15, 4375.0000000028, 4375.0000000028, 0
19 16, 5999.9999999909, 5000, 0
20 17, 6999.9999999818, 5000, 0
21 18, 7999.9999999818, 5000, 0
22 19, 8999.9999999909, 5000, 0
23 20, 10624.999999999, 4375.0000000009, 0

Code block 11.3: Extract of the cables of the mesh in Cal-


culix of the hexagonal membrane.
1 *ELEMENT, type=T3D2, ELSET=Line1
2 9, 1, 9
3 10, 9, 10
4 11, 10, 11
5 12, 11, 12
6 13, 12, 13
7 14, 13, 14
8 15, 14, 15
9 16, 15, 2
10 *ELEMENT, type=T3D2, ELSET=Line2
11 17, 2, 16
12 18, 16, 17
13 19, 17, 18
14 20, 18, 19
15 21, 19, 4
16 *ELEMENT, type=T3D2, ELSET=Line3
17 22, 4, 20
18 23, 20, 21
19 24, 21, 22
20 25, 22, 23
21 26, 23, 24
22 27, 24, 25
23 28, 25, 26
24 29, 26, 6
(continues on next page)

394 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


25 *ELEMENT, type=T3D2, ELSET=Line4
26 30, 6, 27
27 31, 27, 28
28 32, 28, 29
29 33, 29, 30
30 34, 30, 31
31 35, 31, 32
32 36, 32, 33
33 37, 33, 5
34 *ELEMENT, type=T3D2, ELSET=Line5
35 38, 5, 34
36 39, 34, 35
37 40, 35, 36
38 41, 36, 37
39 42, 37, 3
40 *ELEMENT, type=T3D2, ELSET=Line6
41 43, 3, 38
42 44, 38, 39
43 45, 39, 40
44 46, 40, 41
45 47, 41, 42
46 48, 42, 43
47 49, 43, 44
48 50, 44, 1

Code block 11.4: Extract of the membranes of the mesh in


Calculix of the hexagonal membrane.
1 *ELEMENT, type=CPS3, ELSET=Surface1
2 224, 46, 79, 83
3 226, 62, 83, 81
4 225, 45, 83, 63
5 227, 62, 63, 83
6 223, 45, 46, 83
7 258, 48, 88, 89
8 259, 82, 89, 88
9 114, 45, 63, 7
10 270, 79, 91, 83
11 115, 15, 2, 59
12 110, 1, 9, 49
13 272, 81, 83, 91
14 234, 61, 81, 84
15 233, 60, 61, 84
16 201, 46, 47, 79
17 212, 61, 62, 81
18 248, 15, 59, 87
19 247, 14, 15, 87
20 254, 9, 88, 49
21 253, 9, 10, 88
22 256, 48, 49, 88
23 204, 12, 13, 80
24 250, 60, 84, 87
25 239, 11, 12, 85
26 222, 10, 11, 82
27 240, 12, 80, 85
(continues on next page)

11.1. Hexagonal membrane with cables 395


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


28 241, 80, 86, 85
29 251, 59, 60, 87
30 235, 11, 85, 82
31 274, 80, 90, 92
32 257, 47, 48, 89
33 271, 81, 91, 86
34 282, 79, 93, 86
35 264, 13, 90, 80
36 276, 81, 86, 92
37 268, 84, 90, 87
38 269, 79, 86, 91
39 252, 10, 82, 88
40 275, 84, 92, 90
41 260, 47, 89, 79
42 266, 13, 14, 90
43 279, 82, 85, 93
44 277, 81, 92, 84
45 278, 82, 93, 89
46 267, 14, 87, 90
47 273, 80, 92, 86
48 280, 85, 86, 93
49 281, 79, 89, 93

Code block 11.5: Physical entities of the mesh in Calculix of


the hexagonal membrane.
1 *ELSET,ELSET=cables
2 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
3 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
4 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
5 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
6 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
7 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
8 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
9 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
10 89, 90, 91,
11 *ELSET,ELSET=memb
12 224, 226, 225, 227, 223, 258, 259, 114, 270, 115,
13 110, 272, 234, 233, 201, 212, 248, 247, 254, 253,
14 256, 204, 250, 239, 222, 240, 241, 251, 235, 274,
15 257, 271, 282, 264, 276, 268, 269, 252, 275, 260,
16 266, 279, 277, 278, 267, 273, 280, 281, 779, 782,
17 780, 781, 778, 813, 814, 669, 825, 670, 665, 827,
18 784, 753, 768, 806, 785, 805, 809, 808, 811, 804,
19 762, 791, 777, 790, 796, 802, 792, 812, 829, 826,
20 820, 822, 837, 831, 824, 807, 830, 815, 821, 834,
21 832, 819, 833, 828, 835, 836, 1446, 1448, 1445, 1447,
22 1455, 1428, 1434, 1481, 1486, 1422, 1417, 1453, 1388, 1366,
23 1454, 1371, 1360, 1321, 1389, 1361, 1383, 1327, 1390, 1336,
24 1343, 1402, 1392, 1350, 1356, 1401, 1391, 1393, 1403, 1412,
25 1400, 1413, 1419, 1425, 1431, 1439, 1444, 1415, 1420, 1426,
26 1432, 1462, 1467, 1461, 1466, 1435, 1440, 1482, 1487, 1476,
27 1471, 1472, 1477, 1483, 1488, 1480, 1485, 1469, 1474, 1464,
28 1458, 1459, 1463, 1468, 1470, 1475, 1473, 1478, 1456, 1465,
29 1460, 1479, 1457, 1484, 2371, 2373, 2372, 2370, 2380, 2353,
(continues on next page)

396 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


30 2359, 2406, 2411, 2347, 2342, 2378, 2313, 2291, 2296, 2285,
31 2379, 2244, 2314, 2286, 2308, 2250, 2315, 2259, 2267, 2327,
32 2317, 2274, 2281, 2318, 2328, 2326, 2316, 2337, 2325, 2338,
33 2344, 2348, 2354, 2364, 2369, 2340, 2345, 2351, 2357, 2386,
34 2391, 2387, 2392, 2360, 2365, 2407, 2412, 2402, 2397, 2396,
35 2401, 2408, 2413, 2405, 2410, 2394, 2399, 2389, 2383, 2384,
36 2388, 2393, 2395, 2400, 2398, 2403, 2381, 2390, 2385, 2404,
37 2382, 2409, 3180, 3183, 3182, 3184, 3179, 3213, 3214, 3064,
38 3225, 3068, 3071, 3227, 3190, 3189, 3155, 3166, 3205, 3206,
39 3208, 3209, 3211, 3161, 3204, 3194, 3173, 3191, 3201, 3202,
40 3195, 3229, 3212, 3226, 3237, 3231, 3222, 3224, 3220, 3207,
41 3230, 3215, 3234, 3221, 3232, 3233, 3219, 3228, 3235, 3236,
42 3745, 3742, 3743, 3741, 3744, 3775, 3776, 3622, 3787, 3623,
43 3620, 3789, 3747, 3714, 3730, 3767, 3748, 3766, 3770, 3771,
44 3773, 3765, 3723, 3756, 3740, 3753, 3763, 3768, 3757, 3774,
45 3791, 3788, 3782, 3799, 3784, 3793, 3786, 3769, 3792, 3777,
46 3783, 3796, 3794, 3795, 3781, 3790, 3797, 3798,
47 *NSET,NSET=cables

11.1.2 Solution

Uniform pretensioning is imposed to both the membrane and the cables. The pins are located
on the borders and at the top of the columns. The coefficient of thermal expansion, as already
outlined, is employed to simulate the prestressing of the cables.

Code block 11.6: ASCII file for the definition of the form-
finding problem for the hexagonal membrane.
1 CHARACTERISTICLENGTH
2 1000.0
3 BCC
4 1
5 2
6 3
7 4
8 5
9 6
10 7
11 8
12 PRECABLE
13 60.0e3
14 1 60.0e3
15 CABLEAREA
16 314.0
17 1 314.0
18 CABLEYOUNG
19 160E3
20 1 160E3
21 CABLEEXPANSION
22 1.2E-5
23 1 1.2E-5
24 PREMEMBRANE
(continues on next page)

11.1. Hexagonal membrane with cables 397


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


25 4.0
26 1 4.0
27 MEMBRANETHICKNESS
28 2.0
29 1 2.0
30 ENDINPUT

Code block 11.7: Calculix deck for the verification of the


prestressing of the hexagonal membrane.
1 ** Include the overall mesh produced by the form-finding algorithm.
2 *INCLUDE, INPUT=all.msh
3 ** Include the sets for the membranes and cables.
4 *INCLUDE, INPUT=memb.nam
5 *INCLUDE, INPUT=cables.nam
6
7 ** Define the material for the cables and membranes; simple isotropic
8 ** elastic behaviour.
9 *MATERIAL, NAME=membr
10 *ELASTIC
11 8e3, 0.4
12 *EXPANSION, ZERO=0.0
13 1.2e-5, 0.0
14 *MATERIAL, NAME=steel
15 *ELASTIC
16 160e3, 0.3
17 *EXPANSION, TYPE=ISO, ZERO=0.0
18 1.2e-5, 0.0
19

20 ** The membranes are 2mm thick.


21 *SHELL SECTION, ELSET=Ememb, MATERIAL=membr
22 2
23
24 ** Idealize the cable as rectangular beam with the same cross section.
25 *BEAM SECTION, ELSET=Ecables, MATERIAL=steel, SECTION=RECT
26 17.72, 17.72
27
28 ** Initial conditions for the temperature field to simulate the
29 ** prestressing of the cables.
30 *INITIAL CONDITIONS, TYPE=TEMPERATURE
31 Nall, 0.0
32
33 ** Dirichlet boundary conditions.
34 *BOUNDARY
35 1, 1, 3
36 2, 1, 3
37 3, 1, 3
38 4, 1, 3
39 5, 1, 3
40 6, 1, 3
41 7, 1, 3
42 8, 1, 3
43
44 ** Static nonlinear step with fixed time incrementation, the pretension is
45 ** applied immediately at time T0. After that, additional live loads are
(continues on next page)

398 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


46 ** applied.
47 *STEP, NLGEOM, INC=1000
48 *STATIC, SOLVER=SPOOLES, DIRECT
49 0.01, 1.0, , 0.05
50 *CLOAD
51 *INCLUDE, INPUT=memb.frc
52 *TEMPERATURE
53 1,-104.923212
54 2,-98.386038
55 3,-100.810315
56 4,-108.907115
57 5,-100.809841
58 6,-104.923233
59 7,-93.027430
60 8,-93.027460
61 9,-99.689942
62 10,-98.545725
63 11,-97.743953
64 12,-97.273849
65 13,-97.581924
66 14,-97.666372
67 15,-97.560610
68 16,-108.907130
69 17,-108.427499
70 18,-109.465594
71 19,-108.427499
72 20,-98.386082
73 21,-97.560655
74 22,-97.666526
75 23,-97.582046
76 24,-97.273695
77 25,-97.744085
78 26,-98.545547
79 27,-99.689970
80 28,-98.545770
81 29,-97.743955
82 30,-97.273701
83 31,-97.581921
84 32,-97.666423
85 33,-97.560674
86 34,-108.907616
87 35,-108.427222
88 36,-109.465596
89 37,-108.427781
90 38,-98.386073
91 39,-97.560615
92 40,-97.666565
93 41,-97.582076
94 42,-97.273583
95 43,-97.744127
96 44,-98.545500
97 45,-84.379925
98 46,-98.433633
99 47,-101.104007
100 48,-102.067416
101 49,-101.517671
(continues on next page)

11.1. Hexagonal membrane with cables 399


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


102 50,-105.053455
103 51,-103.138868
104 52,-103.230549
105 53,-103.137666
106 54,-84.379970
107 55,-98.433671
108 56,-101.103957
109 57,-102.067491
110 58,-101.517579
111 59,-100.810097
112 60,-99.569551
113 61,-100.698457
114 62,-99.954022
115 63,-98.140766
116 64,-93.027542
117 65,-98.140734
118 66,-99.954278
119 67,-100.698464
120 68,-99.569027
121 69,-100.810098
122 70,-99.569509
123 71,-100.698499
124 72,-99.954052
125 73,-98.140755
126 74,-93.027361
127 75,-98.140786
128 76,-99.953848
129 77,-100.698557
130 78,-99.570045
131 79,-0.000000
132 80,-0.000000
133 81,-0.000000
134 82,-0.000000
135 83,-0.000000
136 84,-0.000000
137 85,-0.000000
138 86,-0.000000
139 87,-0.000000
140 88,-0.000000
141 89,-0.000000
142 90,-0.000000
143 91,-0.000000
144 92,-0.000000
145 93,-0.000000
146 94,-0.000000
147 95,-0.000000
148 96,-0.000000
149 97,-0.000000
150 98,-0.000000
151 99,-0.000000
152 100,-0.000000
153 101,-0.000000
154 102,-0.000000
155 103,-0.000000
156 104,-0.000000
157 105,-0.000000
(continues on next page)

400 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


158 106,-0.000000
159 107,-0.000000
160 108,-0.000000
161 109,-0.000000
162 110,-0.000000
163 111,-0.000000
164 112,-0.000000
165 113,-0.000000
166 114,-0.000000
167 115,-0.000000
168 116,-0.000000
169 117,-0.000000
170 118,-0.000000
171 119,-0.000000
172 120,-0.000000
173 121,-0.000000
174 122,-0.000000
175 123,-0.000000
176 124,-0.000000
177 125,-0.000000
178 126,-0.000000
179 127,-0.000000
180 128,-0.000000
181 129,-0.000000
182 130,-0.000000
183 131,-0.000000
184 132,-0.000000
185 133,-0.000000
186 134,-0.000000
187 135,-0.000000
188 136,-0.000000
189 137,-0.000000
190 138,-0.000000
191 139,-0.000000
192 140,-0.000000
193 141,-0.000000
194 142,-0.000000
195 143,-0.000000
196 144,-0.000000
197 145,-0.000000
198 146,-0.000000
199 147,-0.000000
200 148,-0.000000
201 149,-0.000000
202 150,-0.000000
203 151,-0.000000
204 152,-0.000000
205 153,-0.000000
206 154,-0.000000
207 155,-0.000000
208 156,-0.000000
209 157,-0.000000
210 158,-0.000000
211 159,-0.000000
212 160,-0.000000
213 161,-0.000000
(continues on next page)

11.1. Hexagonal membrane with cables 401


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


214 162,-0.000000
215 163,-0.000000
216 164,-0.000000
217 165,-0.000000
218 166,-0.000000
219 167,-0.000000
220 168,-0.000000
221 169,-0.000000
222 170,-0.000000
223 171,-0.000000
224 172,-0.000000
225 173,-0.000000
226 174,-0.000000
227 175,-0.000000
228 176,-0.000000
229 177,-0.000000
230 178,-0.000000
231 179,-0.000000
232 180,-0.000000
233 181,-0.000000
234 182,-0.000000
235 183,-0.000000
236 184,-0.000000
237 185,-0.000000
238 186,-0.000000
239 187,-0.000000
240 188,-0.000000
241 189,-0.000000
242 190,-0.000000
243 191,-0.000000
244 192,-0.000000
245 193,-0.000000
246 194,-0.000000
247 195,-0.000000
248 196,-0.000000
249 *NODE FILE
250 U, RF
251 *EL FILE
252 S, E
253 *END STEP
254 ** Request for nodal displacements and reaction forces, element stresses
255 ** and strains.

Code block 11.8: Calculix file for the pre-post and analysis
phase of the hexagonal membrane.
1 # change element type since gmsh by default outputs plane stress
2 # elements.
3 sys sed -i "s/CPS3/S3/g" form_finding_resu.inp
4
5 # read the mesh produced by the form-finding algorithm.
6 read form_finding_resu.inp
7 view line
8
9 # save an image of the filled geometry.
(continues on next page)

402 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


10 view fill
11 rot -z
12 rot u -50
13 rot c -15
14 hcpy png
15 sys sleep 1
16 sys mv hcpy_1.png membrane_hex_mesh_fill.png
17
18 # save an image of the mesh with wireframe.
19 view line
20 rot -z
21 rot u -50
22 rot c -15
23 hcpy png
24 sys sleep 1
25 sys mv hcpy_2.png membrane_hex_mesh_line.png
26
27 # saving the mesh and groups to disk to be recovered by ccx during the FEM
28 # analysis.
29 send all abq
30 send memb abq names
31 send cables abq names
32
33 # add snow load
34 comp do memb
35 send memb abq force 0 0 -1000.0
36
37 # solve the finite element model with ccx using the parallel version of
38 # spooles.
39 sys ccx_2.14 form_finding_solve
40 view fill
41

42 # read the files containing the results.


43 read form_finding_solve.frd
44
45
46 # contour plots
47 rot -z
48 rot u -50
49 rot c -15
50 view disp
51 scal d 25
52 ds -4 e 4
53 plot fv all
54 sys sleep 1
55 hcpy png
56 sys mv hcpy_3.png membrane_hex_displacement_magnitude_3d.png
57
58

59 view disp off


60 ds -4 e 1
61 plot fv all
62 sys sleep 1
63 hcpy png
64 sys mv hcpy_4.png membrane_hex_displacement_x.png
65
(continues on next page)

11.1. Hexagonal membrane with cables 403


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


66 ds -4 e 2
67 plot fv all
68 sys sleep 1
69 hcpy png
70 sys mv hcpy_5.png membrane_hex_displacement_y.png
71
72 sys montage membrane_hex_displacement_x.png membrane_hex_displacement_y.
˓→png -tile 2x1 -geometry +0+0 membrane_hex_displacement_uxy.png
73

74 ds -4 e 3
75 plot fv all
76 sys sleep 1
77 hcpy png
78 sys mv hcpy_6.png membrane_hex_displacement_z.png
79

80 ds -3 e 1
81 plot fv all
82 max 20
83 sys sleep 1
84 hcpy png
85 sys mv hcpy_7.png membrane_hex_stress_xx.png
86
87 ds -3 e 2
88 plot fv all
89 max 15
90 sys sleep 1
91 hcpy png
92 sys mv hcpy_8.png membrane_hex_stress_yy.png
93
94 sys montage membrane_hex_stress_xx.png membrane_hex_stress_yy.png -tile
˓→2x1 -geometry +0+0 membrane_hex_stress_xxyy.png
95
96 ds -3 e 7
97 plot fv all
98 max 10
99 sys sleep 1
100 hcpy png
101 sys mv hcpy_9.png membrane_hex_stress_m.png
102

103 ds -2 e 1
104 plot fv all
105 sys sleep 1
106 hcpy png
107 sys mv hcpy_10.png membrane_hex_strain_xx.png
108

109 ds -2 e 2
110 plot fv all
111 sys sleep 1
112 hcpy png
113 sys mv hcpy_11.png membrane_hex_strain_yy.png
114
115 sys montage membrane_hex_strain_xx.png membrane_hex_strain_yy.png -tile
˓→2x1 -geometry +0+0 membrane_hex_strain_xxyy.png
116
117 ds -2 e 7
118 plot fv all
(continues on next page)

404 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


119 sys sleep 1
120 hcpy png
121 sys mv hcpy_12.png membrane_hex_strain_m.png
122
123 sys montage membrane_hex_stress_m.png membrane_hex_strain_m.png -tile 2x1 -
˓→geometry +0+0 membrane_hex_sem.png
124
125 # time graphs
126 seta mid n 2774
127 graph mid time DISP D3
128 sys mv graph_0.ps membrane_hex_displacement_mid.eps
129 graph mid time STRESS SXX
130 sys mv graph_1.ps membrane_hex_stress_xx_mid.eps
131 graph mid time STRESS SYY
132 sys mv graph_2.ps membrane_hex_stress_yy_mid.eps
133
134 sys ps2pdf membrane_hex_stress_xx_mid.eps
135 sys ps2pdf membrane_hex_stress_yy_mid.eps
136 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_
˓→stress_xxyy_mid.pdf membrane_hex_stress_xx_mid.pdf membrane_hex_stress_
˓→yy_mid.pdf

137
138 graph mid time STRESS Mises
139 sys mv graph_3.ps membrane_hex_stress_mises_mid.eps
140 graph mid time TOSTRAIN EXX
141 sys mv graph_4.ps membrane_hex_strain_xx_mid.eps
142 graph mid time TOSTRAIN EYY
143 sys mv graph_5.ps membrane_hex_strain_yy_mid.eps
144
145 sys ps2pdf membrane_hex_strain_xx_mid.eps
146 sys ps2pdf membrane_hex_strain_yy_mid.eps
147 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_
˓→strain_xxyy_mid.pdf membrane_hex_strain_xx_mid.pdf membrane_hex_strain_
˓→yy_mid.pdf
148
149 graph mid time TOSTRAIN Mises
150 sys mv graph_6.ps membrane_hex_strain_mises_mid.eps
151

152 sys ps2pdf membrane_hex_stress_mises_mid.eps


153 sys ps2pdf membrane_hex_strain_mises_mid.eps
154 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_se_
˓→mid.pdf membrane_hex_stress_mises_mid.pdf membrane_hex_strain_mises_mid.
˓→pdf
155

156 seta front n 2861


157 graph front time DISP D3
158 sys mv graph_7.ps membrane_hex_displacement_front.eps
159 graph front time STRESS SXX
160 sys mv graph_8.ps membrane_hex_stress_xx_front.eps
161 graph front time STRESS SYY
162 sys mv graph_9.ps membrane_hex_stress_yy_front.eps
163
164 sys ps2pdf membrane_hex_stress_xx_front.eps
165 sys ps2pdf membrane_hex_stress_yy_front.eps
166 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_
˓→stress_xxyy_front.pdf membrane_hex_stress_xx_front.pdf membrane_hex_
˓→stress_yy_front.pdf (continues on next page)

11.1. Hexagonal membrane with cables 405


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


167
168 graph front time STRESS Mises
169 sys mv graph_10.ps membrane_hex_stress_mises_front.eps
170 graph front time TOSTRAIN EXX
171 sys mv graph_11.ps membrane_hex_strain_xx_front.eps
172 graph front time TOSTRAIN EYY
173 sys mv graph_12.ps membrane_hex_strain_yy_front.eps
174
175 sys ps2pdf membrane_hex_strain_xx_front.eps
176 sys ps2pdf membrane_hex_strain_yy_front.eps
177 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_
˓→strain_xxyy_front.pdf membrane_hex_strain_xx_front.pdf membrane_hex_
˓→strain_yy_front.pdf
178
179 graph front time TOSTRAIN Mises
180 sys mv graph_13.ps membrane_hex_strain_mises_front.eps
181
182 sys ps2pdf membrane_hex_stress_mises_front.eps
183 sys ps2pdf membrane_hex_strain_mises_front.eps
184 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_se_
˓→front.pdf membrane_hex_stress_mises_front.pdf membrane_hex_strain_mises_

˓→front.pdf
185
186 sys ps2pdf membrane_hex_displacement_mid.eps
187 sys ps2pdf membrane_hex_displacement_front.eps
188 sys pdfnup --no-landscape --a4paper --nup 1x2 --outfile membrane_hex_
˓→displacements.pdf membrane_hex_displacement_mid.pdf membrane_hex_
˓→displacement_front.pdf
189
190 # switch back to the deformed shape
191 rot -z
192 rot u -50
193 rot c -15
194 view disp
195 ds -4 e 4
196 plot fv all

Code block 11.9: Bash script to start Calculix for the solu-
tion of the hexagonal membrane.
1 #!/usr/bin/env bash
2 cgx_2.14 -b membrane-hex.fbd

11.1.3 Post-processing

The post-processing phase is automated with a script in Calculix to produce both the countour
plots and the graphs. Each analysis is fully automated from the pre to the post-processing.

406 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 11.10: Extract of the updated nodes after the


form-finding for the hexagonal membrane.
1 *Heading
2 /home/anava/Documents/Projects/tension-structures/src/python/fsd_calculix/
˓→structures/membrane_hex/membrana_hex_gmsh.inp
3 *NODE
4 1, 0, 0, 0
5 1, 0.000000, 0.000000, 0.000000
6 2, 5000.000000, 5000.000000, 0.000000
7 3, 5000.000000, -5000.000000, 0.000000
8 4, 10000.000000, 5000.000000, 0.000000
9 5, 10000.000000, -5000.000000, 0.000000
10 6, 15000.000000, 0.000000, 0.000000
11 7, 5000.000000, 0.000000, 3000.000000
12 8, 10000.000000, 0.000000, 3000.000000
13 9, 945.231880, 181.268611, 277.579347
14 10, 1851.002614, 493.702329, 527.450758
15 11, 2693.977615, 967.416898, 699.408393
16 12, 3445.462451, 1588.533689, 768.763727
17 13, 4078.320499, 2335.757827, 718.432283
18 14, 4563.957473, 3173.316154, 558.107799
19 15, 4873.219860, 4069.676787, 309.389214
20 16, 5908.918922, 4447.373431, 256.827228
21 17, 6950.045017, 4157.896007, 395.481061
22 18, 8049.955301, 4157.895839, 395.481131
23 19, 9091.081402, 4447.373236, 256.827304
24 20, 10126.779679, 4069.676322, 309.389426
25 21, 10436.042801, 3173.315415, 558.107884
26 22, 10921.680920, 2335.755912, 718.432241
27 23, 11554.539528, 1588.530646, 768.763627
28 24, 12306.023049, 967.414737, 699.408053
29 25, 13148.998665, 493.697868, 527.452199
30 26, 14054.768335, 181.267811, 277.579418
31 27, 14054.767747, -181.267797, 277.579642
32 28, 13148.996695, -493.701538, 527.451688
33 29, 12306.021600, -967.415998, 699.409299
34 30, 11554.537675, -1588.531543, 768.764657
35 31, 10921.680944, -2335.756678, 718.432075
36 32, 10436.044789, -3173.315950, 558.106866
37 33, 10126.781406, -4069.677030, 309.388580
38 34, 9091.075526, -4447.372938, 256.827342
39 35, 8049.953483, -4157.892223, 395.482806
40 36, 6950.043173, -4157.899802, 395.479329
41 37, 5908.912939, -4447.373809, 256.827194
42 38, 4873.220138, -4069.676455, 309.389447
43 39, 4563.956829, -3173.316014, 558.107781
44 40, 4078.318071, -2335.756403, 718.432031
45 41, 3445.459104, -1588.531043, 768.763542
46 42, 2693.976060, -967.416334, 699.407778
47 43, 1851.000346, -493.698518, 527.452586
48 44, 945.231305, -181.268380, 277.579512
49 45, 4493.178788, 0.000090, 2320.308151
50 46, 3737.180478, 0.000997, 1682.571128

11.1. Hexagonal membrane with cables 407


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.2: Total displacements of the hexagonal membrane under the live loads.

11.3: Displacements in the x and y-direction of the hexagonal membrane.

408 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.4: Normal stresses in the x and y-direction of the hexagonal membrane.

11.5: Normal strains in the x and y-direction of the hexagonal membrane.

11.6: Von-Mises stresses and strains of the hexagonal membrane under the live loads.

11.1. Hexagonal membrane with cables 409


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


0
Node=2774

-2

-4

-6

-8

-10
D3

-12

-14

-16

-18

-20
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


0
Node=2861

-0.5

-1

-1.5

-2

-2.5
D3

-3

-3.5

-4

-4.5

-5
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.7: Displacements for the front and middle membrane of the hex structure.

410 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


1.8
Node=2861

1.6

1.4

1.2

1
SXX

0.8

0.6

0.4

0.2

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


4.5
Node=2861

3.5

2.5
SYY

1.5

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.8: Normal stresses in the x and y-direction of the front membrane.

11.1. Hexagonal membrane with cables 411


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


8
Node=2774

4
SXX

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


4.5
Node=2774

3.5

2.5
SYY

1.5

0.5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.9: Normal stresses in the x and y-direction of the middle membrane.

412 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


0
Node=2861

-2x10-5

-4x10-5

-6x10-5

-8x10-5
EXX

-0.0001

-0.00012

-0.00014

-0.00016

-0.00018
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


0.00035
Node=2861

0.0003

0.00025

0.0002
EYY

0.00015

0.0001

5x10-5

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.10: Normal strains in the x and y-direction of the front membrane.

11.1. Hexagonal membrane with cables 413


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


0.0007
Node=2774

0.0006

0.0005

0.0004
EXX

0.0003

0.0002

0.0001

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


0.00016
Node=2774

0.00014

0.00012

0.0001

8x10-5
EYY

6x10-5

4x10-5

-5
2x10

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.11: Normal strains in the x and y-direction of the middle membrane.

414 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


9
Node=2861

5
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


0.001
Node=2861

0.0009

0.0008

0.0007

0.0006
Mises

0.0005

0.0004

0.0003

0.0002

0.0001

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.12: Von-Mises stresses and strains of the front membrane of the hexagonal structure.

11.1. Hexagonal membrane with cables 415


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Values at Nodes (membrane-hex.fbd)


7
Node=2774

4
Mises

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

Values at Nodes (membrane-hex.fbd)


0.0008
Node=2774

0.0007

0.0006

0.0005
Mises

0.0004

0.0003

0.0002

0.0001

0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
Time

11.13: Von-Mises stresses and strains of the middle membrane of the hexagonal structure.

416 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.1.4 Dlubal comparison

The analysis in Calculix is compared to the same structural case solved in the commercial soft-
ware Dlubal with the use of the standard algorithm (the projected algorithm is different from the
formulation proposed in this thesis). Both the form-finding step conducted with the developed
algorithm and the step for the additional live loads show an extremely good adherence.

11.1.5 Conclusions

A serious form-finding, as shown by the countour plots produced by Calculix, allows the engi-
neer to avoid the presence of zones where the membrane is slack or even compressed. However,
the most notable aspect is that all the studied static quantities, stresses, strains and displace-
ments, vary linearly with the intensity of the load. This aspect is particularly important be-
cause, having run two analysis in an interval, for example for two loads producing a maximum
Von-Mises stress of the 10% and 80% of the yield stress, we could extrapolate the intermediate
values by simple linear interpolation. As for cables, the behaviour of membranes is mostly
linear for taut membranes, whereas strongly not linear for slack elements.

11.1. Hexagonal membrane with cables 417


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.14: Check of the form-finding: shape and 𝜎x

418 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.15: Check of the form-finding: 𝜎y and 𝜎mises

11.1. Hexagonal membrane with cables 419


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.16: Check of the form-finding: 𝜀x and 𝜀y

420 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.17: Check of the form-finding: 𝜀mises and the tension in the cables

11.1. Hexagonal membrane with cables 421


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.18: Check after the application of a live load:: displacements and 𝜎x

422 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.19: Check after the application of a live load: 𝜎y and 𝜎mises

11.1. Hexagonal membrane with cables 423


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.20: Check after the application of a live load: 𝜀x and 𝜀y

424 Chapter 11. Form-finding and live loads


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

11.21: Check after the application of a live load: 𝜀mises and the tension in the cables

11.1. Hexagonal membrane with cables 425


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

426 Chapter 11. Form-finding and live loads


CHAPTER 12

Generalised finite element optimization

The formulations described in Chapter 2 and 3 do not consider the possibility to perform an
actual structural optimization in the case of nonlinear constitutive laws or in presence of a
significant interaction with the soil or substructure.
We therefore introduce a new approach based on the constrained optimization of a convex
function which defines the target for one or more specific static or geometric quantities. The
problem can be mathematically formulated as:

min 𝑓 (𝑥) 𝑠𝑢𝑏𝑗𝑒𝑐𝑡 𝑡𝑜 𝑔j (𝑥) ≥ 𝑔̃︀j (𝑥) (12.1)

where the inequality constraints are employed to establish either the domain for a specific
variable (an area must be strictly positive) or the interval where the algorithm is likely to find
the target value (limit the search to a sensible interval).
As we will later discuss, the problem can be greatly simplified if we consider 𝑛 optimization
parameters and exactly 𝑛 targets so that, even though the solution of the problem may still not
be unique, the solution can be approached by the solution of a nonlinear system of 𝑛 unknowns
with the Newton-Krylov algorithm.
This approach must be preferred for thourough and precise investigations of the mechanical
behaviour of membranes but limited to problems which do not involve a large number of un-
knowns unless we are aware of the computational cost of the operations.

12.1 Statical optimization

We have already discussed the example of a plane square membrane with fixed edges (let us
image infinitely rigid cables on the border) loaded perpendicular to its plane. We want now to
compute the external distributed load, which is able to produce a displacement of approximately
93 mm. We already know that the desired load is 1𝐾𝑁/𝑚2 .

427
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

12.1.1 Serialization class

The deck in code_aster is written in pure Python, but the file is later translated in Fortran
code to speed up the execution. For this reason, in order to pass the parameters to the deck
written in code_aster, we must first serialize an object to file which represents the params of the
optimization, which will be later read by code_aster before the translation to Fortran. Equally,
at each iteration, code_aster will save the value of the target parameters to the same file which
will be retrieved by the main function which is responsible for the guidance of the Netwon-
Krylov method.
class aster_params.AsterParams(*args, **kwargs)
Wrapper class to encapsulate the parameters to be passed to code_aster for the solution
of the optimization problem.
Parameters cannot be passed directly to the solver since the deck of the analysis is moved
to a temporary folder and especially a new deck is created at every iteration. The class,
thanks to the module pickle, takes care of the serialization of the parameters to be passed
to solver which are written on disk and thus accessible by the python deck before the
execution of the C and Fortran routines for the actual solution.
save(dirpath)
Saves the parameters in the pickle file in serialized binary format.
Dumps the parameters in a neutral serialized binary file to be retrieved by code_aster
before the beginning of the analysis. The number of parameters is generally limited,
so pickle is a simple but straightforward choice.
Parameters dirpath (str) – path to save the pickle file containing the
parameters used in the optimization.
Returns None
Return type None
Raises IOError
load(dirpath)
Loads the parameters from the picke file de-serializing the binary format and storing
them in the corresponding class.
The params store in the binary file are de-serialised and mapped to the AsterParams
class and stored in memory for modification and reuse by the solver deck.
Parameters dirpath (str) – path to save the pickle file containing the
parameters used in the optimization.
Returns None
Return type None
Raises FileNotFoundError
add_params(params)
Adds new parameters to the dictionary of the class to be later saved by the dedicated
function.

428 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Parameters are saved in the dictionary but not immediately written to file until the
class is instructed to do so. A dictionary must be passed, so as many parameters as
desired can be inserted at the same time.
Parameters params (dict) – dictionary containing the parameters to
be stored in self.__dict__.
Returns None
Return type None

Code block 12.1: Auxiliary class for the serialization of the


parameters for code_aster.
1 import pickle
2 import os
3
4
5 class AsterParams:
6
7 def __init__(self, *args, **kwargs):
8 self.__dict__.update(kwargs)
9
10 def save(self, dirpath):
11 with open(os.path.join(dirpath, 'aster_params.pkl'), 'wb') as fout:
12 pickle.dump(self, fout, pickle.HIGHEST_PROTOCOL)
13

14 def load(self, dirpath):


15 with open(os.path.join(dirpath, 'aster_params.pkl'), 'rb') as fin:
16 tparams = pickle.load(fin)
17 self.__dict__.update(tparams.__dict__)
18
19 def add_params(self, params):
20 self.__dict__.update(params)

12.1.2 Wrapper for the execution

Code_aster is invoked with a simple wrapper function in Python which opens a new dedicated
shell to execute the deck and eventually supresses the output on the terminal, redirecting it only
to the log file with astk.
membrane_iterative_run.solve_aster()
Passes control to code_aster for the solution at each iteration of the optimization.
The command executes a separate shell to run the analysis in code_aster; the system may
throw an exception similar to FileNotFoundError in case that the hardcoded path for the
.export file is not found.
Returns None
Return type None
Raises FileNotFoundError

12.1. Statical optimization 429


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Code block 12.2: Code_aster input file for the statical opti-
mization problem.
1 def solve_aster():
2 # Run code_aster in a separate shell session and suppress output.
3 subprocess.call("as_run membrane_iterative.export > /dev/null",
4 shell=True)

12.1.3 Optimization objective function

The optimization is guided by the following code which references the objective function defin-
ing the target of the optimization: in this case, the maximum displacement must be equal to
93mm.
membrane_iterative_run.optimize_aster(x, apar, st_path)
Objective function for the optimization problem in the FEA analysis software
code_aster.
The unknowns are initially mapped to the corresponding parameters in the AsterParams
class instance. The latter are saved on disk by the serialization operated by pickle. The
problem is then submitted for analysis where the target parameters are updated according
to the results of the latest iteration. Finally, the error function is evaluated to check the
convergence of the procedure.
Parameters
• x – unknowns of the problem for which the optimization problem
must be solved.
• apar (AsterParams) – instance of the class containing the pa-
rameters for the optimization problem.
• st_path (str) – path where the serialized binary pickle file is
stored to retrieve the parameters for the optimization.
Returns equations to be solved by the Newton-Krylov algorithm.
Return type ndarray(float)

Code block 12.3: Objective function for the statical opti-


mization.
1 def optimize_aster(x, apar, st_path):
2 # Map the unknowns to the corresponding parameters.
3 apar.vload = x[0]
4 # Save the parameters on file thanks to the serialization operated
5 # by pickle.
6 apar.save(st_path)
7
8 # Invoke the solution of the problem and pass control to code_aster.
9 solve_aster()
10

(continues on next page)

430 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


11 # Load the current parameters produced by the latest iteration of
12 # the FEA analysis.
13 apar.load(st_path)
14
15 # Evaluate the error function and continue to the next iteration if
16 # convergence is not met.
17 error_fun = apar.frex - apar.frex_target
18 return error_fun

12.1.4 Problem setup

The optimization is called by the setup prepared by main, which, due to the simplicity of the
analysis hardcodes the starting guess for the solution:
membrane_iterative_run.main()
Main entry point for the solution of the optimization problem of the maximum displace-
ment of a plane membrane pinned along its edges under distributed loading.
The target of the optimization is the value of the distributed load per unit area which can
produce a displacement of 93𝑚𝑚.
The main function supports also a debug feature, which even if hardcoded, allows the
user to stop the process at the first iteration to check if the code_aster deck has been
successfully written. The core of the function gravitates around the Newton-Krylov al-
gorithm which is responsible for the modification of the parameters at each iteration or
line search.
Returns distributed load on the membrane solving the optimization problem.
Return type float

Code block 12.4: Main function to invoke the statical opti-


mization.
1 def main():
2 # Start a basic timer to profile the analysis.
3 start_time = time.time()
4 # Should we stop the program at the first iteration to check if the
5 # input deck in code_aster has been successfully written?
6 debug_run = False
7 # Get the current path to store the binary file produced by pickle.
8 start_path = os.getcwd()
9
10 # Create an instance of the AsterParams class to pass the parameters
11 # to the internal solver of the FEM analysis.
12 aparams = AsterParams(
13 frex=-0.0,
14 frex_target=-9.329e-2,
15 )
16 aparams.add_params({"vload": 1.0e2})
17
18 # Actually write the parameters to disk.
(continues on next page)

12.1. Statical optimization 431


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


19 aparams.save(start_path)
20
21 # As anticipated, if debug_run is true, stop after the first iteration.
22 if debug_run: # pragma: no cover
23 solve_aster()
24 sys.exit()
25
26 # Invoke the Newton-Krylov algorithm which has been encapsulated in
27 # the root function since the algorithm does not natively support
28 # passing arguments to the internal iterative solver.
29 solution = root(
30 optimize_aster,
31 [aparams.vload],
32 method="krylov",
33 args=(aparams, start_path,),
34 options={
35 "maxiter": 250,
36 "line_search": "armijo",
37 "fatol": 0.001,
38 "jac_options": {
39 "method": "lgmres",
40 },
41 "disp": True,
42 }
43 )
44

45 # Stop the timer of the basic profiler and print the elapsed time.
46 end_time = time.time()
47 elapsed_time = end_time - start_time
48 print("Total elapsed time: %.2f sec" % elapsed_time)
49
50 # Print and return the solution to add this case to the test suite.
51 print(solution)
52 return solution.x[0]

12.1.5 Mesh pre-processing

The mesh for the plane membrane is created with gmsh as already observed previously:

Code block 12.5: Gmsh script to produce the mesh for the
statical optimization.
1 // Characteristic length for the mesh of the membrane.
2 lcm = 0.25;
3
4 // Half length of the edge of the square membrane.
5 l = 2.5;
6
7 // Point entities defining the pins where the membrane is anchored.
8 Point(1) = {-l, -l, 0, lcm};
9 Point(2) = {l, -l, 0, lcm};
10 Point(3) = {l, l, 0, lcm};
11 Point(4) = {-l, l , 0, lcm};
(continues on next page)

432 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


12
13 // Line entities defining the edge of the membrane.
14 Line(1) = {1, 2};
15 Line(2) = {2, 3};
16 Line(3) = {3, 4};
17 Line(4) = {4, 1};
18
19 // Line loop enclosing the membrane.
20 Line Loop(1) = {1, 2, 3, 4};
21
22 // Definition of the membrane as geometrical entity.
23 Surface(1) = {1};
24
25 // Ask for transfinite surface; in this case, there is no issue in creating
26 // it due to the simple geometry.
27 Transfinite Surface {1} = {};
28
29 // Physical lines for the edges, as though they were infinitely rigid
30 // edges.
31 Physical Line("cables", 200) = {1, 2, 3, 4};
32

33 // Physical surface coinciding with the geometric entity defining the


34 // membrane area.
35 Physical Surface("membrane", 300) = {1};
36
37 // Physical groups to define the pin supports.
38 Physical Point("pins", 100) = {1, 2, 3, 4};
39
40 // Geometry options for the display.
41 Geometry.LineNumbers = 1;
42 Geometry.PointNumbers = 1;
43 Geometry.SurfaceNumbers = 1;
44
45 // Mesh only 2D; we do not have 3D elements in the model.
46 Mesh.ElementOrder = 1;
47 Mesh 2;
48
49 // Save the mesh in both gmsh format and med format compatible with
50 // code_aster.
51 Mesh.Format = 1;
52 Save "membrane_iterative.msh";
53 Mesh.Format = 33;
54 Save "membrane_iterative.med";

12.1.6 The deck in code_aster

The deck in code_aster is rather complex and thorougly commented in the following algorithm:

Code block 12.6: Code_aster input deck file for the statical
optimization problem.
1 ADIR = "/home/anava/Documents/Projects/tension-structures/src/code_aster" \
2 "/membrane_iterative"
(continues on next page)

12.1. Statical optimization 433


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


3 import sys
4
5 sys.path.append(ADIR)
6 from aster_params import AsterParams
7
8 # Start code_aster and allow the access to the python objects produced
9 # by the solver.
10 DEBUT(PAR_LOT='NON', )
11

12 # Load the params that have been saved by the main function to the
13 # pickle file.
14 aparams = AsterParams()
15 aparams.load(ADIR)
16
17 # -------------------------------------------------------------------------
18
19 # Read the mesh created with gmsh and exported to the compatible binary
20 # MED format.
21 mesh = LIRE_MAILLAGE(
22 FORMAT='MED',
23 UNITE=20,
24 )
25
26 # Define a nodal group to allow the possibility to extract the values
27 # with POST_RELEVE_T.
28 mesh = DEFI_GROUP(
29 reuse=mesh,
30 MAILLAGE=mesh,
31 CREA_GROUP_NO=(_F(
32 GROUP_MA='membrane',
33 NOM='membrane',
34 ),),
35 )
36
37 # -------------------------------------------------------------------------
38
39 # Create the finite element model and assign to the membrane the
40 # 'membrane' finite element. Partition the mesh for parallel solving
41 # with Metis.
42 model = AFFE_MODELE(
43 AFFE=_F(
44 GROUP_MA='membrane',
45 PHENOMENE='MECANIQUE',
46 MODELISATION='MEMBRANE',
47 ),
48 DISTRIBUTION=_F(PARTITIONNEUR='METIS',
49 METHODE='SOUS_DOMAINE',
50 ),
51 MAILLAGE=mesh,
52 )
53
54 # -------------------------------------------------------------------------
55
56 # Create the material for the membrane, assign the Young modulus,
57 # the Poisson ratio, the density and the thermal expansion coefficient.
58 materM = DEFI_MATERIAU(
(continues on next page)

434 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


59 ELAS=_F(
60 E=8e9,
61 NU=0.4,
62 RHO=1000,
63 ALPHA=1.2E-5,
64 ), )
65
66 # -------------------------------------------------------------------------
67

68 # Define a material field, which could gather multiple materials.


69 fieldmat = AFFE_MATERIAU(
70 AFFE=_F(
71 MATER=materM,
72 GROUP_MA='membrane',
73 ),
74 MODELE=model,
75 )
76
77 # -------------------------------------------------------------------------
78
79 # Define the sectional properties of the membrane, among which the
80 # thickness of the membrane and the initial fictitious tension to allow
81 # the calculation of the tangent matrix during the first iteration.
82 cara = AFFE_CARA_ELEM(
83 MODELE=model,
84 MEMBRANE=_F(
85 GROUP_MA='membrane',
86 EPAIS=2e-3,
87 N_INIT=1.0,
88 ),
89 )
90

91 # -------------------------------------------------------------------------
92
93 # Define the kinematic boundary conditions for the pin supports.
94 pins = AFFE_CHAR_CINE(
95 MECA_IMPO=_F(
96 DX=0,
97 DY=0,
98 DZ=0,
99 GROUP_MA=(
100 'pins',
101 'cables',
102 ),
103 ),
104 MODELE=model,
105 )
106
107 # -------------------------------------------------------------------------
108
109 # Define the function to gradually apply the load to grant a slightly
110 # faster convergence.
111 ramp = DEFI_FONCTION(
112 NOM_PARA='INST',
113 VALE=(0.0, 0.0, 1E-3, 1E-7, 1E-2, 1E-3, 0.1, 0.1, 1.0, 1.0),
114 INTERPOL=('LIN',),
(continues on next page)

12.1. Statical optimization 435


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


115 )
116
117 # Uniform pressure to be applied to the membrane, which is also the
118 # target of the optimization.
119 Punif = AFFE_CHAR_MECA(
120 PRES_REP=_F(
121 GROUP_MA='membrane',
122 PRES=aparams.vload,
123 ),
124 MODELE=model,
125 )
126
127 # -------------------------------------------------------------------------
128
129 # Define the time increments at which the problem must be solved.
130 lisnon = DEFI_LIST_REEL(VALE=(0.0, 1e-3, 1e-2, 0.1, 0.2, 0.3, 0.7, 1.0))
131
132 # Invoke the nonlinear solver, which employs the direct solver MUMPS.
133 reslin = STAT_NON_LINE(
134 TITRE='Analysis of a membrane',
135 MODELE=model,
136 CHAM_MATER=fieldmat,
137 CARA_ELEM=cara,
138 COMPORTEMENT=(_F(
139 GROUP_MA='membrane',
140 RELATION='ELAS_MEMBRANE_NH',
141 DEFORMATION='GROT_GDEP',
142 ),),
143 EXCIT=(
144 _F(CHARGE=pins, ),
145 _F(CHARGE=Punif, FONC_MULT=ramp),
146 ),
147 INCREMENT=_F(LIST_INST=lisnon, ),
148 CONVERGENCE=_F(
149 ITER_GLOB_MAXI=1000,
150 RESI_GLOB_RELA=1.E-06,
151 ARRET='OUI',
152 ),
153 NEWTON=_F(
154 PREDICTION='TANGENTE',
155 MATRICE='TANGENTE',
156 REAC_ITER=1,
157 ),
158 SOLVEUR=_F(
159 METHODE='MUMPS',
160 GESTION_MEMOIRE='IN_CORE',
161 RENUM='AUTO',
162 ),
163 )
164
165 # -------------------------------------------------------------------------
166
167 # Compute the generalised efforts for the membrane and also the nodal
168 # and reaction forces.
169 reslin = CALC_CHAMP(
170 RESULTAT=reslin,
(continues on next page)

436 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


171 reuse=reslin,
172 CONTRAINTE=('EFGE_ELNO', 'EFGE_NOEU',),
173 FORCE=(
174 'REAC_NODA',
175 'FORC_NODA',
176 ),
177 )
178
179 # -------------------------------------------------------------------------
180
181 # Write the results in ASCII format to file.
182 IMPR_RESU(
183 FORMAT='RESULTAT',
184 RESU=_F(
185 FORMAT_R='1PE21.3',
186 RESULTAT=reslin,
187 ),
188 UNITE=8,
189 )
190
191 # Write the results to file in binary MED format for additional
192 # post-processing in Paraview.
193 IMPR_RESU(
194 FORMAT='MED',
195 RESU=_F(
196 RESULTAT=reslin,
197 IMPR_NOM_VARI='NON',
198 ),
199 UNITE=80,
200 )
201
202 # -------------------------------------------------------------------------
203
204 # Extract the extrema for the displacements of the membrane in the
205 # z-direction.
206 tresu = POST_RELEVE_T(
207 ACTION=_F(
208 INTITULE="Ottimizzazione",
209 OPERATION="EXTREMA",
210 GROUP_MA='membrane',
211 RESULTAT=reslin,
212 NOM_CHAM='DEPL',
213 NOM_CMP='DZ',
214 ), )
215
216 # -------------------------------------------------------------------------
217
218 # Compute the minimum displacement (maximum in absolute value) on all
219 # the time steps, save it to the pickle file to be read by the objective
220 # function of the Newton-Krylov algorithm.
221 optiresu = tresu.EXTR_TABLE()
222 frex = min(optiresu.values()["VALE"])
223 aparams.add_params({"frex": frex})
224 aparams.save(ADIR)
225

226 # -------------------------------------------------------------------------
(continues on next page)

12.1. Statical optimization 437


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


227
228 # Close all files and clean the resources.
229 FIN()

12.1.7 Example run of the program

An example run of the program is here reported to show how fast convergence can be achieved:

Code block 12.7: Example run of the statical optimization


problem in code_aster.
1 0: |F(x)| = 0.0220046; step 1; tol 0.174177
2 1: |F(x)| = 0.00458574; step 1; tol 0.0390874
3 2: |F(x)| = 0.000217711; step 1; tol 0.00202854
4 Total elapsed time: 71.01 sec
5 fun: array([0.00021771])
6 message: 'A solution was found at the specified tolerance.'
7 nit: 4
8 status: 1
9 success: True
10 x: array([993.01635065])

12.1.8 Post-processing

The post-processing is conducted with Paravis, a subset of Paraview present in Salome_Meca.


The images are extracted manually but an automatization similar to the one presented in Cal-
culix is also possible through a python script.

12.1.9 Tests

Tests are run with a test function which in turn calls the main method of the current folder and
tests for the positiveness of the test:
test_membrane_iterative.test_membrane_iterative()
Tests that the load to obtain a displacement of 93mm for a square membrane 2mm thick
with sides 5m long is 1kN/m2.
The initial guess for the solution is extremely far from the target value, so that the effec-
tiveness of the Newton-Krylov is highlighted.
Returns asserts the positiveness of the test.
Return type None

438 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

12.1: Magnitude of the displacements after the statical optimization.

12.2: Displacements in the x and y-direction after the statical optimization.

12.1. Statical optimization 439


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

12.3: Internal actions in the membrane after the statical optimization.

Code block 12.8: Test function for the statical optimization


problem.
1 from __future__ import print_function
2 import pytest
3
4 from membrane_iterative_run import main
5

6
7 def test_membrane_iterative():
8 optimized_load = main()
9
10 assert optimized_load == pytest.approx(1000.0, 0.02)

Tests are invoked for code_aster by the bash script that follows, since pytest has troubles in
employing the correct python version when invoking code_aster:

Code block 12.9: Script executing the tests for code_aster.


1 #!/usr/bin/env bash
2 cd src/code_aster/membrane_iterative
3 pytest
4 cd ..
5 cd cable_iterative
6 pytest
7
8 exit 0

440 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

12.2 Topological optimization

In this example, we show the topological optimization of a cable under a concentrated load,
as already studied at the beginning of the thesis. The target displacement to be reached is
365mm and the corresponding target function is the minimization of the error function describ-
ing the discrepancy between the maximum displacement for the current iteration and the target
displacement imposed for the analysis.
The optimization concerns two parameters which are chosen arbitrarly by the Truncated New-
ton Algorithm to satisfy the objective function of the minimization but also the constraints
applied on the parameters: the length of is limited to satisfy the requirements of an hypothetic
span, whereas the cross section of the cable satisfies two inequality constraints which limit the
interval to values with a commercial meaning (the cable cannot be too thin or on the other hand
thick).

12.2.1 Serialization class

class aster_params.AsterParams(*args, **kwargs)


Wrapper class to encapsulate the parameters to be passed to code_aster for the solution
of the optimization problem.
Parameters cannot be passed directly to the solver since the deck of the analysis is moved
to a temporary folder and especially a new deck is created at every iteration. The class,
thanks to the module pickle, takes care of the serialization of the parameters to be passed
to solver which are written on disk and thus accessible by the python deck before the
execution of the C and Fortran routines for the actual solution.
save(dirpath)
Saves the parameters in the pickle file in serialized binary format.
Dumps the parameters in a neutral serialized binary file to be retrieved by code_aster
before the beginning of the analysis. The number of parameters is generally limited,
so pickle is a simple but straightforward choice.
Parameters dirpath (str) – path to save the pickle file containing the
parameters used in the optimization.
Returns None
Return type None
Raises IOError
load(dirpath)
Loads the parameters from the picke file de-serializing the binary format and storing
them in the corresponding class.
The params store in the binary file are de-serialised and mapped to the AsterParams
class and stored in memory for modification and reuse by the solver deck.
Parameters dirpath (str) – path to save the pickle file containing the
parameters used in the optimization.

12.2. Topological optimization 441


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

Returns None
Return type None
Raises FileNotFoundError
add_params(params)
Adds new parameters to the dictionary of the class to be later saved by the dedicated
function.
Parameters are saved in the dictionary but not immediately written to file until the
class is instructed to do so. A dictionary must be passed, so as many parameters as
desired can be inserted at the same time.
Parameters params (dict) – dictionary containing the parameters to
be stored in self.__dict__.
Returns None
Return type None

Code block 12.10: Auxiliary class for the serialization of the


parameters for code_aster for the topological optimization.
1 import pickle
2 import os
3
4

5 class AsterParams:
6
7 def __init__(self, *args, **kwargs):
8 self.__dict__.update(kwargs)
9
10 def save(self, dirpath):
11 with open(os.path.join(dirpath, 'aster_params.pkl'), 'wb') as fout:
12 pickle.dump(self, fout, pickle.HIGHEST_PROTOCOL)
13
14 def load(self, dirpath):
15 with open(os.path.join(dirpath, 'aster_params.pkl'), 'rb') as fin:
16 tparams = pickle.load(fin)
17 self.__dict__.update(tparams.__dict__)
18
19 def add_params(self, params):
20 self.__dict__.update(params)

12.2.2 Wrapper for the execution

Code_aster is invoked with the python wrapper function which opens two serial shells for the
execution of gmsh to update the mesh at every iteration since the length of the cable has been
modified by the TNC algo, and to launch code_aster for the solution of the current iteration.
cable_iterative_run.solve_aster(apar)
Passes control to code_aster for the solution at each iteration of the optimization.

442 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The command executes a separate shell to run the analysis in code_aster; the system may
throw an exception similar to FileNotFoundError in case that the hardcoded path for the
.export file is not found.

Warning: Pay attention to gmsh! No specific error codes are returned in case that
the wrong parameters are passed to the .geo file. Check mesh at least once before
running the optimization with the debug flag.

Parameters apar (AsterParams) – instance of the class containing the


parameters for the optimization problem.
Returns None
Return type None

Code block 12.11: Wrapper function to execute code_aster


for the topological optimization.
1 def solve_aster(apar):
2 # Gather the params to be passed to gmsh in a single dictionary to
3 # be parsed iteratively.
4 gmsh_params = {"l": apar.length}
5 # Define the basic gmsh command containing the name of the file to
6 # be processed.
7 gmsh_command = "gmsh cable_iterative.geo"
8 # Parse each argument contained in the dictionary and build the
9 # optional argument as indicated by the command line interface of gmsh.
10 for key, value in gmsh_params.items():
11 gmsh_command += " -setnumber " + key + " " + str(value)
12 # The mesh command is already specified in the .geo script: no need to
13 # indicate the mesh dimension.
14 gmsh_command += " -"
15 # In two separate processes, first call gmsh and then code_aster;
16 # suppress outputs if sure that the flow is converging in many
17 # significant situations.
18 subprocess.call(gmsh_command + " > /dev/null", shell=True)
19 subprocess.call("as_run cable_iterative.export > /dev/null",
20 shell=True)

12.2.3 Optimization objective function

The optimization targets a single error function for the maximum displacement of the cable:
cable_iterative_run.optimize_aster(x, apar, st_path)
Objective function for the optimization problem in the FEA analysis software
code_aster.
Being a sort of topology optimization problem, the objective function takes care also of
meshing the new geometry at every step.
The unknowns are initially mapped to the corresponding parameters in the AsterParams

12.2. Topological optimization 443


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

class instance. The latter are saved on disk by the serialization operated by pickle. The
problem is then submitted for analysis where the target parameters are updated according
to the results of the latest iteration. Finally, the error function is evaluated to check the
convergence of the procedure.
Parameters
• x – unknowns of the problem for which the optimization problem
must be solved.
• apar (AsterParams) – instance of the class containing the pa-
rameters for the optimization problem.
• st_path (str) – path where the serialized binary pickle file is
stored to retrieve the parameters for the optimization.
Returns equations to be solved by the Newton-Krylov algorithm.
Return type ndarray(float)

Code block 12.12: Objective function for the topological op-


timization.
1 def optimize_aster(x, apar, st_path):
2 # Map the length and the section to the parameters used for the
3 # optimization procedure.
4 apar.length = x[0]
5 apar.section = x[1]
6 # Save the parameters to a binary file with pickle to be reused by
7 # code_aster.
8 apar.save(st_path)
9

10 # Execute code_aster to solve the finite element problem.


11 solve_aster(apar)
12
13 # Reload the params to evaluate the error function with the new
14 # value of maximum displacement.
15 apar.load(st_path)
16
17 # Evaluate the error function to check the convergence criteria.
18 error_fun = np.abs(apar.frex_target - apar.frex) / np.abs(
19 apar.frex_target)
20 return error_fun

12.2.4 Problem setup

The optimization is called by the setup prepared by main, which, due to the simplicity of the
problem, hardcodes the starting guesses of the solution:
cable_iterative_run.main()
Main entry point for the solution of the optimization problem concerning the combination
of maximum length and minimum cross-section of the cable to sustain a concentrated
load located at midspan under a certain pretension.

444 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The known parameters are the elastic modulus of the cable, the coefficient of thermal
expansion to apply the fictitious elastic thermal load equivalent to the pretension, the
Poisson ratio and the prestressing.
The main function supports also a debug feature, which even if hardcoded, allows the
user to stop the process at the first iteration to check if the code_aster deck has been
successfully written.
The core of the function gravitates around the TNC Truncated Newton Algorithm which
is responsible for the iterative procedure and line search during the minimization of the
objective function.
Returns expansion of two floats representing the cross-section of the cable
and the horizontal distance between the supports.
Return type float

Code block 12.13: Main function to invoke the topological


optimization.
1 def main():
2 # Start a timer for a basic profiling of the code.
3 start_time = time.time()
4
5 # Get the starting path of the script to locate the path where we
6 # need to store the pickle file.
7 start_path = os.getcwd()
8 # Should we debug the script? Stop after the first iteration to
9 # check produced by the first run of code_aster.
10 debug_run = False
11
12 # Gather in the AsterParams class all the parameters that must be
13 # submitted to the routines of code_aster.
14 aparams = AsterParams(
15 length=7.0,
16 section=50e-6,
17 vload=-10e3,
18 frex=-0.0,
19 frex_target=-0.3655,
20 )
21 # Save the parameters so that they can be recovered by code_aster
22 # after that the deck has been successfully written.
23 aparams.save(start_path)
24

25 # If debug is true, solve only once to check that the code_aster


26 # deck is working.
27 if debug_run: # pragma: no cover
28 solve_aster(aparams, start_path)
29 sys.exit()
30

31 # Solve the minimization problem with a Truncated Newton Algorithm,


32 # with the specified tolerance. Output some information about the
33 # iterative procedure.
34 # In particular, specify clever bounds for the variable so that the
35 # process can converge quicker.
36 sol = minimize(
(continues on next page)

12.2. Topological optimization 445


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


37 optimize_aster,
38 [aparams.length, aparams.section],
39 args=(aparams, start_path),
40 bounds=[(0.0, 20.0), (1e-4, 1e-3)],
41 method='TNC',
42 options={
43 'ftol': 1e-9,
44 'maxiter': 250,
45 'disp': True,
46 },
47 )
48
49 # Stop the timer and print the elapsed time.
50 end_time = time.time()
51 elapsed_time = end_time - start_time
52 print("Elapsed time: %.2f" % elapsed_time)
53
54 # Print a summary of the number of iterations, function evaluations
55 # and tolerance met.
56 print(sol)
57

58 # Return the solution to be used in tests or other programs.


59 return sol.x[0], sol.x[1]

12.2.5 Mesh pre-processing

The mesh for the cable is created with gmsh, which accepts the length of the cable as a param-
eter on the command line at every iteration:

Code block 12.14: Gmsh script to produce the mesh for the
topological optimization.
1 // Characteristic length of the cable; for simple 1D elements,
2 // it equals the actual discretization operated by the meshing algorithm.
3 lc = 0.1;
4
5 // Point geometrical entities; the variable 'l' must be either suppòied by
6 // the user on the command line or by the script which is invoking gmsh.
7 Point(1) = {0.0, 0.0, 0.0, lc};
8 Point(2) = {l, 0.0, 0.0, lc};
9 Point(3) = {l/2, 0.0, 0.0, lc};
10
11 // Physical point entities defining the nodes representing the pins and
12 // one for the point of application of the load.
13 Physical Point("pins", 100) = {1, 2};
14 Physical Point("vload", 101) = {3};
15

16 // Geometrical lines for the two parts of the cable, since the latter has
17 // been split to allow the insertion of the physical point representing
18 // the point of application of the load.
19 Line(1) = {1, 3};
20 Line(2) = {3, 2};
21

(continues on next page)

446 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


22 // Physical line representing all the cable.
23 Physical Line("cable", 200) = {1, 2};
24

25 // Geometry options for the display.


26 Geometry.LineNumbers = 1;
27 Geometry.PointNumbers = 1;
28
29 // Mesh only 1D: we do not have 2D or 3D elements in the model.
30 Mesh 1;
31
32 // Save the mesh in the native gmsh format and in the binary MED format
33 // for code_aster.
34 Mesh.Format = 1;
35 Save "cable_iterative.msh";
36 Mesh.Format = 33;
37 Save "cable_iterative.med";

12.2.6 The deck in code_aster

The deck in code_aster is rather complex, and thorougly commented to show the capabilities
of the solver:

Code block 12.15: Code_aster input file for the topological


optimization.
1 import sys
2
3 ADIR = "/home/anava/Documents/Projects/tension-structures/src/code_aster" \
4 "/cable_iterative"
5 sys.path.append(ADIR)
6 from aster_params import AsterParams
7
8 # Start code_aster and allow the access to the python objects produced
9 # by the solver.
10 DEBUT(PAR_LOT='NON', )
11
12 # Load the params that have been saved by the main function to the
13 # pickle file.
14 aparams = AsterParams()
15 aparams.load(ADIR)
16

17 # ------------------------------------------------------------------------
18
19 # Read the mesh created with gmsh and exported to the compatible binary
20 # MED format.
21 mesh = LIRE_MAILLAGE(
22 FORMAT='MED',
23 UNITE=20,
24 )
25
26 # Define a nodal group to allow the possibility to extract the values
27 # with POST_RELEVE_T.
28 mesh = DEFI_GROUP(
(continues on next page)

12.2. Topological optimization 447


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


29 reuse=mesh,
30 MAILLAGE=mesh,
31 CREA_GROUP_NO=(_F(
32 GROUP_MA='vload',
33 NOM='vload',
34 ),),
35 )
36
37 # -------------------------------------------------------------------------
38
39 # Create the finite element model and assign to the cable the
40 # 'cable' finite element. Partition the mesh for parallel solving
41 # with Metis.
42 model = AFFE_MODELE(
43 AFFE=_F(
44 GROUP_MA='cable',
45 PHENOMENE='MECANIQUE',
46 MODELISATION='CABLE',
47 ),
48 MAILLAGE=mesh,
49 )
50
51 # -------------------------------------------------------------------------
52
53 # Create the material for the membrane, assign the Young modulus,
54 # the Poisson ratio, the density and the thermal expansion coefficient.
55 # Finally, define also the ration between the elastic modulus in
56 # tension and compression.
57
58 Ey = 140e9
59 coeff_alpha = 1.2e-5
60 materc = DEFI_MATERIAU(
61 ELAS=_F(
62 E=Ey,
63 NU=0.3,
64 RHO=7800,
65 ALPHA=coeff_alpha,
66 ),
67 CABLE=_F(EC_SUR_E=1.E-5),
68 )
69
70 # -------------------------------------------------------------------------
71
72 # Define an initial zero temperature field on the whole model.
73 temp1 = CREA_CHAMP(
74 TYPE_CHAM='NOEU_TEMP_R',
75 MODELE=model,
76 OPERATION='AFFE',
77 AFFE=(_F(
78 TOUT='OUI',
79 NOM_CMP='TEMP',
80 VALE=0.,
81 ),),
82 )
83

84 # Assign a temperature difference to the cable in order to simulate the


(continues on next page)

448 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


85 # initial prestress of the cable via an inelastic deformation.
86 prec = 20e3
87 temp2 = CREA_CHAMP(
88 MODELE=model,
89 TYPE_CHAM='NOEU_TEMP_R',
90 OPERATION='AFFE',
91 AFFE=(
92 _F(
93 TOUT='OUI',
94 NOM_CMP='TEMP',
95 VALE=0.0,
96 ),
97 _F(
98 GROUP_MA=('cable',),
99 NOM_CMP='TEMP',
100 VALE=-prec / (Ey * aparams.section * coeff_alpha),
101 ),
102 ),
103 )
104
105 # Define the interval for which the temperature must be applied.
106 listemp = DEFI_LIST_REEL(VALE=(0.0, 1.0))
107
108 # Glue together the initial and final temperature fields that have just
109 # been defined.
110 evtemp = CREA_RESU(
111 TYPE_RESU='EVOL_VARC',
112 NOM_CHAM='TEMP',
113 OPERATION='AFFE',
114 AFFE=(
115 _F(
116 CHAM_GD=temp1,
117 INST=0.0,
118 ),
119 _F(
120 CHAM_GD=temp2,
121 LIST_INST=listemp,
122 ),
123 ),
124 )
125
126 # -------------------------------------------------------------------------
127
128 # Define a material field, which could gather multiple materials.
129 # Specify that for the material a temperature loading has been defined.
130 fieldmat = AFFE_MATERIAU(
131 AFFE=_F(
132 MATER=materc,
133 GROUP_MA='cable',
134 ),
135 AFFE_VARC=_F(
136 TOUT='OUI',
137 NOM_VARC='TEMP',
138 EVOL=evtemp,
139 VALE_REF=0.0,
140 ),
(continues on next page)

12.2. Topological optimization 449


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


141 MODELE=model,
142 )
143

144 # -------------------------------------------------------------------------
145
146 # Define the sectional properties of the cable, among which the
147 # section of the cable and the initial fictitious tension to allow
148 # the calculation of the tangent matrix during the first iteration.
149 cara = AFFE_CARA_ELEM(
150 MODELE=model,
151 CABLE=_F(
152 GROUP_MA='cable',
153 SECTION=aparams.section,
154 N_INIT=1.0,
155 ),
156 )
157
158 # -------------------------------------------------------------------------
159
160 # Define the kinematic boundary conditions for the pin supports.
161 pins = AFFE_CHAR_CINE(
162 MECA_IMPO=_F(
163 DX=0,
164 DY=0,
165 DZ=0,
166 GROUP_MA=(
167 'pins',
168 ),
169 ),
170 MODELE=model,
171 )
172

173 # -------------------------------------------------------------------------
174
175 # Define the function to gradually apply the load to grant a slightly
176 # faster convergence.
177 ramp = DEFI_FONCTION(
178 NOM_PARA='INST',
179 VALE=(0.0, 0.0, 1.0, 1.0),
180 )
181
182 # Concentrated load to be applied in the middle of the span following
183 # the ramp previously defined.
184 grav = AFFE_CHAR_MECA(
185 FORCE_NODALE=_F(
186 GROUP_NO='vload',
187 FZ=aparams.vload,
188 ),
189 MODELE=model,
190 )
191
192 # -------------------------------------------------------------------------
193
194 # Define the time increments at which the problem must be solved.
195 lisnon = DEFI_LIST_REEL(VALE=(0.0, 0.1, 0.25, 0.5, 0.75, 1.0), )
196
(continues on next page)

450 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


197 # Invoke the nonlinear solver, which employs the direct solver MUMPS.
198 reslin = STAT_NON_LINE(
199 TITRE='Analysis of a cable structure',
200 MODELE=model,
201 CHAM_MATER=fieldmat,
202 CARA_ELEM=cara,
203 COMPORTEMENT=(_F(
204 GROUP_MA='cable',
205 RELATION='CABLE',
206 DEFORMATION='GROT_GDEP',
207 ),),
208 EXCIT=(
209 _F(CHARGE=pins, ),
210 _F(CHARGE=grav, FONC_MULT=ramp),
211 ),
212 INCREMENT=_F(LIST_INST=lisnon, ),
213 CONVERGENCE=_F(
214 ITER_GLOB_MAXI=100,
215 RESI_GLOB_RELA=1.E-06,
216 ),
217 NEWTON=_F(
218 PREDICTION='TANGENTE',
219 MATRICE='TANGENTE',
220 REAC_ITER=1,
221 ),
222 SOLVEUR=_F(
223 METHODE='MUMPS',
224 GESTION_MEMOIRE='IN_CORE',
225 RENUM='AUTO',
226 ),
227 )
228

229 # -------------------------------------------------------------------------
230
231 # Compute the generalised efforts for the cable and also the nodal
232 # and reaction forces.
233 reslin = CALC_CHAMP(
234 RESULTAT=reslin,
235 reuse=reslin,
236 CONTRAINTE=('EFGE_ELNO',),
237 FORCE=(
238 'REAC_NODA',
239 'FORC_NODA',
240 ),
241 )
242
243 # -------------------------------------------------------------------------
244
245 # Write the results in ASCII format to file.
246 IMPR_RESU(
247 FORMAT='RESULTAT',
248 RESU=_F(
249 FORMAT_R='1PE21.3',
250 RESULTAT=reslin,
251 ),
252 UNITE=8,
(continues on next page)

12.2. Topological optimization 451


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


253 )
254
255 # Write the results to file in binary MED format for additional
256 # post-processing in Paraview.
257 IMPR_RESU(
258 FORMAT='MED',
259 RESU=_F(
260 RESULTAT=reslin,
261 IMPR_NOM_VARI='NON',
262 ),
263 UNITE=80,
264 )
265
266 # -------------------------------------------------------------------------
267

268 # Knowing that the maximum displacement is obtained for the point of
269 # application of the load, extract DX, DY and DZ for that location.
270 tresu = POST_RELEVE_T(
271 ACTION=_F(
272 INTITULE="Ottimizzazione",
273 OPERATION="EXTRACTION",
274 GROUP_NO='vload',
275 RESULTAT=reslin,
276 NOM_CHAM='DEPL',
277 RESULTANTE=('DX', 'DY', 'DZ'),
278 ), )
279
280 # -------------------------------------------------------------------------
281
282 # Convert the extracted values to a list and pass them to the objective
283 # function of the TNC algorithm by saving the binary object to
284 # file with pickle.
285 optiresu = tresu.EXTR_TABLE()
286 aparams.add_params({"frex": optiresu.values()['DZ'][-1]})
287 aparams.save(ADIR)
288
289 # -------------------------------------------------------------------------
290

291 # Clean the allocated resources for the execution and exit cleanly.
292 FIN()

12.2.7 Example run of the program

An example run of the program is the following, reporting not only the number of iterations but
also the number of line searches:

Code block 12.16: Example run of the topological optimiza-


tion problem.
1 Elapsed time: 366.11
2 fun: 2.320039585282864e-10
3 jac: array([6.13865244e-02, 2.88981453e+03])
4 message: 'Converged (|f_n-f_(n-1)| ~= 0)'
(continues on next page)

452 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

(continued from previous page)


5 nfev: 33
6 nit: 2
7 status: 1
8 success: True
9 x: array([9.27753194e+00, 1.00000000e-04])

12.2.8 Post-processing

The post-processing is operated in Paravis, a subset of Paraview available in Salome_Meca,


which produces the plots directly independetly of the location of the exported values, being
them nodal values, element values, or at the Gauss integration points.

12.4: Magnitude of the displacements after the topological optimization

12.2.9 Tests

Tests are conducted with the test function operated by pytest, which is invoked in a separate
shell in order to choose the correct python interpreter:
test_membrane_iterative.test_membrane_iterative()
Tests that the load to obtain a displacement of 93mm for a square membrane 2mm thick
with sides 5m long is 1kN/m2.

12.2. Topological optimization 453


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

12.5: Displacements in the x and z-direction after the topological optimization.

12.6: Internal actions in the cables after the topological optimization.

454 Chapter 12. Generalised finite element optimization


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

The initial guess for the solution is extremely far from the target value, so that the effec-
tiveness of the Newton-Krylov is highlighted.
Returns asserts the positiveness of the test.
Return type None

Code block 12.17: Test function for the topological optimiza-


tion problem.
1 import pytest
2 from cable_iterative_run import main
3
4

5 def test_cable_iterative():
6 length, section = main()
7
8 assert [length, section] == pytest.approx([9.277, 0.0001], 1e-2)

12.2. Topological optimization 455


Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

456 Chapter 12. Generalised finite element optimization


Bibliography

[Aba001] Abaqus 6.14 Documentation;


[Cal002a] Calculix ccx 2.14 Documentation;
[Cal002b] Calculix cgx 2.14 Documentation;
[DeS003a] T.DeSoza - Code Aster Documentation (revision 2012) - Élé-
ments MEMBRANE et GRILLE_MEMBRANE - www.code-
aster.org/V2/doc/v12/fr/man_r/r3/r3.08.07.pdf;
[DeS003b] T.DeSoza - Code Aster Documentation (revision 2013) - Éléments
de coques volumiques en non linéaire géométrique - www.code-
aster.org/V2/doc/v13/fr/man_r/r3/r3.07.05.pdf;
[DeS003c] T.DeSoza - Code Aster Documentation (revision 2013) - Éléments finis de co-
ques volumiques - www.code-aster.org/V2/doc/v11/fr/man_r/r3/r3.07.04.pdf;
[Dlu004] Dlubal RFEM5 Documentation;
[Fle005] JL.Fléjou - Code Aster Documentation (revision 2012) - Modélisation des câbles
- www.code-aster.org/V2/doc/v13/fr/man_r/r3/r3.08.02.pdf;
[Gms006] Gmsh Documentation;
[Nas007] Nastran NX Documentation;
[SoWo008] SolidWorks 2017 Documentation - Linear Elastic Orthotropic Model;
[ASCE100] American Society of Civil Engineers (2017) - Tensile membrane structures -
ASCE/SEI 55-16
[Bec101] P. Beccarelli (2015) - Biaxial Testing for Fabrics and Foils (Chapter 2 -The
design, analysis and construction of tensile fabric structures) - Springer
International Publishing;
[BrNd102] P.Broughton, P.Ndumbaro - The Analysis of Cable and Catenary Structures;
[Buc103] H.A.Buchholdt (1999) - An Introduction to Cable Roof Structures;

457
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

[Cas104] E.Casagrande - Analisi Non Lineare Geometrica di Strutture a Funi e Tensostrut-


ture;
[CoTa105] A.Corigliano, A.Taliercio (2005) - Meccanica Computazionale - Esculapio;
[DePeOw106] E.A.DeSozaNeto, D.Perić, D.R.J.Owen (2008) - Computational Method for
Plasticity;
[GoBr107] P.D.Gosling, B.N.Bridgens, L.Zhang - Adoption of a reliability approach for
membrane structure analysis;
[LC108] A.LeCuyer (2008) - ETFE Technology and Design;
[LeSo109] R.B.Lehoucq, D.C.Sorensen (1996) - “Deflation Techniques for an Implicitly
Restarted Arnoldi Iteration”;
[LeSp110] R.Levy, W.R.Spillers (2003) - Analysis of Geometrically Nonlinear Structures;
[LeV111] A.LeVan (2014) - Coques et membranes, Fondements de l’approche non linéaire;
[Lew112] W.J.Lewis - Tension structures (2003) - Form and Behaviour;
[LSY113] R.B.Lehoucq, D.C.Sorensen, C.Yang (1998) - “ARPACK Users Guide: Solution
of Large-Scale Eigenvalue Problems with Implicitly Restarted Arnoldi Meth-
ods”;
[Mal117] Bridge Theory and Design, notes by Prof. Pier Giorgio Malerba (2016-2017);
[Kim114] Nam-Ho Kim (2015) - Introduction to Nonlinear FE Analysis;
[Sei115] M.Seidel - Tensile surface structures: A practical guide to cable and membrane
construction;
[XuCo116] W.Xu, T.F.Coleman - Solving Nonlinear Equations with Newton-Krylov Method
Based on Automatic Differentiation;
[AbMo201] G.Aboul-Nasr, S.A.Mourad - An extended force density method for form finding
of constrained cable nets;
[AGZ202] X.An, P.D.Gosling, X.Zhou - Analytical structural reliability analysis of a sus-
pended cable;
[ArAnB203] J.H. Argyris, T.Angelopoulos, B.Bichat - A General Method for the Shape Find-
ing of Lightweight TensionStructures;
[BeEk204a] K.U.Bletzinger, Ekkehard Ramm - A General Finite Element Approach to the
form Finding of Tensile Structures by the Updated Reference Strategy
[BeEk204b] K.U.Bletzinger, Ekkehard Ramm - Structural optimization and form finding of
light weight structures
[DaBu205a] A.Day, J.Bunce (1970) - “Analysis of cable networks by dynamic relazation”.
Civil Engineering and Public Works Review , 383- 386;
[DaBu205b] A.Day, J.Bunce (1980) - “Form finding, control and modification for tension
structures”. ARUP Journal , 19-20;

458 Bibliography
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

[DaBu205c] A.Day, J.Bunce (no date) - “The analysis of hanging roofs”. ARUP Journal ,
30-31;
[GaLe206] S.Gale, W.Lewis - Patterning of tensile fabric structures with a discrete element
modelusing dynamic relaxation;
[GBZ207] P.D.Gosling, B.N.Bridgens, L.Zhang - Adoption of a reliability approach for
membrane structure analysis;
[Lin208] T.Linthout - Form-finding and patterning of fabric structures using shape opti-
mization techniques;
[LoLS209] S.Lopez, G.LaSala - A finite element approach to static and dynamic analysis of
geometrically nonlinear structures;
[KnKe210] D.A.Knoll, D.E.Keyes (2004) - Jacobian-free Newton–Krylov methods: a survey
of approaches and applications
[MaMo211] B.Maurin, R.Motro (1998) - The Surface Stress Density Method as a Form-
Finding Tool for Tensile Membrane – Engineering Structures, Volume 20, Issue
8, pages 712-719;
[MoTo212] E.Moncrieff, B.H.V.Topping - Computer methods for the generation of mem-
brane cutting patterns
[Pri213] D.Priour (2005) - FEM modeling of flexible structures made of cables, bars and
nets;
[PWB214] B.Philippa, R.Wüchnera, K.U.Bletzinger - Advances in the form-finding of
structural membranes;
[Vee215] D.Veenendaal, P.Block - An overview and comparison of structural form finding
methodsfor general networks;
[WuBl216] R. Wüchner, K.U.Bletzinger - Stress-adapted numerical form finding of pre-
stressed surfaces by the updated reference strategy
[XuCo217] W.Xu, T.F. Coleman (2011) - Solving Nonlinear Equations with Newton-Krylov
Method Based on Automatic Differentiation
[Bar301] M.R.Barnes (1977) - Form finding and analysis of tension space structures by
dynamic relaxation - Unpublished Doctoral thesis, City University London
[Bia302] M.Biasielli (2016) - Reti di Funi e Membrane: Ricerca della Forma e Risposta
Strutturale - Politecnico di Milano;
[Col303] D.Colmerales (2016) – Numerical Analysis of cabled-truss structures – Czech
Technical University;
[Hen304] E.Henrysson (2012) - Conceptual Design and Analysis of Membrane Structures;
[AGC401] AGC - www.agcchem.com/blog/europes-largest-infrastructure-project-relies-
fluon-etfe-film/
[ArJ402] Architect’s Journal - www.architectsjournal.co.uk/home/roof-in-place-on-
hopkins-olympic-velodrome/5216064.article

Bibliography 459
Form-Finding and Mechanical Behaviour of Cable and Membrane Structures

[AS403] AS - en.as.com/en/2017/05/17/football/1495044694_565468.html
[EnBr404] Encyclopedia Brittanica - www.britannica.com/technology/membrane-structure
[Hol405] C.Hollander (2007) - Modeling of Thermal Oxidation and Stress Effects -
www.iue.tuwien.ac.at/phd/hollauer/
[Maf406] Maffeis - www.maffeis.it/en/projects/#/
[MaTe407] Maco Technology - www.macotechnology.com/blog/la-progettazione-delle-
tensostrutture/
[Meh408] Mehgies - www.mehgies.com/mta/Wiki-Textile-Architecture/Form-Finding-of-
Textiel-Architecture-.php
[Tri409] TriPyramid - www.tripyramid.com/?q=tension-elements
[Pin410] Pintrest - www.pinterest.com/pin/361062095119373910/
[Wiki411] Wikipedia - en.wikipedia.org/

460 Bibliography
Index

Symbols optimize_aster() (in module mem-


_bcc_eqs() (in module code_ff.ff), 265 brane_iterative_run), 430
_free_eqs_cable() (in module code_ff.ff), 267
_free_eqs_membr() (in module code_ff.ff),
R
268 read_topology() (in module code_ff.parser),
_membr_area() (in module code_ff.ff), 262 250
_membr_normal() (in module code_ff.ff), 263 S
_membr_tension() (in module code_ff.ff), 265
save() (aster_params.AsterParams method),
_retrieve_and_test_ff() (in module
428, 441
test_ff_clc), 277
solve_aster() (in module cable_iterative_run),
_side_length() (in module code_ff.ff), 261
442
A solve_aster() (in module mem-
brane_iterative_run), 429
add_params() (aster_params.AsterParams
solve_catenary() (in module solve_catenary),
method), 428, 442
66
AsterParams (class in aster_params), 428, 441
solve_ff() (in module code_ff.ff), 269
F solve_parabola() (in module solve_parabola),
75
ff_obj() (in module code_ff.ff), 271

L T
test_catenary() (in module test_catenary), 70
load() (aster_params.AsterParams method),
test_hypar() (in module test_ff_clc), 311, 365
428, 441
test_membrane_iterative() (in module
M test_membrane_iterative), 438,
453
main() (in module cable_iterative_run), 444
test_net() (in module test_ff_clc), 278
main() (in module catenary), 68
test_net_anti() (in module test_ff_clc), 294
main() (in module ff_clc), 248
test_parabola() (in module test_parabola), 78
main() (in module membrane_iterative_run),
test_plane() (in module test_ff_clc), 336
431
main() (in module parabola), 76 W
O write_test() (in module code_ff.parser), 259
write_topology() (in module code_ff.parser),
optimize_aster() (in module ca-
255
ble_iterative_run), 443

461

You might also like