Assembling global stiffness matrix

40 visualizaciones (últimos 30 días)
wasabiwoman
wasabiwoman el 19 de Jul. de 2019
Respondida: Anil Makka el 21 de Mzo. de 2021
I'm trying to assemble the global matrix, however, it gives me a few numbers at the end and the rest are zeros. There should be values along the diagonal of the matrix is what I'm trying to solve for. I've also attached my code.
%% Assembly
BIGK = zeros(NNODE*NDFPN,NNODE*NDFPN);
for I=1:NNPE % 4 nodes
for J=1:NNPE % 4 nodes
LRR = (I-1)*NDFPN; % 2
LRC = (J-1)*NDFPN;
GRR = (NODES(JE,I)-1)*NDFPN;
GRC = (NODES(JE,J)-1)*NDFPN;
for K=1:NDFPN
for L=1:NDFPN
BIGK(GRR+K,GRC+L) = BIGK(GRR+K,GRC+L)+EK(LRR+K,LRC+L);
end
end
end
end
  3 comentarios
wasabiwoman
wasabiwoman el 19 de Jul. de 2019
The values of the diagonal elements are what I am trying to calculate.
dpb
dpb el 19 de Jul. de 2019
So, what's the basic formula for them from first principles, NOT from non-working code? How are we to know where it went wrong without a specification of what is right?

Iniciar sesión para comentar.

Respuestas (2)

infinity
infinity el 19 de Jul. de 2019
Hello,
I have taken a look in your code, I relize that in each element there are four nodes and each node has two degree of freedom. Therefore, the element matrix of each element are 8x8.
To assemble element matrix to your global matrix, you should loop for each elment and just assemble its matrix to the global matrix.
The problem is that you have to find the approriate index to assembe emement matrix of each element. To do this, you can find the index according to the node of each element. For example, in your code the first element is
NODES(1,:)
ans =
1 22 23 2
therefore, the index of this element in the global matrix will be
[2*NODES(1,:)-1 2*NODES(1,:)]
ans =
1 43 45 3 2 44 46 4
when you have found this index, you just assembe to global matrix by
BIGK(INDEX,INDEX) = BIGK(INDEX,INDEX) + EK;
Summary, you could change your code to
%% Assembly
BIGK = zeros(NNODE*NDFPN,NNODE*NDFPN);
% for I=1:NNPE % 4 nodes
% for J=1:NNPE % 4 nodes
% LRR = (I-1)*NDFPN; % 2
% LRC = (J-1)*NDFPN;
% GRR = (NODES(JE,I)-1)*NDFPN;
% GRC = (NODES(JE,J)-1)*NDFPN;
% for K=1:NDFPN
% for L=1:NDFPN
% BIGK(GRR+K,GRC+L) = BIGK(GRR+K,GRC+L)+EK(LRR+K,LRC+L);
% end
% end
% end
% end
for I = 1:NELE
INDEX = [NODES(I,:)*2-1 NODES(I,:)*2];
BIGK(INDEX,INDEX) = BIGK(INDEX,INDEX) + EK;
end
Aslo, at the end of your code in Problem_2.m, you should change
%% Displacement
disp = (BIGK)/force;
to
%% Displacement
disp = (BIGK)\force;
since there is a different between / and \. You can refer more detail of "\" by this link
https://www.mathworks.com/help/matlab/ref/mldivide.html
  2 comentarios
wasabiwoman
wasabiwoman el 20 de Jul. de 2019
Thank you! That was very illuminating and I appreciate it! However, it gives me a warning:
Warning: Matrix is close to singular or badly scaled. Results may be
inaccurate. RCOND = 3.597566e-20.
> In Problem_2 (line 234)
Where line 234 is
disp = (BIGK)\force;
And I do believe the displacement results are on the right track, but not quite correct.
infinity
infinity el 22 de Jul. de 2019
Hello,
This warning might come from the global matrix, which may be not invertible.
There are many possibilities of this behaviour. It could be boundary condition, also from the number of Gauss, and element stiffness matrix. To find out why do you have this behaviour, you could double check the code and the formulation.
I also can suggest you to increase number of elements to see does it increase the accuracy of the displacement.

Iniciar sesión para comentar.


Anil Makka
Anil Makka el 21 de Mzo. de 2021
k1=[1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6]; %stiffness matrix 1(local)
k2=[1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6;1 2 3 4 5 6]; %stiffness matrix 2(local)
how to create the global matrix using these two stiffness matrix

Categorías

Más información sobre Mathematics en Help Center y File Exchange.

Productos


Versión

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by