A FE Based Design Tool For PF LG
A FE Based Design Tool For PF LG
JENS MALMBORG
A FINITE ELEMENT BASED DESIGN TOOL FOR POINT FIXED LAMINATED GLASS
A FINITE ELEMENT BASED
DESIGN TOOL FOR POINT FIXED
LAMINATED GLASS
JENS MALMBORG
Structural
Master´s Dissertation
Mechanics
Detta är en tom sida!
Department of Construction Sciences
Structural Mechanics
Master’s Dissertation by
JENS MALMBORG
Supervisors:
Kent Persson,PhD, and Jonas Lindemann, PhD.,
Div. of Structural Mechanics
In this master’s project, a design tool for bolt fixed laminated glass was developed,
based on linear-elastic finite element theory. The program produces images of the de-
flections and stress distributions in bolted glass panes. A two-dimensional triangular
mesh, created by an external mesh generator, was extended to a three-dimensional
mesh comprising 15-node wedge elements. A least-square method was adopted for
extrapolating stresses from Gaussian sample points to the element nodes. A simple
graphical user interface was developed in the programming language Python, as well
as a simple post-processor employing the graphics library OpenGL.
Keywords: FEM, finite element analysis, bolt fixed glass, laminated glass, tough-
ened glass, Python, Fortran, wedge element, 15-node wedge element, stress extrap-
olation, discontinuous stress distribution, sparse matrix
i
Detta är en tom sida!
Summary
The work presented in this master’s thesis concerns the development of a finite
element based design tool for balustrades and facades of laminated, toughened,
bolt-fixed glass.
The objective of this thesis was to implement a finite element solver using composite
material shell elements in order to determine stresses in rectangular, bolt-fixed glass
panes, subjected to a distributed load or a line load. Merely one free mesh gen-
erator was found, yielding two-dimensional triangular elements. There are several
commercial mesh generators, but they are rather expensive and did not fit the bud-
get of this project. An effort was made to model the behavior of a glass structure
subjected to bending by means of triangular composite material shell elements. The
shell elements failed to represent the discontinuous stress distribution that arises in
the thickness direction of a laminated glass pane under certain loads and boundary
conditions. A routine was written for extending an arbitrary two-dimensional tri-
angular mesh to a multi-layered three-dimensional mesh comprising 15-node wedge
elements. The 15-node wedge elements proved to be as capable as 20-node hexag-
onal elements in representing both deflections and stress distributions, but with a
slower convergence.
Two different sparse solvers were tested for solving the global system of equations;
a direct solver from the Intel Math Kernel Library, and an iterative solver from
SPARSKIT. The iterative solver converged rather quickly when using shell elements,
but did not converge at all when using the 15-node wedge elements. This might be
due to the higher nodal connectivity, resulting in a less sparse system matrix. A
nodal-reordering scheme, the nested dissection method, was used for speeding up
the convergence of the iterative solver. This improved the convergence speed signif-
icantly for the shell elements, but had no effect at all on the wedge elements. The
direct solver employs the very same nodal-reordering scheme as the one tested with
the iterative solver. The direct solver was not tested with the shell elements, but
proved to be very stable with the wedge elements that were finally implemented in
the design tool.
iii
iv
The work presented in this master’s thesis was carried out at the Division of Struc-
tural Mechanics at Lund University, Sweden, during the period November 2005 -
May 2006.
Jens Malmborg
v
Detta är en tom sida!
Contents
1 Introduction 1
1.1 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Project Tasks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Extended Project Tasks . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.5 Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.6 Intended Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.7 Report Outline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
vii
viii CONTENTS
4.4.3 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.4.4 Extending a 2D triangular mesh to a 3D prismatic mesh . . . 30
4.5 The 15-node Wedge Element . . . . . . . . . . . . . . . . . . . . . . . 32
4.5.1 Evaluating the element stiffness . . . . . . . . . . . . . . . . . 32
4.5.2 Nodal forces for the 15-node wedge element . . . . . . . . . . 37
4.6 Stress and Strain Evaluation . . . . . . . . . . . . . . . . . . . . . . . 42
4.6.1 Stresses and strains at Gauss points . . . . . . . . . . . . . . . 42
4.6.2 Extrapolating the stresses to the nodes . . . . . . . . . . . . . 42
4.7 Modelling of Bolt Fixings . . . . . . . . . . . . . . . . . . . . . . . . 46
4.7.1 General remarks . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.7.2 The cylindrical bolt . . . . . . . . . . . . . . . . . . . . . . . . 47
4.8 Solving the Global System of Equations . . . . . . . . . . . . . . . . . 48
4.8.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4.8.2 Coordinate Sparse Format . . . . . . . . . . . . . . . . . . . . 48
4.8.3 Compressed Sparse Row Format . . . . . . . . . . . . . . . . . 50
4.8.4 Assembling element stiffness matrices . . . . . . . . . . . . . . 51
4.8.5 Matrix partitioning due to prescribed DOFs . . . . . . . . . . 51
4.8.6 LU- and Cholesky factorization . . . . . . . . . . . . . . . . . 53
4.8.7 Nodal reordering . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.8.8 An iterative solver . . . . . . . . . . . . . . . . . . . . . . . . 56
4.9 Visualization of Results . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.9.1 Used tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.9.2 Drawing nodal stresses . . . . . . . . . . . . . . . . . . . . . . 57
5 Examples 61
5.1 General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.2 Balustrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.3 Facade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.4 Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
5.5 Solve time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6 Concluding Remarks 67
6.1 General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.2 Proposals For Future Work . . . . . . . . . . . . . . . . . . . . . . . . 68
Bibliography 71
Appendix 73
Chapter 1
Introduction
1.1 Background
During the last few years architects have become more interested in using glass
in supporting parts of building structures, and in these structures minimizing the
amount of other materials. The fixings of glass structures raise interesting prob-
lems, since this is where other types of materials usually need to be employed. Glass
balustrades attached to railings, and glass facades attached to the building structure,
are two examples where the glass may be fixed through cylindrical or countersunk
holes that are cut out during the manufacturing process. Through these holes the
glass may be connected onto the supporting structure by metal bolts, see Figure
1.1, where the glass needs to carry itself and due loads.
Laminated glass usually consists of two layers of very brittle hardened glass with a
thin intermediate foil of PVB. PVB is a highly elastic material that keeps the glass
in place in the event of failure, thereby preventing people from getting hurt.
Figure 1.1: Bolts for cylindrical holes and countersunk holes, respectively. [1]
1
2 CHAPTER 1. INTRODUCTION
1.2 Objective
In the building industry, there is little knowledge about how do design glass struc-
tures in a safe and efficient way. The objective of this master’s thesis is to develop a
design tool where different parameters concerning laminated glass panes, fixed with
bolts, can be determined. These parameters include distance between bolts and
edges, glass thickness, etc. Material relationships established in an earlier master’s
thesis, [1], as well as some building codes, will be implemented. The tool will be
based on the finite element method and should have a user-friendly, intuitive graph-
ical interface, that enables persons unacquainted to the finite element method to
use the tool.
1.5 Limitations
The geometries are confined to rectangular shapes. Two different loading cases are
considered; a line load acting along the top edge of a balustrade, and a distributed
load acting on a facade, see Figure 1.2. The program developed within this project
will be completely based on linear elastic theory. There will be no consideration of
1.6. INTENDED AUDIENCE 3
Figure 1.2: A balustrade subjected to a line load, and a facade subjected to a dis-
tributed load.
nonlinear effects, neither geometrical nor material. The actual bolt fixings will be
excluded from the model, meaning that an attempt will be made to resemble the
behavior of the glass structure by means of proper boundary conditions around the
holes.
Chapter 3 explains what kind of tools the modelling of laminated glass requires,
or more specifically, what types of finite elements are appropriate for implementa-
tion in a glass design program.
Chapter 4 is the main chapter of this report. It deals with the implementation
of the glass design program, ClearSight, created in this project. A more detailed
disposition of Chapter 4 is given in Section 4.1.
A few examples of structures analyzed with the program, are shown in Chapter
5.
Chapter 6 contains some general concluding remarks and a few proposals for fu-
ture work.
Detta är en tom sida!
Chapter 2
Mechanical Properties of
Laminated Glass
Toughened glass is made from annealed float glass that undergoes a thermal temper-
ing process, in which the the annealed glass is heated to its softening point (∼ 650 ◦ ).
The glass is then rapidly cooled by air jets, which causes the glass surfaces to con-
tract whereas the inner region continues to float a while longer. When the inner
region finally contracts, the surfaces are subjected to compressive stresses that are
balanced by tensile stresses in the inner region. [1]. A principal figure of the residual
stress variation through the glass thickness is shown in Figure 2.1.
Glass is especially sensitive to tension, and it is in most real cases tensile stresses
that ultimately causes glass to fail. The toughened glass can resist larger bending in-
duced deformations than ordinary glass, when the residual compressive stresses near
the glass surface allow for larger bending induced tensile stresses. When toughened
glass fails, it shatters in small harmless pieces.
5
6 CHAPTER 2. MECHANICAL PROPERTIES OF LAMINATED GLASS
PVB is a highly elastic material, allowing for very large deformations. It behaves
non-linearly when subjected to large deformations, but since it is only subjected to
very small deformations in the applications considered in this project, it is modelled
as a linear elastic material. The creep properties, however, may be important for
the long-term mechanical behavior, but they are neglected in this study.
When the toughened glass shatters, the pieces will stick to the PVB foil. This
is the sole purpose of the PVB foil.
Both glass and PVB are regarded as linear-elastic materials. The following stiff-
ness parameters were employed throughout this study
Eglass = 78 GP a
vglass = 0.23
(2.1)
Epvb = 9 M P a
vpvb = 0.43
Figure 2.1: The residual stress profile in a toughened glass pane. (Reproduced from
[1])
2.3. FRACTURE CRITERION 7
A principal stress is a normal stress acting on a plane where the shear stresses
are zero. For a certain point, the maximum positive principal stress is therefore
the maximum tensile stress acting in that point. Too high a tensile stress is what
causes glass to fail, and hence the maximum positive principal stresses are used to
investigate whether the permissible stress is exceeded in any point of the analyzed
structure.
The residual stresses in the toughened glass, shown in Figure 2.1, are not considered
in the stress calculations. It is merely their beneficial effect on the permissible stress
that is taken into account.
Detta är en tom sida!
Chapter 3
3.1 General
From a previous master’s thesis [1], laminated glass is known to display very com-
plex stress distributions in the thickness direction, when subjected to certain loads
and boundary conditions. This complex stress distribution is due to the large dif-
ferences in stiffness for the glass versus the PVB. In order to calculate the stresses
that arise in different parts of a laminated glass structure, where it is impossible
to use analytic formulas, it is necessary to resort to numerical methods such as the
Finite Element Method. Different element types are appropriate for different types
of problems, and even though it is always possible to find a solution, the obtained
solution is not always in the vicinity of the true solution.
Since merely one free, reliable mesh generator has been found − Triangle, yielding
triangular elements only − the scope of element types appropriate for implementa-
tion in this project is essentially narrowed. Three types of elements, all based on
triangle shapes, were tested.
9
10 CHAPTER 3. ANALYZING LAMINATED TOUGHENED GLASS
solid elements in ABAQUS. The shell element tested has three nodes, with five de-
grees of freedom at each node; three translational and two rotational. See Figure
3.1.
Every element is given a certain number of integration layers, typically one integra-
tion layer per material layer. Thickness and material parameters are set for each
integration layer. Every integration layer has two integration points located at the
center of each triangle, equally distanced from the top and bottom of the layer.
Using a larger number of integration layers results in a larger number of integration
points, presumably giving a more accurate result of the stress and strain distribution
in the thickness direction.
Figure 3.3 shows the stress distribution in the direction of the beam, in a section
located 2.5 meters away from the load, as obtained with the shell elements. The nor-
mal stress varies almost linearly through the whole thickness, the only discrepancy
occurring in the soft PVB foil where the normal stress is close to zero throughout
the foil.
Figure 3.4 shows the same stress distribution as given by an analysis with quadratic
hexagonal solid elements in ABAQUS. This element type proved to be accurate
when used for simulating a few experimental set-ups in an earlier master’s thesis [1].
Every material layer has two finite elements in the thickness direction. In this simple
2
0.6
0.5
0.4
−1
0.3
0.2
−2
0.1
X: 5
Y: −0.2
Z: −0.6846
−3
Figure 3.2: A beam composed of 800 shell elements.
−4
0.016
0.014
Distance along thickness [m]
0.012
0.01
−5
0.008
0
0.006
0.5
1
0.004
1.5
2 0.002
2.5
3 0
−2.5 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 2.5
3.5
Normal Stress [Pa] x 10
7
1.5
4 1
0.5
4.5 0
−0.5
Figure 3.3: Stress distribution in the thickness direction of the shell beam.
5
−2
−1.5
−1
model, the shell elements yield about the same result as the hexagonal elements.
Although this first, simple check seems promising, it is necessary to investigate
further whether the shell element can represent other, more complex stress distribu-
tions. As mentioned, laminated glass is known to show much more complex stress
distributions when subjected to certain loads and boundary conditions. Such a
stress distribution may for instance occur around holes in a balustrade subjected to
bending. Without digging too deep into the theory of these specific shell elements,
their capability to represent more complex stress distributions can easily be tested
12 CHAPTER 3. ANALYZING LAMINATED TOUGHENED GLASS
0.016
0.014
Distance along thickness [m]
0.012
0.01
0.008
0.006
0.004
0.002
0
−3 −2 −1 0 1 2 3
Normal Stress [Pa] 7
x 10
Figure 3.4: Stress distribution in the thickness direction of the beam composed of
quadratic hexagonal solid elements.
by using the same beam model with a lower Young’s modulus for the intermediate
PVB foil.
Figure 3.5 shows the stress distribution in the same section of the beam, obtained
with the same ABAQUS-model as above, where Young’s modulus of the intermedi-
ate foil is given a value of E = 9kP a.
Figure 3.6 shows the result obtained with the shell elements, where again the normal
stress varies almost linearly through the whole thickness.
It is concluded that, due to the incapability to resemble a discontinuous stress dis-
tribution as shown in Figure 3.5, the shell element is not a proper choice for imple-
mentation in this project.
Another reason for not using shell elements in this project is that they are two-
dimensional, thus making realistic modelling of the fixings hard.
3.2. THE COMPOSITE MATERIAL SHELL ELEMENT 13
0.016
0.014
Distance along thickness [m]
0.012
0.01
0.008
0.006
0.004
0.002
0
−5 0 5
Normal Stress [Pa] 7
x 10
Figure 3.5: Stress distribution in the thickness direction of the beam composed of
hexagonal solid elements, where Young’s modulus of the intermediate foil is E = 9
kPa.
Distribution of Normal Stress along thickness
0.018
0.016
0.014
Distance along thickness [m]
0.012
0.01
0.008
0.006
0.004
0.002
0
−2.5 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 2.5
Normal Stress [Pa] 7
x 10
Figure 3.6: Stress distribution in the thickness direction of the beam composed of
shell elements, where Young’s modulus of the intermediate foil is E = 9 kPa.
14 CHAPTER 3. ANALYZING LAMINATED TOUGHENED GLASS
The element was implemented and tested in MATLAB, using the same beam model
used for testing the shell element. The results showed that this element type is
extremely stiff and reluctant to bend, even when a very large number of elements is
used. The ABAQUS manual [4] also discourages users from employing the 6-node
wedge element in structures subjected to bending.
The beam test used for evaluating the shell element, as well as the 6-node wedge
element, was also used with the 15-node wedge elements. Every material layer has
two finite elements in the thickness direction. The stress distribution is shown in
3.4. CONCLUSIONS 15
0.016
0.014
Distance along thickness [m]
0.012
0.01
0.008
0.006
0.004
0.002
0
−5 0 5
Normal Stress [Pa] 7
x 10
Figure 3.9: Stress distribution in the thickness direction of the beam composed of
15-node wedge elements, where Young’s modulus of the intermediate foil is E = 9
kPa.
Figure 3.9. This stress distribution is almost identical to the one obtained with the
hexagonal elements, see Figure 3.5.
3.4 Conclusions
Due to the large differences in Young’s moduli of glass and PVB, the stress distri-
bution in a laminated glass structure subjected to bending becomes highly discon-
tinuous in certain areas. The shell elements fail to represent such a discontinuous
stress distribution. The 6-node wedge element proved to be very stiff and reluctant
to bend. The stress distribution was not therefore calculated.
The results show that the 15-node wedge element is obviously much more capa-
ble of representing bending than the 6-node wedge element. It can also represent
discontinuous stress distributions when several element layers are used. Of the three
element types tested, the 15-node wedge element is superior for applications involv-
ing structures subjected to bending, when the structure is composed of different
materials whose Young’s moduli differ significantly.
Further tests, not shown here, indicate that the 15-node wedge element converges
to the same solution as the hexagonal element, but a greater number of elements
16 CHAPTER 3. ANALYZING LAMINATED TOUGHENED GLASS
is required. The hexagonal element would therefore be preferable, but since no free
mesh generator was found for this type of element, there are really no options. This
15-node wedge element was the one finally implemented in the glass design program,
and it is therefore more thoroughly described in Chapter 4.
Chapter 4
In Section 4.2 the basic program structure is explained. The major steps in the
computational process are presented.
In order to allow for persons unacquainted to finite elements to use the program, a
simple graphical user interface was developed in the programming language Python.
In Section 4.3 the details about the implementation are explained.
Section 4.4 deals with the generation of finite element meshes. In this project an
external mesh generator, Triangle [15], is used to produce a two dimensional mesh
composed of triangular elements. This 2D mesh is then extended to a 3D mesh
comprising wedge elements.
In Section 4.6 the evaluation of stresses and strains is discussed. A method for
extrapolating the stresses to the nodes was implemented, and some of the theory
behind that method is presented.
Section 4.7 explains how the program deals with bolt fixings. The assumptions
and simplifications are presented and discussed.
Section 4.8 explains how the global system of equations that arise in finite element
17
18 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
analysis may be solved. First, two different formats for storing large matrices where
most of the indices are zeroes, so called sparse matrices, are presented. Large finite
element models with many degrees of freedom, result in very large matrices that
are always more or less sparse. In order to store these matrices in an efficient way,
advantage is taken of the fact that zeroes do not need to be stored. Two different
families of solvers, direct and iterative, are briefly introduced. Focus has been put
on one type of a direct solver that performs a Cholesky factorization of the stiffness
matrix. The important concept of fill-ins as well as its implications on computer
memory consumption and solve time are explained.
Section 4.9 deals with the visualization of the results from the finite element calcula-
tions. The graphics library OpenGL was used in order to create nice and illustrative
images of stress distributions in a simple post-processor.
In order to minimize the steps where the user may go astray, the part of the pro-
gram where inputs are entered has been given a very simple Graphical User Interface
(GUI) where detailed instructions are given for every input. The glass design pro-
gram is actually three separate programs that are controlled by one of them. The
GUI was developed in the programming language Python, with the extension mod-
ule wxPython. This is further presented in section 4.3.
When the user has given the proper inputs and decides to run the analysis, es-
sentially three things are carried out from the Python code.
• A material file that contains information about the number of material layers
in the structure, the number of finite element layers and material properties of
each layer, is written. A load file that contains information about what loads
are imposed on the structure, is also written.
• The computational code is executed, with the mesh-, material-, and load-files
given as input.
All computational code was written in Fortran95, which is a language tradition-
ally used for finite element computations. When the structural displacements and
stresses have been calculated, they are written to text files. These text files are then
read by the post-processor that is called from the GUI when the computations have
been carried out. The post-processor is written in Python with the graphics library
OpenGL.
Figure 4.1 shows the principal structure of the design program. Figure 4.2 shows in
principle how the computations are carried out.
The Fortran code uses some external routines. For inverting matrices, determin-
ing eigenvalues and solving a linear system of equations, routines from the Intel
Math Kernel Library [11] are used, whereas routines for handling sparse matrices
are taken from SPARSKIT [9].
20 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Figure 4.3: The first tab where the structures outer geometry is entered
22 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
bolts would certainly be an useful option, but in this version only one type of bolt has
been implemented, namely the cylindrical bolt with an inner diameter d = 30mm
and an outer diameter D = 50mm. The positions of the bolts are entered in a table,
where the coordinates refer to an origin located in the bottom left corner of the
structure.
Figure 4.4: The second tab where the number of bolts and their positions are defined
Loads
Building codes prescribe what type of loads different structures should be designed
to carry, as well as the size of the loads in different situations. Balustrades should be
designed to carry a line load acting along the top edge, whereas facades should be
designed to carry a distributed load. Both these load types have been implemented,
and the size of the loads are entered under the third tab. See Figure 4.5.
Material properties
The fourth and last tab allows the user to specify material parameters, such as
Young’s modulus, Poisson’s ratio and density, for the glass layers as well as the
4.3. GRAPHICAL USER INTERFACE 23
Figure 4.5: The third tab where the loads are defined. A line load acting on the top
edge of the glass or/and a distributed load acting on the whole surface is entered.
PVB layer. In addition, the glass’ permissible stress may also be specified. The
permissible stress is not used in the calculations, but in the post-processor where
the user can choose to view areas where the stresses exceed the permissible stress.
Meshing properties
Apart from the structure data entered in the four tabs, there is also a couple of mesh
related properties that may be changed. As mentioned, three dimensional wedge ele-
ments are used in the calculations. The 3D mesh is extended from a two-dimensional
triangular mesh. The triangular mesh is created by an external mesh generator, as
discussed in Section 4.4. The properties that may be changed affect the accuracy
of the solution, and they are therefore accessed through the ”Advanced”-menu in
order to keep novice users away.
The first option deals with the coarseness of the two dimensional mesh. A maximum
element area that applies to the whole mesh may be given, as well as a maximum
area that only applies to areas within a given distance from holes (=bolts). The
number of element nodes on the hole boundary may also be specified. All these
24 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Figure 4.6: The fourth tab where the material parameters are set
parameters have tuned standard values in order to give satisfactory results in most
cases.
The second option concerns the three dimensional mesh, namely the number of fi-
nite element layers of each material layer. A greater number of element layers gives
better accuracy, but it also implicates a longer solution time. Standard values are
set.
4.3. GRAPHICAL USER INTERFACE 25
Figure 4.8: The option where the number of elements in the thickness direction is
set
A load file is written where the magnitudes of the two different load types are
specified. A material file is written, where the material parameters for the different
layers are specified. These material parameters are used when the element stiffness
matrices are calculated, as well as when the stresses are evaluated.
When these files have been created, an external mesh generator is executed. The
mesh generator reads the poly-file and creates a two-dimensional triangular mesh,
which is stored in a couple of files. These files are read, and an area-file is created.
The area file is, along with the original mesh files, used by the mesh generator to
create a new, refined mesh. These different files are described in Section 4.4.
Finally, the computational code is executed. When the computations have been
carried out, the post-processor described in Section 4.9 is executed.
26 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
There are only a few mesh generators available online for free, of which even fewer
are capable of creating meshes of high quality. A great number of commercial mesh
generators exist, that can create both two- and three-dimensional meshes comprising
different element types. They are often rather expensive, and hence they do not fit
the budget of this project. Triangle, written by Jonathan Shewchuk [15], though, is
a free, almost inconceivably fast, stable and easy-to-use program that constructs a
quality triangular mesh from a region defined by vertices and segments. An attempt
was made to use the free program CQmesh [16], which takes a triangular mesh as
input, an tries to convert it to a quadrilateral mesh. This worked very poorly, and
was therefore not implemented.
Triangle reads so called poly-files, representing a Planar Straight Line Graph (PSLG)
which, by definition, is simply a list of vertices and segments. Vertices may be lo-
cated on the structure boundary, or inside the structure boundary. A vertex located
on the boundary is a point that connects segments. The outer region of the structure
is entirely defined by segments, see Figure 4.9 below.
For easy identification of nodes, a boundary marker can be assigned to any vertex
or segment in the input poly-file. The boundary marker assigned to a segment, will
be passed on to nodes inserted on the segment. This is used in order to identify
which nodes are subjected to the line load, when analyzing a balustrade. Every
region inside a closed curve, may be given attributes that only apply to the trian-
gle elements within that region. This is used when identifying elements subjected
to certain conditions, see further Section 4.7 about modelling the bolt fixings. In
the input poly-file, a regional attribute is given a x- and a y-coordinate where the
attribute first applies. Triangle will then pass that regional attribute to all the ele-
ments in the entire region or subregion enclosed by segments.
Triangle can also create holes in the mesh. A starting coordinate for the hole is
defined, from which Triangle will start deleting triangles in all directions until it
reaches a segment. Creating intrinsically non-linear shapes, such as a circular hole,
is naturally not possible since a segment is linear. The remedy is to use as many of
the piecewise linear segments as needed to decently represent the non-linear shape.
This might result in very small triangles around the curved region.
28 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Apart from creating linear triangular elements as discussed above, Triangle can also
create subparametric quadratic elements consisting of six nodes rather than three,
where the term subparametric means that the triangle edges are still straight lines.
A subparametric quadratic triangle is geometrically identical to a linear triangle,
the only difference being the number of nodes. The three extra nodes in a quadratic
triangle are inserted at the midpoint of each edge in the linear triangle, as shown
below, enabling the use of quadratic shape functions. In following sections, the three
nodes located in the corners of a triangle will be referred to as corner nodes.
Mesh refinement
There are supposedly several ways to refine an existing mesh in Triangle. One way
is to create a so called area-file, which is simply a list of all the triangles, and a
maximum area for every triangle. If the maximum area for a certain triangle is set
to a smaller value than its actual size, additional nodes will be inserted, and the
triangle will be divided so that the requirement on maximum triangle size is met.
When refining a mesh using this method, the area-file is passed to Triangle along
with the already created node- and element-files. New node- and element-files will
then be created.
This way of imposing a smaller triangle size is very useful when one wishes to
refine the mesh around a hole. In this project, the holes represent bolt fixings that
give raise to large stress and strain gradients around the hole. By running Triangle
once, the elements situated within a given distance from the holes can be identified.
By means of an area-file, these elements are assigned a smaller maximum area that
Triangle enforces when executed a second time. Thus, a mesh better capable of
dealing with large gradients is obtained.
4.4. MESH GENERATION 29
Figure 4.12: A mesh with a hole. The mesh is refined close to the hole.
4.4.3 Implementation
When the user chooses to run the analysis, a routine in the GUI creates a poly-file
that corresponds to the geometry input. Two polygons are used at each hole; the
inner polygon defines the hole, and the outer polygon is used so that the elements
inside it can be given a regional attribute. This regional attribute is used when
finding the elements where certain boundary conditions apply, see further Section
4.7. Figure 4.13 shows the polygons for a balustrade with two bolts, specified in the
GUI according to Section 4.3. Figure 4.14 shows the resulting mesh. Note that no
area constraints have been given in this example, and that only 10 nodes are used to
define each hole. The region near the hole, that has been given a regional attribute,
is drawn with red color. The poly-file, as well as parts of the node- and element-files
for this example can be found in Appendix 1.
Figure 4.14: The resulting triangular mesh, with the elements having a regional
attribute drawn in red.
For the purpose of creating a mesh composed of 15-node wedge elements, the feature
in Triangle yielding subparametric quadratic triangles is used. The 15-node wedge
element has the structure and nodal labelling according to Figure 4.15.
A mesh comprising this kind of elements may be created by the following steps:
1. Find out how many triangle corner nodes the two-dimensional mesh comprises.
Use is taken of the topology list given by Triangle. Triangle puts every ele-
ment’s three corner nodes first in topology list, as in Figure 4.11.
2. All the nodes from the two-dimensional mesh are copied to new levels of depth.
Every layer of nodes now represent one side, top and/or bottom, of a set of
wedge elements. These nodes are simply labelled after their parent node.
3. All the triangle corner nodes are copied to the midpoint at each layer. The
labels of the midpoint nodes are stored in a matrix, with the row index corre-
sponding to the parent node label, and the column index corresponding to the
element layer in which the node is located. The topology for the wedge mesh
is defined using the topology for the triangular mesh.
In this project, the GUI creates a file that specifies the number of material layers,
the thickness of each material layer, as well as the number of finite elements in the
thickness direction of each material layer. A routine written in Fortran then creates
the wedge mesh according to the steps above.
Figure 4.16: A mesh composed of wedge elements, created according to the procedure
described above.
32 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
where xe ,ye and ze are vectors with the nodal coordinates for the element in the
global domain. Ne is a vector containing the 15 element shape functions, expressed
in ξ, η, ζ-coordinates. To obtain a unique mapping, 4.1 is differentiated using the
the chain rule
∂x ∂x ∂x
dx dξ
∂ξ ∂η ∂ζ
∂y ∂y ∂y
dy
= ∂ξ ∂η ∂ζ
dη (4.2)
∂z ∂z ∂z
dz ∂ξ ∂η ∂ζ dζ
The matrix above is called the Jacobian matrix, and its determinant is called
the Jacobian. With the isoparametric mapping, 4.1, the Jacobian matrix is written
4.5. THE 15-NODE WEDGE ELEMENT 33
as
∂Ne e ∂Ne e ∂Ne e
∂ξ
x ∂η
x ∂ζ
x
∂Ne e ∂Ne e ∂Ne e
J= ∂ξ y y y (4.3)
∂η ∂ζ
∂N
e ∂Ne ∂Ne
∂ξ
ze ∂η
ze ∂ζ
ze
where
˜ e
B = ∇N (4.5)
∂
0 0
∂x
0 ∂
∂y
0
N1 0 0 N2 0 0 .. .. N15 0 0
0 ∂
0 ∂z
˜ =
∇
e
N =
0 N1 0 0 N2 0 .. .. 0 N15 0
∂ ∂
∂y ∂x
0
0 0 N1 0 0 N2 .. .. 0 0 N15
∂ ∂
0
∂z ∂x
∂ ∂
0 ∂z ∂y
(4.6)
i.e.
∂N1 ∂N2 ∂N15
0 0 0 0 .. .. 0 0
∂x ∂x ∂x
∂N1 ∂N2 ∂N15
0 0 0 0 .. .. 0 0
∂y ∂y ∂y
∂N1 ∂N2 ∂N15
0 0 0 0 .. .. 0 0
∂y ∂y ∂y
B=
∂N1 ∂N1 ∂N2 ∂N2 ∂N15 ∂N15
(4.7)
∂y ∂x
0 ∂y ∂x
0 .. .. ∂y ∂x
0
∂N1 0 ∂N1 ∂N2
0 ∂N2
.. .. ∂N15
0 ∂N15
∂z ∂x ∂z ∂x ∂z ∂x
∂N1 ∂N1 ∂N2 ∂N2 ∂N15 ∂N15
0 ∂z ∂y
0 ∂z ∂y
.. .. 0 ∂z ∂y
N1 , N2 , ..., N15 are the element shape functions given in terms of ξ, η and ζ co-
ordinates. The problem is that B contains derivatives of the shape functions with
34 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
∂ξ ∂x ∂ξ ∂y ∂ξ ∂z ∂ξ
∂ξ ∂ξ ∂ξ
∂x
∂Ni ∂Ni ∂y ∂y ∂z ∂Ni
∂Ni ∂x + + ∂Ni ∂z ∂x
∂η
= ∂x ∂η
∂y ∂η ∂z ∂η
= ∂η
∂η ∂y
∂η
(4.8)
∂Ni ∂Ni ∂x + ∂Ni ∂y
+ ∂Ni ∂z ∂x ∂y ∂z ∂Ni
∂ζ ∂x ∂ζ ∂y ∂ζ ∂z ∂ζ ∂ζ ∂ζ ∂ζ ∂z
i.e. ∂N ∂N
i i
∂x ∂ξ
∂Ni ∂Ni
(JT )−1
∂y
= ∂η
(4.9)
∂Ni ∂Ni
∂z ∂ζ
The element shape functions, reproduced below, were taken from the ABAQUS
manual.
4.5. THE 15-NODE WEDGE ELEMENT 35
N7 = 2(1 − ξ − η)ξ(1 − ζ)
N8 = 2ξη(1 − ζ)
(4.11)
N9 = 2η(1 − ξ − η)(1 − ζ)
N11 = 2ξη(1 + ζ)
N13 = (1 − ξ − η)(1 − ζ 2 )
N14 = ξ(1 − ζ 2 )
N15 = η(1 − ζ 2 )
The differentiation of the shape functions with respect to ξ,η and ζ were carried
out in Maple. The stiffness of the 15 node wedge element cannot, due to the complex
shape functions, be evaluated by exact integration and hence numerical integration
is required.
There is no Gaussian integration formula for integrating a function over the en-
tire wedge region at once. The integration is therefore carried out in the triangle
ξ, η-plane and in the ζ-direction separately. 3x3 sample points are used for the in-
tegration of the element stiffness; three sets of three sample points in three different
ξ, η-planes. The stress and strain evaluation of this element is treated in section 4.6,
36 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
and it will be shown that 18 sample points are required for that integration in order
to use the least-square extrapolation technique. For now, it is sufficient to consider
the element with 9 sample points. The numerical integration of a function f (ξ, η, ζ)
over the wedge region can be written as
Z 1 Z 1−η Z 1 3 X
X 3
f (ξ, η, ζ)dξdηdζ = f (ξj , ηj , ζi )wpri wpsj (4.12)
−1 0 0 i=1 j=1
where the summation over j represents the integral over a triangle area in the
ξ, η-plane, and the summation over i represents the integral in the thickness direc-
tion, ζ. Every Gauss point has one weight depending on its ξ, η-coordinates, wps,
and one weight depending on its ζ-coordinate, wpr. The locations and weights of
the Gauss points can be found in [6]. They are shown in Table 4.1 and 4.2. With
Equations 4.4, 4.10 and 4.12, the element stiffness can be calculated as
Z 1 Z 1−η Z 1 3 X
3
Ke = BT DBdetJdξdηdζ = BT DBdetJwpri wpsj
X
(4.13)
−1 0 0 i=1 j=1
where B, D and J are evaluated at the Gauss point with the coordinates (ξ j , ηj , ζi )
and the corresponding planar weight wpsj and thickness weight wpri .
A few simple tests were performed and compared to identical examples in ABAQUS,
in order to confirm the correct implementation of the element stiffness calculation.
These tests are not shown here.
Table 4.1: Location of Gauss points in the (ξ, η)-plane with the planar Gauss weight
wps
j ξj ηj Weight wpsj
Table 4.2: Location of Gauss points in (ζ)-direction with the Gauss weight wpr
i ζi Weight wpri
1 -0.774596669241483 0.55555555555555556
2 0.0 0.8888888888888889
3 0.774596669241483 0.55555555555555556
Z
fle = ÑeT bdV (4.14)
V
For the isoparametric wedge element with the shape functions expressed in ξ, η, ζ-
coordinates, by using Equations 4.1 and 4.10, and the same numerical integration
used for evaluating the element stiffness, Equation 4.14 can be evaluated as
3 X
3
fle = NeT bdetJwpri wpsj
X
(4.15)
i=1 j=1
where NeT , b and J are evaluated at the Gauss points with the coordinates (ξj , ηj , ζi )
and the corresponding planar weights wpsj and thickness weights wpri .
bx
b=
by
(4.16)
bz
which for the configuration shown in Figure 4.16, where the gravitational force acts
in the negative y-direction, is
38 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
bx 0
b=
by
=
−γ ∗ g
(4.17)
bz 0
where γ is the density [kg/m3 ] of the material, and g is the gravitational acceleration
g ≈ 9.81 m/s2 .
The nodal forces due to body forces are calculated in the same routine as the stiffness
matrix.
Distributed loads
Facades should be designed to carry a distributed load, i.e. wind load, acting on the
outside surface of the glass pane. The size of this load depends on which elevation
above ground the facade is located.
The effect on the element nodal load vector of a distributed load is expressed as
Z
fbe = ÑeT hdS (4.18)
Sα
Consider a distributed load acting on the top surface of the element in Figure 4.18.
The element is shown both in the parent domain and in the global domain. For
this surface, ζ = 1, i.e. dζ = 0. Let Sα in Equation 4.18 denote this surface, whereas
h is the traction vector due to the distributed load. Consider the two straight lines
given by ξ = C1 and η = C2 , shown in Figure 4.19. Now, an incremental vector
dξ 6= 0 along η = C2 (where dη = 0 and dζ = 0), transforms into the xyz-space
according to
dx
a=
dy
= a1 dξ (4.19)
dz
4.5. THE 15-NODE WEDGE ELEMENT 39
Figure 4.18: A wedge element with a distributed load acting on its top surface, shown
in the parent domain and in the global domain.
Figure 4.19: The mapping of an incremental area on the wedge’s top surface, from
the parent domain to the global domain.
where
∂x
∂ξ
∂y
a1 = ∂ξ
(4.20)
∂z
∂ξ
dx
b=
dy
= b1 dη (4.21)
dz
40 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
where
∂x
∂η
∂y
b1 = ∂η
(4.22)
∂z
∂η
Notice that a1 and b1 are the first and second columns respectively, of the Ja-
cobian matrix J in Equation 4.3. See also Figure 4.19. The area spanned by the
two vectors a and b can be expressed with the cross-product as
dS = |a × b| (4.23)
An arbitrary function f = f (x, y, z) can now be integrated over the wedge’s top
surface as
Z Z 1−η Z 1
f (x, y, z)dS = f (x(ξ, η, ζ), y(ξ, η, ζ), z(ξ, η, ζ))|a1 × b1 ||dξ||dη| (4.25)
Sα 0 0
Z Z 1−η Z 1
fbe = ÑeT hdS = NeT h|a1 × b1 ||dξ||dη| (4.26)
Shα 0 0
3
fbe = NeT h|a1 × b1 |wpsj
X
(4.27)
j=1
4.5. THE 15-NODE WEDGE ELEMENT 41
where NeT , a1 and b1 are to be evaluated at the Gauss points with the coordi-
nates (ξj , ηj , 1) and the corresponding planar weights wpsj . See Table 4.1.
hx 0
hy = 0
h= (4.28)
hz −q
where q [N/m2 ] is the distributed wind load acting on the back side of the glass
pane.
Line loads
Building codes prescribe that balustrades should be designed to carry a line load.
The line load acts along the top edge of a balustrade. The line load’s contribution
to the nodal load vector may be evaluated by integrating an expression similar to
4.18, but in this project the loads are simply lumped to the nodes subjected to the
load.
If the boundary is subjected to a line load Q [N/m], we want to know the equivalent
nodal loads. If the distance between all the nodes on the boundary is d, then the
equivalent nodal load would be d ∗ Q for all nodes except one located on the edge
of the boundary. For such a node, the equivalent nodal load would be 0.5 ∗ d ∗ Q.
When using an unstructured mesh, the distance between the nodes is not uniform,
so the the nodal coordinates are used for calculating the distances.
42 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
∂N u1x
∂N2 ∂N15
εixx 1
0 0 0 0 .. .. 0 0
u1y
∂x ∂x ∂x
∂N1 ∂N2 ∂N15
εiyy
0
∂y
0 0 ∂y
0 .. .. 0 ∂y
0
u1z
∂N1 ∂N2 ∂N15
u2x
εizz
0
0 ∂y
0 0 ∂y
.. .. 0 0 ∂y
=
u2y
∂N1 ∂N1 ∂N2 ∂N2 ∂N15 ∂N15
εixy 0 0 .. .. 0
u2z
∂y ∂x ∂y ∂x ∂y ∂x
∂N1 ∂N1 ∂N2 ∂N2 ∂N15 ∂N15
εixz 0 0 .. .. 0 :
∂z ∂x ∂z ∂x ∂z ∂x
:
∂N1 ∂N1 ∂N2 ∂N2 ∂N15 ∂N15
εiyz 0 0 .. .. 0
∂z ∂y ∂z ∂y ∂z ∂y
u15z
(4.29)
When the strains have been determined, the stresses are obtained merely by
multiplying with the constitutive matrix, D. This method of obtaining stresses
and strains at the element integration points is purely textbook; the procedure is
independent of element type. See for example [5]. It is often less convenient to have
the stresses obtained at the integration points, since the stresses on the structure
boundary are in many cases larger than those in its interior. Methods have been
developed to extrapolate the stresses to the nodes. This matter is discussed below.
olation function, and σ(ξ, η, ζ) is the discrete Gaussian stress distribution, the error
at any point in the element may be written as
where nnd are the number of nodes, and nsp are the number of integration points.
Differentiating the functional with respect to the unknown nodal stresses σ̃ i and
setting it to zero, yields
X
χ= [σj (ξj , ηj , ζj ) − Ñk (ξj , ηj , ζj )σ̃k ][−Ñi (ξj , ηj , ζj )], i, k = 1, nnd (4.32)
See further [7] or [8].
where N are the element shape functions, σ̃ are the nodal stresses, and σ are the ele-
ment stresses according to the Gaussian integration. The normal and shear stresses
can be extrapolated separately, by letting σ̃ be a vector with the nodal normal stress
components or the nodal shear stress components.
44 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
1 1
σ̃xx σ̃xy
1 1
σ̃yy σ̃xz
1 1
σ̃zz
σ̃yz
2 2
σ̃xx
σ̃xy
2 2
σ̃normal =
σ̃yy σ̃shear =
σ̃xz (4.34)
2 2
σ̃zz
σ̃yz
::
::
::
::
15 15
σ̃ zz
σ̃
yz
6
3 X
NT σ normal detJwpri wpsj
X
Pnormal = (4.37)
i=1 j=1
3 X
6
NT σ shear detJwpri wpsj
X
Pshear = (4.38)
i=1 j=1
N, J, σ normal and σ shear in 4.36-4.38 should be evaluated at every Gauss point with
the coordinates (ξj , ηj , ζi ) and the corresponding planar weights wpsj and thickness
4.6. STRESS AND STRAIN EVALUATION 45
weights wpri . The coordinates of the Gauss points are given in table 4.3-4.4 [6].
The procedure above is performed element by element. Since elements share nodes,
several different stresses are obtained for each node. The nodal stresses obtained
from each element are assembled using the topology matrix, to a global nodal stress
vector. Each time a stress component is assembled to a node i in the global stress
vector, a 1 is assembled to position i in another vector. When all the element nodal
stresses have been calculated and assembled, the number of elements that have con-
tributed to the total stress in each node, is known. By dividing the total stress at
each node by the number of elements that have contributed, a smoothed stress value
is obtained at the nodes.
If the mesh is coarse, a stress component at a certain node evaluated in one ele-
ment, may differ significantly from the same stress component, at the same node,
evaluated in a neighboring element. Hence, it would perhaps be more appropriate
to weigh each of the stress components to the contributing element’s size, i.e. letting
the stress influence from a larger element be greater than that from a smaller ele-
ment. But since the mesh has been generated so that all elements are small where
the stress gradients are large, this should not be an issue. It is important though,
that the stress smoothing is carried out separately for each material layer. Two
material layers may share a node, and the strains in this node are the same for both
materials. The stresses, though, are discontinuous.
When the smoothed stress components have been obtained at all nodes, the prin-
cipal stresses at each node may be calculated. This is performed by setting up the
stress tensor S for each node, and determining its eigenvalues. The directions of the
principal stresses are the corresponding eigenvectors. They are not of interest here.
σxx σxy σxz
S=
σxy σyy σyz
(4.41)
σxz σyz σ
zz
In order to determine the eigenvalues of S, the functions dsytrd and dsteqr from the
Intel Math Kernel Library [11] were used. This library also contains the functions
dgetrf and dgetri that were used for inverting the matrix M in Equations 4.39-4.40.
The nodal stress components σij , as well as every node’s largest principal stress, are
written to files that can be read by the post-processor, discussed in Section 4.9.
46 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Table 4.3: Location of Gauss points in the ξ, η-plane, with the planar Gauss weight
wpi
j ξj ηj wpsj
Table 4.4: Location of Gauss points in the ζ-direction, with the corresponding Gauss
weight wpj
i ζi Weight wpri
1 -0.77459666924148 0.55555555555556
2 0 0.88888888888889
3 0.77459666924148 0.55555555555556
Clearly, none of the two bolts are straight forward to model, and due to lack of
time one of them has to be prioritized. Since the cylindrical bolt can be used to-
gether with the available meshing facilities, focus has been put on that type. The
scope of this project does not allow for developing a tool that determines stresses
and strains with perfect accuracy. Such a tool would require non-linear material
4.7. MODELLING OF BOLT FIXINGS 47
models, and would hence require an iterative solution procedure. This would not
only imply longer solution times annoying for the user, but it would also require
more work. An effort has been made to model the approximate behavior, based on
simplifications believed decently justified.
When dealing with large finite element problems it is often not feasible to store
the full stiffness matrix. The stiffness matrix of a typical finite element problem is
always sparse, i.e. most of the matrix elements are zeroes. The size of the stiffness
matrix, in terms of number of matrix elements, increases very fast when increasing
the number of degrees of freedom (DOFs). By going from (n) to (n+1) DOFs, the
number of matrix elements has increased by (2n+1). Even when actually possible,
storing the full stiffness matrix would, because of its inherently sparse nature, im-
plicate an unnecessary waste of computer memory. Therefore, one resorts to sparse
matrix storage, which means that all the zeroes are omitted and only non-zero in-
dices are stored. When solving the global system of equations, it is therefore required
that the solver is a so called sparse-solver.
There are several different methods to apply the sparse storage, using various for-
mats with different advantages. The matrix number of non-zeroes (NNZ) is an
important property that for a given format conveniently indicates the computer
storage cost. Figure 4.20 shows the sparsity pattern of a stiffness matrix typically
dealt with in this project. In this particular example, more than 99.5 per cent of
the indices contain zeroes. Neglecting to explicitly store all those zeroes, consumes
a lot less memory than storing the full matrix.
One array, AS, containing the non-zero values of the matrix A. The length of AS
is NNZ.
Two integer arrays, AI and AJ, contain the row and column indices of the cor-
responding element in A. AI and AJ both have the length NNZ.
4.8. SOLVING THE GLOBAL SYSTEM OF EQUATIONS 49
See the example below. An asterisk (*) in A represents a zero index, i.e. an in-
dex that is not stored.
5 1 1
2
3
1
3 2 2
5 ∗ 2 ∗ ∗
8
4
2
∗ 3 ∗ 8 ∗ 2 1 3
1 3 3
2 ∗ 1 5 6
A=
⇔ AS =
5 , AI
=
4 , AJ
=
3
(4.42)
6 5 3
∗ 8 5 1 ∗
8 2 4
∗ ∗ 6 ∗ 5 5 3 4
1
4
4
6 3 5
5 5 5
It is obvious that storing a dense matrix, where the number of non-zeroes is large
compared to the matrix size (m*n), in this format is not beneficial since three arrays
of size NNZ must be allocated. For dense matrices, 3*NNZ is larger than m*n.
Figure 4.20: Typical sparsity pattern of a FE stiffness matrix. Only 0.389 per cent
of the indices contain non-zeroes.
50 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
One drawback of using any sparse format is that simple matrix operations such
as addition and multiplication are made a bit trickier. Luckily, the excellent pack-
age SPARSKIT by Yousef Saad [9], contains heaps of routines for performing simple
and advanced matrix operations and manipulations on sparse matrices, as well as
routines for converting matrices between different sparse formats.
An array, AS, contains the non-zero values of the matrix A, stored row by row.
The length of AS is NNZ.
An integer array, AI, contains the column indices of the corresponding element
in AS. The length of AI is NNZ.
A second integer array, AJ, contains row pointers. The pointers indicate at which
element in AS and AI every new row in A begins. The length of AJ is (n+1),
where the position (n+1) points to a fictitious element in AS and AI .
5 1
2
3
3 2
5 ∗ 2 ∗ ∗
8 5
1
∗ 3 ∗ 8 ∗ 2 1
3
1 3
5
2 ∗ 1 5 6
A= ⇔ AS =
5 , AI
=
4 , AJ
= (4.43)
9
6 5
∗ 8 5 1 ∗
12
8 2
14
∗ ∗ 6 ∗ 5 5 3
1
4
6 3
5 5
For very large, sparse matrices the Compressed Sparse Row format is preferable,
since a considerable amount of computer memory may be saved. In this project
4.8. SOLVING THE GLOBAL SYSTEM OF EQUATIONS 51
though, the strongest reason for using the CSR format is that some of the employed
routines require matrix inputs in this format.
The global stiffness matrix, described by the three arrays KS, KI and KJ, now
has indices that occur several times due to the connectivity between nodes. By
summing up the number of indices that occur more than once, and subtracting
those from the length of the array KS, the number of non-zeroes in the matrix has
been obtained. Three new vectors may now be allocated, exactly according to the
description of COO format above. If the duplicate indices are merged, and all the
elements are ordered row by row, the result obtained is exactly that described by the
COO format. It is now a rather simple task to convert the matrix to CSR format.
SPARSKIT [9] contains routines for performing both the merge and the conversion.
This way of assembling the global stiffness matrix is certainly not the most memory
efficient, since the first three vectors allocated have the size N el ∗ ElDof 2 , which
is often a lot larger than the number of non-zeroes in the final stiffness matrix. Its
advantage is that it is probably the simplest way.
The amount of memory saved by going from COO format to CSR format is often
not that significant, but since the employed linear equation system solver accepts
matrices stored in CSR format only, the conversion is well motivated.
Ka = f (4.44)
where K is the global stiffness matrix, a is the displacement vector and f is the
load vector. Since this system contains both known (prescribed) displacements, a ∗ ,
and unknown displacements, ã, the first thing that needs to be done is to partition
the system so that the displacement vector contains unknown displacements only.
Consider the system of Equations in 4.45. The system has ndof equations, with m
52 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
prescribed displacements.
0
a∗1
f˜2
ã2
a∗3 0
K
f˜4
ã4
=
(4.45)
: :
˜
ãndof −1 fndof −1
ãndof f˜ndof
The m known displacements are permuted, so that they appear last in the dis-
placement vector. The rows and columns of K are permuted accordingly, so that
the resulting system takes the form of Equation 4.46, where K has been partitioned
into submatrices.
Kaa K∗ab
ã
f̃
=
(4.46)
Kba K∗bb a∗
f∗ = 0
The last m columns of the first ndof − m equations in K can now be multiplied
with the m known displacements, yielding additional forces to the first ndof −
m equations. The submatrix Kaa is extracted, yielding the following system of
equations,
Ax = b (4.48)
where A is a quadratic, real matrix of size (m*m), and where x and b are vectors
of length m. A and b are both known, whereas x is to be determined. Finding the
inverse of the matrix A, thus obtaining the solution as x = A−1 b, is often hard and
inefficient. The idea of LU factorization is to decompose the matrix A into a lower
triangular matrix L and an upper triangular matrix U, with the property LU = A.
A lower triangular matrix is a matrix in which all the non-zeroes are located below
the main diagonal. Similarly, an upper triangular matrix is a matrix in which all
the non-zeroes are located above the main diagonal. With A = LU, Equation 4.48
now takes the form
LUx = b (4.49)
which with
Ux = y (4.50)
Ly = b (4.51)
If the matrix A is symmetric, i.e A(i,j) = A(j,i), and positive definite, i.e. x T Ax > 0
for any vector x 6= 0, A can be factored as LLT = A, where L is lower triangular.
This factorization is called the Cholesky factorization. From a storing efficiency
viewpoint, the benefit of the Cholesky factorization is apparent, since only one
matrix L needs to be stored, as opposed to two matrices L and U in the LU decom-
position. Some solvers, such as the PARDISO solver from the Intel Math Kernel
Library [11] employed in this project, exploit this. When the matrix has been fac-
tored, i.e. when the matrix L has been determined, the same back- and forward
substitution strategy as for LU is used. The algorithm for performing the Cholesky
factorization can be found in for example [12].
54 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
3 ∗ ∗ ∗ ∗
1 1
2 2
∗ ∗ ∗
L=
2 −2 2 ∗ ∗
(4.53)
1
4
− 14 − 12 1
2
∗
1 −1 −2 −3 1
Even though A is rather sparse, L does not contain any non-zeroes below the
main diagonal. Now, consider the effect of letting x1 and x5 switch places in the
system 4.52. The rows and columns of A are permuted accordingly, i.e. the first
and fifth rows switch places, as well as the first and fifth columns.
4.8. SOLVING THE GLOBAL SYSTEM OF EQUATIONS 55
16 ∗ ∗ ∗ 3 x5 5
1 3
∗ 2
∗ ∗ 2
x2
2
∗ ∗ 12 ∗ 6
x3
=
3
(4.54)
5 3
∗ ∗ ∗ 8 4
x4
4
3 3
3 2
6 4
9 x
1
1
If the new matrix is called Â, then the corresponding Cholesky factorization
yields
4 ∗ ∗ ∗ ∗
∗
√1 ∗ ∗ ∗
2
√
∗ ∗ 2( 3) ∗ ∗
L̂ = (4.55)
√
∗ 10
∗ ∗ 4
∗
√3
3 √
√3 √3
4 2
3 10 4
5
L̂ obviously has a lower level of fill-in than do L, due to the permutation. For
small systems like the one in the example above, the effect on solve time and memory
savings is insignificant, but for larger system such permutations may have a great
effect.
For banded solvers, the desirable property of the matrix structure is a small band-
width, i.e all the non-zeros are located near the main diagonal. The Reverse Cuthill-
McKee algorithm is probably the best renown scheme for this purpose.
When using a general sparse LU- or Cholesky solver, the desirable property is that
56 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
of a low level of fill-in, as discussed in Subsection 4.8.6. In order to obtain this low
fill property, the PARDISO solver employs a scheme called the Nested Dissection
Method [20] that permutes the rows and columns of the stiffness matrix, as well as
the corresponding indices in the right hand vector. As discussed above, this permu-
tation can be interpreted as a reordering of nodes. When using PARDISO, though,
one never notices this permutation. Since its sole purpose is to speed up the solve
procedure, the solution vector is automatically back permuted to correspond to the
original nodal labelling, once the solution is obtained.
The PGMRES solver converged rather quickly when using shell elements. This
solver requires that an (incomplete) LU factorization be made of the matrix, where
the number of fill-ins in the L and U factors have a very significant effect on solve-
time and convergence. In order to reduce the number of fill-ins, a nodal reordering
scheme was tested. This is exactly the same reordering scheme used by the direct
solver, i.e. the nested dissection method. The algorithm is implemented in an ap-
plication suite called METIS, see [20], which was used to reorder the nodes. For
the shell elements, the reordering reduced the solve-time significantly, as well as the
memory use. For the wedge elements though, the iterative solver did not converge
at all, not even with the nodal reordering. This might be due to the higher nodal
connectivity, resulting in a less sparse system matrix. It is possible that convergence
can be obtained by tweaking some input parameters to the ILUT - and PGMRES
routines, but the direct solver was finally used since it does not require any such
tweaking of parameters to obtain speed and stability. It is also much more con-
venient to have the solver do all the steps automatically, from nodal relabelling to
factorization and final solving.
MATLAB also uses a direct method for solving linear systems of equations where
the matrix is symmetric and positive definite.
4.9. VISUALIZATION OF RESULTS 57
As mentioned, OpenGL contains routines for drawing primitives, and one of those
primitives is a 3-node triangle. The triangle can be drawn in 3D, i.e. every node
of the triangle is given an (x, y, z)-coordinate. Every corner is also assigned a color,
and OpenGL will then smooth the nodal colors over the whole triangle as shown
in Figure 4.22. This feature is used when drawing the nodal stresses that were
obtained according to Subsection 4.6.2. The triangular top and bottom surface of
the wedge element has 6 nodes, but there is no such primitive in OpenGL. Instead,
every 6-node triangle is divided into four triangles according to Figure 4.23, and
hence the stresses at the midpoint nodes can be taken into account as well.
Every color in OpenGL is specified as a mixture of three base colors; red, green
and blue (RGB). Every base color enters the mix-color with a value from 0.0 to
1.0, so the color (1.0, 0.0, 0.0) represents red, (0.0, 1.0, 0.0) represents green and
(0.0, 0.0, 1.0) represents blue, [13]. In order to map a certain nodal stress into a
58 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Figure 4.21: Figure indicating which sections of a laminated glass pane can be viewed
in the post-processor.
Figure 4.22: A triangle with the colors red, green and blue assigned to each of the
three corners. OpenGL smoothes the colors over the triangle.
Figure 4.24: The color scale used for mapping stresses to colors.
4.9. VISUALIZATION OF RESULTS 59
certain color, use was taken of the function JET in MATLAB [14]. This function
produces a list of vectors, a colortable, of which each vector represents an RGB
color. The first vector in the list represents blue, the last vector represents red, and
the vector in the middle of the list represents green. All the other vectors are linear
interpolations of these colors, so that a smooth colortable is achieved. An arbitrary
number of vectors can be retrieved by the function JET ; a larger number of vectors
gives a smoother colortable. A colortable comprising 64 colors, i.e. 64 RGB-vectors,
is used in the post-processor. These colors are shown in Figure 4.24.
When the user chooses to view a certain stress component, all the nodal stresses
of this component are read from a text file. The maximum and minimum nodal
stresses, together with the colortable, define the color mapping. A certain nodal
stress S is mapped to its corresponding color by
S + (M ax absolute stress)
N ormalized stress =
2(M ax absolute stress)
where Index is an integer 1 − 64 that indicates which RGB vector in the colortable
that corresponds to the nodal stress S. With this mapping, a zero stress will always
be drawn with green color, which feels intuitive. There is also an option that allows
the user to view the dangerous stresses, i.e. stresses exceeding the maximum allowed
stress that was entered in the GUI. All nodes where the maximum principal stress
exceeds the allowed value are drawn with a red color, whereas all the other nodes
are drawn green.
In order to let the user choose what stress component and section to view, a simple
pop-up menu was created using GLUT. Tools for moving around the scene, i.e. pan,
rotate and zoom, using the mouse are also accessible from this menu, which appears
on a right-click with the mouse. When one of these tools are selected, GLUT mon-
itors the mouse movement. These mouse movements are then mapped into proper
changes to the transformation matrix that determines what to draw on the screen.
Figure 4.25 shows the menu.
Nodal coordinates and displacements are read from text files produced by the For-
tran code. When a section is chosen by the user, only nodes in that section are
drawn. The pop-up menu also allows the user to choose a deformation scaling, so
that the displacements can be exaggerated and the deformed shape of the structure
becomes clear. In Chapter 5 a few examples are shown.
60 CHAPTER 4. DEVELOPMENT AND IMPLEMENTATION OF...
Examples
5.1 General
In this chapter a few examples solved with the program developed in this project,
are shown. The simple post-processor developed in this project, described in Section
4.9, is used for visualizing the results.
5.2 Balustrade
Figures 5.1-5.2 show stresses in a 2 ∗ 1.2m large balustrade, composed of two 8mm
glass panes with a 0.76mm thick intermediate foil of PVB. The material parame-
ters are set according to Equation 2.1. The two bolts are located 200mm from the
right and left edge, respectively, 200mm above the lower edge. The balustrade is
subjected to a line load Q = 800 N/m along the top edge.
Two elements were used in the thickness direction for each of the glass layers, whereas
merely one was used for the PVB foil. Each hole comprises 30 piecewise linear seg-
ments, i.e. 30 vertices were used in the poly-file. The model contains 7230 elements,
and 66030 degrees of freedom.
The maximum principal stresses emerge on the inner free glass surface, from where
the load is applied.
The figure of interest for someone using ClearSight as a design tool would be Fig-
ure 5.2b, where regions with principal stresses exceeding the permissible stress are
drawn in red color.
61
62 CHAPTER 5. EXAMPLES
5.3 Facade
Figure 5.3 shows the maximum principal stresses in a 1.4 ∗ 1.4m large facade, fixed
with four bolts. The facade is composed of two 8mm glass panes with a 0.76mm
thick intermediate foil of PVB. The material parameters are set according to Equa-
tion 2.1. Each bolt is located 50mm from the edges. The entire facade is subjected
to a wind load q = 1000 N/m2 .
As in the balustrade example above, two elements were used in the thickness di-
rection for each of the glass layers, and one for the PVB foil.
The model contains 9230 elements, and 86373 degrees of freedom. The maximum
principal stresses emerge on the outer free glass surface, from where the load is ap-
plied. Figure 5.4a show regions where the permissible stress is exceeded, drawn in
red.
Figure 5.4b shows the maximum principal stresses in a similar facade, where the
bolts have been moved further away from the edges, more specifically 200mm away
from the edges. This model contains 12155 elements, and 110520 degrees of free-
dom. The mesh was generated with the same meshing properties as the former
example; the reason this model contains more elements and degrees of freedom is
that the holes are located further away from the edges, so a larger region is refined.
The maximum principle stresses are considerably smaller, but yet they exceed the
permissible stress 50 M P a.
5.4 Discussion
Since all the nodes inside the area facing the bolt’s rubber ring are locked in the
first computation, the results are marred by some errors. The locked area form a
rigid surface that does not arise in reality. This prevents the maximum stresses from
emerging directly around the hole edges, where they in reality do emerge [1]. See
for example Figure 5.3b.
The bolt is actually a friction joint, and hence friction forces will act over the ring to
different degrees. The method used here, where nodes are locked, yields very high
stress concentrations. A more appropriate method for modelling the bolt fixings,
still using linear-elastic theory, is suggested in Chapter 6. To gain really accurate
results though, non-linear material models are required.
5.4. DISCUSSION 63
Figure 5.1: The left figure shows the maximum principal stresses on the inner free
glass surface. The right figure shows the maximum principal stresses on the inner
glass surface facing the PVB foil.
Figure 5.2: The left figure shows the shear stress component σyz in the PVB foil. In
the right figure, principal stresses exceeding 50M P a on the inner free glass surface
are drawn in red color.
64 CHAPTER 5. EXAMPLES
Figure 5.4: The left figure shows principal stresses exceeding 50M P a drawn in red
color. The right figure shows the maximum principal stresses in a similar facade,
where the bolts have been moved further from the edges.
5.5. SOLVE TIME 65
110
100
90
80
70
60
50
40
30
20
10
6 7 8 9 10 11 12 13
4
x 10
Figure 5.5: The solve time increases quickly with increasing number of DOFs
Solving the global system of equations is by far the most time-consuming proce-
dure. Calculating the element stiffness matrices and evaluating the element stresses
goes relatively quickly.
Detta är en tom sida!
Chapter 6
Concluding Remarks
6.1 General
In this master’s project, a finite element-based program for simulating the behav-
ior of point-fixed laminated glass panes has been developed. In an earlier master’s
thesis [1], 20-node hexagonal elements were used for simulating a few experimen-
tal set-ups concerning bolt-fixed laminated glass. These simulations yielded rather
accurate results. The 15-node wedge elements used in this project converge to the
same solution, but more elements are required.
For large structures the system of equations gets very large. The solve-time grows
super-linearly, which means that doubling the number of DOFs more than doubles
the solve-time. For linear analysis, this is only a minor problem since the solve time
stays at a few minutes. Elements located far away from the bolts have a rather large
top and bottom surface area, which is unadvantageous due to the modest element
thickness. But since the stress gradients are very small at these locations, the error
stays small. The mesh is generated so that the elements near the bolts, where the
stress gradients are high, have small surface areas.
All computational routines written in this project, have been verified to ABAQUS to
ensure correct implementations. The technique used for modelling the bolt-fixings
do not seem to yield accurate results. It is not adequate to lock nodes completely
in order to simulate the behavior of a friction joint. The stresses obtained with the
program are overestimated, due to the node locking. A more appropriate, but still
rather simple, approach for modelling the bolts is proposed in section 6.2. When a
proper technique for modelling the bolts has been established, ClearSight will con-
67
68 CHAPTER 6. CONCLUDING REMARKS
stitute a very powerful tool for designing point-fixed glass balustrades and facades.
There are several things that would improve the performance and the accuracy
of the computations. Some of those would not require too much effort, while others
would require some work. Most of the routines written could and should certainly
be re-used with little or no changes when the tool is further developed.
• The 15-node wedge element is not as accurate as the hexagonal element. The
sole reason the wedge element prevails in this project is due to the fact that
Triangle, yielding triangular elements only, was the only free mesh generator
found. If a free quadrilateral/hexagonal mesh generator emerges, this would be
preferable, provided that similar functions for identifying nodes and elements
by means of boundary markers and element attributes, also be included.
• Further, it could be useful if the tool could handle more complex geometries.
To preserve the user-friendliness, a number of geometry templates could be
implemented so that the user does not have to draw the geometry. A feature
where the user draws the geometry would be easy to implement, but would
also be less user-friendly.
6.2. PROPOSALS FOR FUTURE WORK 69
• Other load cases could perhaps be useful, even though the line loads and the
distributed loads are the governing load cases for dimensioning balustrades
and facades, respectively.
Detta är en tom sida!
Bibliography
[1] Bength C., (2006) Bolt Fixings in Toughened Glass, Division of Structural Me-
chanics, Lund University, Sweden.
[2] Sedlacek, G., (2005) Proposal for the content of new Eurocode on design of glass
structures. Part 1: Basis of design - design of glass panes
[3] Lee P-S., Bathe K-J., (2004) Development of MITC isotropic triangular shell
finite elements
[5] Ottosen N-S., Pettersson H., (1992) Introduction to the Finite Element Method,
Prentice Hall Europe, Great Britain.
[6] Šolı́n P., et al, (2004) Higher-Order Finite Element Methods, Chapman and
Hall/CRC, USA.
[7] Chen D.J. et al, (1996) Interfacial stress estimation using least-square extrapola-
tion and local stress smoothing in laminated composites, Computers Structures
Vol.58, No.4, pp-765-744
[8] Zienkiewicz O.C., Taylor R.L., (1991) The Finite Element Method, Volume 2,
McGraw-Hill, Berkshire, England.
[9] Saad Y., (1994) SPARSKIT: a basic tool kit for sparse matrix computations,
USA.
[10] Saad Y., (2000) Iterative methods for Sparse Linear Systems, Second edition,
USA.
[13] Woo M., et al, (1999) OpenGL Programming Guide, Addison-Wesley, Reading,
Massachusetts, USA.
71
72 BIBLIOGRAPHY
[15] Shewschuk J., Triangle - A Two-Dimensional Quality Mesh Generator and De-
launay Triangulator. http://www.cs.cmu.edu/∼quake/triangle.html [as viewed
2005-11-10].
In the example in Figure 4.13, the top segment is given the boundary marker 555,
which Triangle passes on to the nodes that are created on that segment. Two holes
are created. The starting coordinates for the holes are 0.3, 0.3 and 1.7, 0.3. Two re-
gions, with the starting coordinates 0.31515, 0.31515 and 1.71515, 0.31515 are given
the regional attribute 1. This attribute is passed on to the elements that Triangle
creates in those regions. They are drawn red in Figure 4.14. The poly-file is:
44 2 0 1
1000
2200
3 2 1.5 0
4 0 1.5 0
5 0.3 0.315 0
6 0.308817 0.312135 0
7 0.314266 0.304635 0
:
:
41 1.68531 0.279775 0
73
74 APPENDIX
42 1.67622 0.292275 0
43 1.67622 0.307725 0
44 1.68531 0.320225 0
44 1
1120
2230
3 3 4 555
4410
5560
6670
7780
8890
:
:
42 42 43 0
43 43 44 0
44 44 35 0
2
1 0.3 0.3
2 1.7 0.3
2
1 0.31515 0.31515 1
2 1.71515 0.31515 1
497 2 0 1
1000
2200
3 2 1.5 555
4 0 1.5 555
A. POLY-FILE FOR THE EXAMPLE IN SUBSECTION 4.4.3 75
5 0.29999999999999999 0.315 0
6 0.30881700000000001 0.312135 0
7 0.31426599999999999 0.30463499999999999 0
8 0.31426599999999999 0.29536499999999999 0
:
:
491 0.5 1.5 555
492 0.28879689868563829 1.3269770123864146 0
493 0.28879689868563829 1.1394770123864146 0
494 0 1.3125 0
495 1.8499999999999963 0.9316937444655472 0
496 1.5 1.5 555
497 2 0.9375 0
228 6 1
1 89 108 99 136 137 135 0
2 22 54 21 139 140 138 0
3 22 11 12 142 143 141 1
4 11 22 21 140 144 141 1
5 91 58 88 146 147 145 0
6 22 12 13 148 149 143 1
7 21 10 11 151 144 150 1
8 70 24 63 153 154 152 0
:
:
226 3 125 132 441 349 496 0
227 120 46 133 497 495 414 0
228 131 134 123 407 474 493 0