Computational Science Asked by Xu Hui on July 25, 2020
In solid fem, we often solve $$mathbf{Ku}=mathbf{p}$$
where $mathbf{K}$ is global stiffness matrix, $mathbf{u}$ is displacement, $mathbf{p}$ is global load vector.
If displacement not be constrained, equation above can not be solved, because the system can have rigid body motion.
In 2D case, the rigid body motion is the translation along $x$ axis, the translation along $y$ axis and the rotation. In order to let problem be solved, at least 3 constrains must be applied.
In 3D case, the rigid body motion is the translation along $x,y,z$ axis, and rotation along $x,y,z$ axis. In order to let problem be solved, at least 6 constrains must be applied.
In matlab, we can constrain $i$ dof to zero by
K(i,:)=0;
K(:,i)=0;
K(i,i)=1;
P(i)=0;
If now, I obtain a matrix $mathbf{K}$, it may constrained, or not constrained, or not fully constrained. How can I determine which constrain I need to apply to the system to make problem solved? Or how can I dertermine which rigid body constrain I should apply to the system?
For example: In 2D case, suppose the $mathbf{K}$ is constrained $x,y$ translation, how can I find that I should constrain the rotation?
I know calculate the rank of matrix can used to determine if the problem can be solved, but it can not be used to determine which kind of constrain it lack.
I am using C++, I am using pardiso, eigen to solve the linear system. If the method can be easy implement will be great.
Any suggestion will be great help. Thanks for your time.
You already know that at least theoretically, unconstrained matrices have a null space and consequently eigenvalues that are equal to zero. But, in practice, this is a meaningless condition because it can not be checked in an efficient way for large problems.
The question you specifically ask is how you can detect whether constraints have been applied, and the previous paragraph is intended to say "you can't in practice". But that is generally also not a very interesting question: You will have gotten the matrix from some piece of code, and so there must also be a way to assess what that code does: Does it apply constraints or not? As a consequence, the solution to your conundrum is not to try and recover the information you seek by looking at the matrix, but instead by asking the code that created the matrix whether it has applied constraints or not.
Correct answer by Wolfgang Bangerth on July 25, 2020
As you said,
"If displacement not be constrained, equation above can not be solved, because the system can have rigid body motion"
So you should try to apply constraints that will not allow the body to move i.e. translate or rotate. In 2D there are 2 translations (along x and y axis) and one rotation (along z axis) to be killed. In 3D there are 3 translations(along x,y,z axes) and 3 rotations (about x,y,z axes) to be killed. You should apply boundary conditions such that there translations and rotations are not possible.
Another way to check is to compute the eigenvalues and see if there are any zero eigenvalues.
Answered by Nachiket Gokhale on July 25, 2020
How can I determine which constrain I need to apply to the system to make problem solved? Or how can I determine which rigid body constrain I should apply to the system?
The constraints are given by the boundary conditions of your problem, so you should know them before you have a numerical method as the FEM. In that sense, that is more a physics problem than a mathematical one because having different boundary conditions leads to different behaviors.
I think that the placement of the constraints is more related to the modeling of your system, thus it is more related to the original boundary value problem than the finite element model. Arbitrarily constrained some degrees of freedom might lead you to have a system with a behavior completely different to what is expected, so I don't think that it is a good approach.
Let us consider an example, a block with a uniform load on top:
In one case, it is constrained at one end (a cantilever beam). In this case the free-end is the place with maximum displacement.
In the other case, it is constrained at both ends. In this case the maximum displacement happens in the middle.
You can see the magnitude of the displacement for these two cases in the following figure, dark purple means that it is constrained.
Answered by nicoguaro on July 25, 2020
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP