MITOCW - MITRES2 - 002s10linear - Lec05 - 300k-mp4: Professor
MITOCW - MITRES2 - 002s10linear - Lec05 - 300k-mp4: Professor
The following content is provided under a Creative Commons license. Your support
will help MIT OpenCourseWare continue to offer high-quality educational resources
for free. To make a donation or view additional materials from hundreds of MIT
courses, visit MIT OpenCourseWare at MIT.edu.
PROFESSOR:
Ladies and gentlemen, welcome to lecture number five. In the previous lectures we
talked about the formulation of the finite element method, and we derived already
some element matrices. I want to continue that discussion in the next lecture.
However, now I would like to spend some time with you and discuss with you the
implementation of the finite element method. I would like to present to you some
important aspect regarding the implementation of the procedures that we talked
about already.
We derived the equilibrium equations KU equals R in the earlier lectures, where R,
of course, contains various contributions due to body load, surface load, and so on.
And we particularly pointed out that that the total structural stiffness matrix is
obtained by summing the element stiffness matrices, as schematically shown here.
This we refer to as the direct stiffness procedure, and that direct stiffness procedure
is also applicable to the load contributions, where we sum the element load
contribution into a total nodal point load vector RB, and similarly for RS and so on,
which then together make up the total load vector R.
We pointed out that the stiffness matrix of a typical element M is obtained via this
relationship here. Notice in this integer, BM is the strain displacement
transformation matrix, CM is the stress-strain law, and here we have Bm
transposed. We're integrating this part over the total volume of the element. The RB
vector for element M was written as shown here, where FB are the body loads per
unit volume into the coordinate directions considered. Of course, these FB loads are
a function of the coordinate is the element, and HM is the displacement interpolation
matrix. We are once again integrating this product over the total volume of the
element.
In both of these equations, we have been dealing with the HM matrix and the BM
matrix. Of course, the BM matrix, as we discussed, is obtained from the HM matrix
by appropriate differentiations and so on. Now we pointed out that if we had N
number of degrees of freedom in the total structure, then our HM matrix is of order
k by N. Capital N, the same N that we're talking about here. k is equal to 1, 2, or 3,
depending on whether we are dealing with a 1, 2, or 3-dimensional analysis. The
BM matrix is of order l by N, where l is equal to the number of strain components
that we are including in the element. In a 3-dimensional element, for example, we
would have l being equal to 6, because there are 6 strain components.
It's important that we talk here about capital N being equal to the total number of
degrees of freedom. This way, this KM matrix here is a matrix of order capital N by
capital N. In other words, this is an N-by-N matrix, and this RB vector here is a
vector of length N. It's has N entries this way, and of course only one column.
Having here an N-by-N matrix and an N-by-1 vector here, we can directly assemble
the element contributions into the global structural matrices and vectors. We can do
this because this matrix here has the same order at that matrix here, or each of the
element matrices has the same order as the total structure matrix.
Well, in practice, this is, of course, not efficient. We are dealing with a very large
system. The capital N that we're talking about here might be 2,000, 3,000, 10,000,
and it is not efficient to calculate here in a capital N-by-N matrix for each element,
because we recognized already earlier that a large number of rows and columns
are simply zeros in this matrix here. In fact, only those rows and columns contain
non-zero contributions or non-zero elements which correspond to the element
degrees of freedom.
In practice, therefore, we calculate compacted element matrices. We are calculating
for element M or for typical element M matrix o order little n-by-n. Notice that I left
out the superscript here. And our RV vector would be an n-by-1, lower case n,
where n is now the number of element degrees of freedom.
The H matrix that we're using and the B matrix that we're using now is a k-by-little n,
there is much repetitiveness in many finite element analyses, and we want to take
advantage of that repetitiveness, therefore generate information data whenever is
possible.
Then once we had the nodal point in element information read into the computer
program, we calculate the element stiffness matrices. The mass and damping
matrices, if they are applicable, and equivalent node upon loads. Once we
calculated the element stiffness matrices, we can assemble math and damping
matrices, of course. Also, we can assemble all of these contributions here into the
global structure matrices, K, M, C, and R. And I would like to discuss this process in
detail with you.
Before going into the details, let me mention that the procedures which I will be
discussing this you are really the procedures that are used in the computer program
Sab and ADINA. But very similar procedures are also used in other computer
programs.
The first important aspect that I like to mention to you is that in a finite element
analysis, we have to define what degrees of freedom we want to admit at the nodal
point. In other words, if we have a finite element mesh such as this one here, I will
be talking about that mesh in more detail later. Then if this is a plane stress
analysis, in other words, here we have a cantilever plate, say, subjected to a load
there, if it's a plane stress analysis, I only want to admit certain degrees of freedom
at each of these nodes. We have nine nodes here. For example, at these nodes,
there shall be no degrees of freedom admitted, or else I want to knock out all of the
degrees of freedom to simulate the boundary condition along here, and at these
degrees of freedom here, away from the edge, I have two degrees of freedom to
correspond to a plane stress condition.
Well, if I want to do that for this analysis and similarly, of course, I proceed in other
analyses, then I want to deal with each nodal point in turn. And here I have a typical
nodal point i, say, at which we can have altogether a certain number of degrees of
freedom, the maximum that I might want to admit in a computer program. Now in
7, 8, 9 nodal points-- that with these 9 nodal points, we have defined 4 elements-element 1, 2, 3, 4-- that element 1 and 2 have the same material properties, and
element 3 and 4 have the same material properties. Notice the Young's modulus is
here 2 times 10 to the sixth, whereas it is 1 times 10 to the sixth for element 1 and
2. Therefore, we will have to define two sets of material properties-- one set for
these elements, and one set for these elements.
We also notice that since we have 9 nodal points altogether, we could have a
maximum of 18 degrees of freedom in a plane stress analysis, because there are
two degrees of freedom in a plane stress analysis for each nodal point. However,
these 18, of course, represent the absolute maximum, which in a static analysis, we
could not use, because we would have to also constrain the element mesh
sufficiently to obtain a solution, to have a stable structure, in other words, while the
constraints here are that at these nodal points, that all displacement shall be equal
to 0.
Now let us look at our ID array, the ID array which I mentioned right here. We will
have, in other words, 9 columns here, because we have 9 nodal points, and we
have our 6 rows here, because we have a maximum of 6 degrees of freedom. An
active degree of freedom we denote by a 0 in this matrix. A non-active degree of
freedom we denote by 1 in this ID matrix.
We notice the following. If I put here the number of nodal points along, we have 1,
2, 3, 4, 5, 6, 7, 8, 9. Of course, the degrees of freedom here are U, V, W, theta X,
theta Y, theta Z.
Now, notice that what we are saying is that only for nodal points 4, 5, 6, 7, 8, and 9,
we have these as active degrees of freedom. In other words, At nodal point 4, 5, 6,
7, 8, 9, we have active degrees of freedom. These will be active degrees of
freedom. And let me finish these here too on this side. So we have these as active
degrees of freedom.
These degrees of freedom and on this side are interactive, because their constraint.
They are no displacement. Of course, stiffness is coming into these degrees of
freedom through, yes. So we could have made these active degrees of freedom.
However, in addition, we also know that the displacements are 0 there, so we make
them inactive on that basis.
The result, then, is that we have to read into the ID array as shown here. This is the
typical reading that you would use in the ADINA computer program. Once in all of
those entries here, and zeros there. Now the program knows that corresponding to
these zeros here, we will have to set up element equations. In other words, actually,
we have to set up for each zero one equation, one global degree of freedom. And
the program that goes through this process as follows. It searches through-- let me
go once more back-- through these elements of the ID matrix product that you have
been feeding into the program. It searches through it, and replaces each one by a
zero, going down column-wise, and each zero by a number. It starts with 1 and
goes on consecutively to the maximum number of zeros that it encounters.
The final result, then, is this one. Maybe I can just put it on top, only to signify here
that we had all of these now zeros which we are ones before, and some numbers in
this corner here where we had zeros before.
Let me take the bottom view graph out, and so now we see what has happened. We
have 0s everywhere here and equation numbers up here, which have been
generated by going through the original columns of the ID array from top to bottom,
and replacing the zeros by numbers-- 1, 2-- these were all ones, we put zeros here- 3, 4-- put zeros here-- 5, 6-- put zeros here-- et cetera.
Now, these are the degrees of freedom that the structure will actually have, and
they are defined because stiffness is coming into each of these degrees of freedom
from the plane stress element, and we know them to be non-zero. In other words, if
we look at our final element idealization again, we find that these vectors here are
active degrees of freedom, which I pointed out earlier. In fact, this is here degree of
freedom 1, this is degree of freedom 2, which is at nodal point 4, and here we have
degree of freedom 3, and then 4, at nodal point 5. And those entries are just those
here. At nodal point 4, remember nodal points along here. So this is nodal point 4.
We have the first and second degree of freedom of the structural model. At nodal
point 5, we have the third and fourth degree of freedom of the total structural model.
Et cetera.
Well, this is an important aspect. Let us now go on to some further aspects of the
analyses. We will use this later on, once again, when we set up the connectivity
arrays of the element.
Here is our finite element idealization, once again. And the next step now is to read
in also the coordinates of all the elements and the temperatures at the nodal points.
Now with this coordinate system, x, y, and z, as shown here, the coordinate of all of
these nodal points can be read indirectly. You can read them up. if you know the
length from here to there, being 60 centimeters and being from here to there 40
centimeters, surely all the coordinates can be defined. And knowing that the
temperature is given here at 70 degrees Celsius and 100 degrees Celsius there,
and there's a linear variation from top to bottom in temperature, we directly also
define the temperature array, as shown here. These are the temperatures at nodal
point 1 to 9, x, y, z coordinates at nodal point 1 to 9.
Of course, this is input. You have to input this to the computer program, just the
same way as you have to input to the computer program the ID array. But then the
computer program figures out what coordinates of these arrays pertain to the
specific elements. And that is done in the following way. Once again, here is our
element idealization. Now we have read in the fact that we want to have this as the
first 2 degrees of freedom, then this degree of freedom. That we have already all
established, that we have these degrees of freedom in the finite element mesh. The
program knows that already. That it does know via the reading of the information in
the ID array. We also have all the coordinates of the nodal points, and we also have
the temperatures of all the nodal points. What we still have to now read in is how an
element is connected to the various nodal points given in the structure. And that is
the next important reading.
Here for element 1, we know that the node numbers are 5, 2, 1, and 4, and the
material property is number 1. Let's go back once more. For element 1, that is, this
element here, I want to use this material property set, and I call that property set
number 1. Property set number 1, also, for element 2. But property set number 2 for
elements 3 and for element 4, because these element properties are different from
these.
Well, so element one has nodal points-- I use the following convention-- 5, 2, 1, 4. I
go counterclockwise around. So locally, I'm thinking of a coordinate system lying in
the elements, such as shown here. And this one here being in the positive quadrant
is my first nodal point that I assign to the element. This is, therefore, the local nodal
point 1. Let's put another little picture here. This is a local nodal point 1. That's local
nodal point 2. That's local nodal point 3. That's local nodal point 4 for any one of
these elements. The local nodal point 1 corresponds to the global nodal point 5. 2
corresponds to 2. 3 here corresponds to 1 there, 4 here corresponds to 4 there. I
say, therefore, that the node numbers of the element are 5, 2, 1, 4.
The element number 2, then, with this convention that I'm using, has nodal point 6,
3, 2, 5. Well, let's look here. We have here 6, 3, 2, 5. Also properties at 1.
Let's go on to element number 3. Here with this convention, once again, we have 8,
5, 4, 7. And now, however, the material property set number 2. Et cetera.
Now, once the program knows these nodal point numbers, it can figure out a
connectivity array. And that is done using the ID array that the program has already
established. It's being done in the following way. Remember that, once again, nodal
point 1, 2, 3, 4, 5, 6, 7, 8, and 9 correspond to these columns? Now, we know from
this information here that element 1 couples into nodal point 5, 2, 1, 4. Let's keep
that in mind, now, 5, 2, 1, 4, and circle here 5, 2, 1, and 4, where this one here is
the first local nodal point, this is the second local nodal point, this is the third local
nodal point, and that is the fourth local nodal point. That's important.
Well, if we look at that information, then, recognizing that the local nodal point 1
corresponds to the global nodal point 5, we have to use these two equation
numbers corresponding to the first nodal points. Let's put a little picture up here.
You see what I'm saying here is the following. If this is local nodal point 1, that's 2,
that's 3, and that's 4, and if I know that this local nodal point with degrees of
freedom, let's call them little u and little v, corresponds really to the global point 5
with degrees of freedom 3 and 4, then this u must correspond to 3 here, and that v
must correspond to that 4 here. In other words, our connectivity array which we will
be using is established as follows. For our compact matrix, we have 8 rows and
columns, and for our actual matrix that we want to add into the structure matrix, we
notice that what we want to do is take the first row and column here, and add it into
the third row and column of the structure matrix.
The first one here, u here, corresponds to 3 here. The second one here, which is
the v, corresponds to the 4 here. In other words, the first degree of freedom of the
element corresponds to the third in the structure. The second degree of freedom of
the element corresponds to the fourth in the structure. And that is shown right here.
The first one corresponds to the third in the structure. The second one in the
compact element stiffness matrix corresponds to the fourth degree of freedom in
the structure.
Now if we go onto the second local nodal point, we see zeros here, and these zeros
go directly into the connectivity array. The third one has also zeros here, and the
fourth one has 1 and 2. So our connectivity array, then, proceeding in the same
way, is shown as given here. These are the degrees of freedom at the first nodal
point, this first local nodal point. These are the degrees of freedom at the second
local nodal point. These are the degrees of freedom at the third local nodal point,
and these are the degrees of freedom at the fourth local nodal point.
In other words, what I'm saying here really is the following. You see this here is the
third degree of freedom in the structure. This is the fourth degree of freedom in the
structure. There is no degree of freedom here because we have a support there.
That is that zero and that zero. There is no degree of freedom here because we
have a support here. 0, 0. At this node, we are talking about the first degree of
freedom here and the second degree of freedom here of this structure, and that is
given here. So if I have established the 8-by-8 stiffness matrix of the element, I can
10
directly use that 8-by-8 stiffness matrix with this connectivity array, and assemble
the appropriate contributions from that 8-by-8 matrix into the global structure
stiffness matrix.
The same process that is applied to all of the other elements-- let's look at one
more element here. And element 2, as we pointed out earlier, has nodal point 6, 3,
2, 5. Well, what we then have to do is look at our ID array. 6, 3, 2, 5. And what we
are seeing immediately is that we have a 5, 6 here and a 3, 4 here. So the first two
entries in the element array should be 5, 6, and the last two entries should be 3, 4,
because we have all these zeros there. And indeed, if we look at our LM vector
here, that's what we obtain.
Similarly, we proceed for the other elements. This is the connectivity array for
element 2, for element 3, and for element 4. We can use that now to assemble the
element stiffness matrices into the global structural stiffness matrix. Of course, the
program figures these out automatically from the ID array and from you having put
into the program the nodal points of each element.
Let us look now at how do we actually deal with the stiffness matrix? Well, if we look
at a typical stiffness matrix-- this might be a typical one here-- we have this pattern.
Of course the matrix is symmetric, and what we have are some non-zero elements
clustered to the diagonal, and some 0 elements out there.
It is convenient at this point to define a half bandwidth of the stiffness matrix. That
half bandwidth is defined in the following way. We ignore, first of all, the diagonal
element, and then we identify the furthest off diagonal element from that diagonal
element. The furthest one from the diagonal element defines the half bandwidth of
the matrix. mK is the half bandwidth of the matrix. In some literature, we also refer
to the half bandwidth of the matrix as mK plus 1. But then remember that the total
bandwidth off the matrix is simply 2 mK plus 1, because the diagonal element only
occurs once.
Another way of looking at the definition of the half bandwidth is as follows. If we go
from the diagonal up in each column, we will come to an element above which only
11
zeros are. Like in this case, for example, there are only zeros above K 4, 5. And we
do the same for each all of the columns, and we define the last non-zero element,
this one here, above which all elements are zero, as the skyline. So the skyline is
defined as shown here. This is the skyline of the matrix.
The half bandwidth, then, is equal to the maximum column height minus 1. In this
particular case, you see the maximum column height is 1, 2, 3, 4, which we have
here also-- 1, 2, 3, 4. We subtract 1 and we get mK equal to 3. So this is the pattern
that we observe in an actual finite element analysis. What we would like to achieve
is that the half bandwidth is as small as possible, because then we know that our
numerical operations is a solution of KU equals R are small.
Well, the actual storage that we're using, however, is a little different. Namely, it is
effective to store the total information as a one-dimensional array. And the storage,
then, is carried out as follows. Notice that in a one-dimensional array, I am using
now the following convention. This here is the first element in the one-dimensional
array. The second element is this k22, which is a2. The third element is k12. The
fourth element is k33, and so on. In other words, the A vector here, being a onedimensional vector, stores all of the information here in a one-dimensional order,
where we simply go from the diagonal upwards to store all of the elements. So a6 is
the diagonal element that is the fourth column here, a6 corresponds to k44, and a7
then stores this one, a8 stores that one, a9 stores that one.
Notice that we do carry along these zeros. And the reason for it is that when we do
perform our solution of the equation, in general, but not always, in general, this zero
becomes a non-zero element, and therefore it is effective to just carry it along,
because we will have to later on store some non-zero information in it.
Notice that this is the total array, and we have altogether, in this particular case, 21
entries here, in addition to storing the stiffness matrix in this one-dimensional array.
However, we also have to have an identification array that tells us which elements in
this one-dimensional array are diagonal elements. Of course, here from this picture,
we see immediately that these are the diagonal elements of the stiffness matrix.
12
13
20,000, and these might also be slightly less than 20,000. But we have to be able to
keep two blocks in core, and that is our criteria to determine the block size.
Of course, the computer program, once again, does all that automatically. It just
knows how much storage there is available, because you have a specified amount
of storage that is available, and then it allocates the appropriate amount for each
block and calculates the block size, the column heights in each block, and so on.
Once again, I'm showing here zero elements in a column. When we actually
decompose the matrix as we do in Gauss elimination into an LDA transport form-- I
will be discussing that later-- we fill up these zero elements in general, and that is
the reason why we carry them along in the solution phase.
Let me make a few remarks on the bandwidth, the use of an effective bandwidth.
Here we have a finite element model of a cantilever, a plane stress finite element
model of a cantilever. At each node, we have two degrees of freedom, just as in this
earlier model that we considered. Notice these are now 8-node elements,
isoparametric elements that I will be discussing later. We have constraint, of course,
at this end, all degrees of freedom, because the cantilever is 6 there. In this
particular layout, notice we have used the following element or nodal point
numbering. 1, 2, 3, 4, 5, 6 up to 13, then from 14 to 20, then from 21 to 33. Well,
this then means that our bandwidth here, or half-bandwidth, I should rather say, and
now let's simply include the diagonal. It doesn't make much difference. We are
talking, in practical analysis, about a bandwidth, or half bandwidth, of 300. So
having 300 or 301, really, in a practical analysis, makes very little difference. Our
half bandwidth, including the diagonal element here, would be 46. How would we
obtain that? Well, if we look at the coupling between nodal points that is due to the
element stiffnesses, we recognize that for a typical element, let's look at this
element, we have a maximum nodal 25 here, a minimum nodal point 3. Now, 25
minus 3 is equal to 22.
However, we now have to add 1 on because all of the diagonal part, and that
together, then, gives 23. This 1 I'm adding on because of the diagonal element--
14
and if you where to look at the stiffness matrix in its assembled form-- of this
element in its assembled form, you would see that this part here is to be added on,
because you had also the diagonal contribution.
So the maximum difference between the nodal points plus 1 gives us 23. Now, that
23 is a maximum if 1 degree of freedom were at 1 nodal point. However, we take
that 23 and we have to multiply it by 2, because we have 2 degrees of freedom per
nodal point, and that then gives us 46. So the half bandwidth, including the
diagonal, is 46.
Well, that is a very large bandwidth, in this particular case. And let us now try to
rearrange the nodal point numbering to come up with a smaller bandwidth. And the
better nodal point numbering here is shown in layout. 1, 2, 3, 4, 5, 6, 7, 8, and so
on, down this way. If we now look at the same element again, the maximum
difference in nodal points is 7. We add 1 again to get 8, and we have 2 degrees of
freedom per nodal point. That gives us a half bandwidth of 16. And therefore, we
have reduced the bandwidth by almost a factor of 3.
Now this means that the solution effort will go down, in the equation solution phase,
will go down by a factor of 9. Because he would see that our solution effort is
proportional to the half bandwidth squared. So if there's a factor of 3 here, the
solution will actually be reduced by a factor of 9. Therefore, it is very important to
use minimum bandwidth in the finite element mesh, or rather number the nodal
point in such a way as to obtain a minimum half bandwidth.
If we actually deal with column solvers, we will see that in some cases we quite don't
want to have the minimum bandwidth because we have a column solver, about but
these are details that we will be addressing in a little bit. In general, we want to have
really a minimum bandwidth.
Let us look now at the overall solution phase once more. This is a solution phase in
the computer program STAP, which is in the textbook that you are using in this
course. You might look at the description of this computer program in more detail,
but the overall solution set is as shown here. We start the program, and we have to
15
read a nodal point data, which involves coordinates, boundary conditions, and we
established the equation numbers in an ID array. I'll discuss that with you. We then
would calculate and store load vectors for our load cases. We write these on tape. If
we have a typical analysis, three, four load cases, we calculate all of these load
vectors and store them on tape. Then we continue to read, generate, and store
element data the way I've been discussing this with you, and in the actual analysis,
we loop over element groups.
By that I mean that the total elements are subdivided into element groups. This is
an effective concept because in an actual structural analysis, we deal with plane
stress elements, beam elements, truss elements, three-dimensional shell elements,
and so on. And it is effective to just group all of these elements together into specific
groups. In other words, put the shell elements together in one group, the beam
elements together in another group, and so on. In fact, this is a very effective way of
proceeding also in non-linear analysis, in a more complicated analysis. If you're
familiar a little bit with ADINA, what we do there is that we are grouping elements
not just together according to the kinds of kinematics that they're representing, but
also the material models they are containing, the kind of descriptions we want to
use for non-linearities, et cetera.
Well, having then generated and stored the element data, we can read it and
calculate the element stiffness matrices, and assemble these in a global structural
stiffness matrix. Here we loop over all element groups once again. And this means
generally we are storing this element data on tape, and then we are reading it and
going over all of the element group data, as shown here.
Then next we can factorize the stiffness matrix. This is a basic step in the Gauss
elimination procedure, as I will be discussing with you later. And now we loop over
the load vectors for each load case, read the load vector, and calculate the nodal
point displacement. We then read the element group data and calculate the element
stresses. Print out the element stresses, and if there is another load case to be
considered, we go back from here into there.
16
So the LDA transport factorization of the stiffness matrix which was outside this loop
is only done once. A forward reduction and back substitution of the load vector is
done for each load case, as shown here. I will be discussing those aspects in more
detail later.
Let us now look at some typical effective elements. We have been discussing so far
some simple elements, just to expose you to the basic concepts that are being
used. And for that reason, we discussed some very simple elements in the earlier
lectures. What I want to do now in the next lectures is to discuss this you modern,
effective isoparametric elements. These are also the elements that we are using in
the ADINA computer program.
Here we have a one-dimensional truss element which can be used as a cable
element. As a simplest element, it would be 2-noded element. We would only assign
this node and that node. And then it would be, of course, a simple 2-noded truss, a
very common element, 2-node truss.
However, as shown here, we can also have a third note, which is this one. And we
can have a fourth note. In other words, what we will be dealing with, really, are
variable number node elements, which have two nodes, three nodes, or four nodes
for the one-dimensional truss element. A ring element is obtained from the truss
element in this very simple way. It's really an axis-symmetric truss, you might call it
an axis-symmetric truss, with only one degree of freedom. It has only stiffness in its
circumferential direction.
So this is a truss element. And the basic concept that we are using is that we can
have a variable number of nodes. Similarly for this element, this is a plane stress,
plane strain, or axis-symmetric element. Notice that the only displacement that we
are talking about in this particular case are two displacements, u and v, or in ADINA,
we call this the V and W degree of freedom, corresponding to the y- and z-axis. The
z-axis is, in an axis-symmetric case, the axis of revolution. And with this degree of
freedom, the kinematics of the element are defined when we talk about a specific
number of nodes. And then the element can be used for plane stress, plane strain,
17
18
19
In this lecture, then, what I wanted to discuss with you were some basic concepts
regarding the formulation of the finite element methods, in particular regarding the
implementation of the finite element method. In other words, how do we actually
implement what we formulated in the earlier lectures? Some of these concepts are
very important concepts when it comes to actual practical implementation of the
finite element method, particularly the one that I discussed regarding the
connectivity arrays that are formulated, and so on.
This is all I wanted to say. Thank you for your attention.
20