fourier
2007-03-12, 03:48
Hello all!
Currently I'm trying to solve nonlinear system of equations, obtained from
finite-element formulation of large-strain problem of truly incompressible materials. Suppose this system to be [TeX:08764d7d61]\vec{F}(\vec{q})=\vec{0}[/TeX:08764d7d61],
there [TeX:08764d7d61]\vec{F}(\vec{q})=K(\vec{q})-\vec{P}[/TeX:08764d7d61]. [TeX:08764d7d61]K(\vec{q})[/TeX:08764d7d61] is the global stiffnes matrix after applying boundary conditions in form of stresses, [TeX:08764d7d61]\vec{P}[/TeX:08764d7d61] is the global vector of loads, [TeX:08764d7d61]\vec{q}[/TeX:08764d7d61] is the solution vector of nodal displacements and hydrostatic pressures in nodes.
For large strains global stiffness matrix depends on solution vector, so it makes the problem nonlinear. For small strains of course global stiffness matrix doesn't depends on solution, and this problem already solved in my program. So I have a linear solution for small strains.
The problem is how to solve nonlinear system.
Here are some possibilities to solve such system, which I already tried to implement:
Newton method. For this method I should obtain 1st iteration
somewhere,which should be close to real solution, and iterate using
Newton's method. But where can I find such iteration? Linear solution
should be quite different from real nonlinear solution on large strains,
for example, around 50%.
Incremental load technique. The general idea for this method taken
from Oden's book for nonlinear FEA. Suppose loads depends on real
parameter [TeX:08764d7d61]p[/TeX:08764d7d61], so our system looks like
[TeX:08764d7d61]\vec{F}(\vec{q},p)=\vec{0}[/TeX:08764d7d61]. So if I add some small variation
for load parameter: [TeX:08764d7d61]p+\delta p[/TeX:08764d7d61], this should cause a small
variation of solution vector [TeX:08764d7d61]\vec{q}+\delta\vec{q}[/TeX:08764d7d61], and the
system also becomes
[TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)=\vec{0}[/TeX:08764d7d61]
So if I suppose that [TeX:08764d7d61]\vec{F}[/TeX:08764d7d61] is quite smooth by argument
[TeX:08764d7d61]p[/TeX:08764d7d61], I can use Teylor series for [TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)[/TeX:08764d7d61]:
[TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)=\vec{F}(\vec{q},p)+\frac{d\vec{F}(\vec{q},p)}{d \vec{q}}\delta\vec{q}+\frac{d\vec{F}(\vec{q},p)}{d p}\delta p+...[/TeX:08764d7d61],
and further:
[TeX:08764d7d61]\delta\vec{q}=J^{-1}(\vec{q},p)\frac{d\vec{F}(\vec{q},p)}{dp}\delta p[/TeX:08764d7d61]
where [TeX:08764d7d61]J^{-1}[/TeX:08764d7d61] is the inverse Jacobi matrix for system.
So this lead us to iterative technique:
[TeX:08764d7d61]\vec{q}_{i+1}=\vec{q}_i-J^{-1}(\vec{q}_i,p)\frac{d\vec{F}(\vec{q}_i,p_i)}{dp}\ delta p_{i+1}[/TeX:08764d7d61].
Supposing [TeX:08764d7d61]\vec{q}_0[/TeX:08764d7d61] from linear problem and using fixed increments, we can (conceivably) solve nonlinear problem at large strains.
At any iteration we can use Jacobi method to make more precise solution.
But the problem is that the solution ruined at some iteration. Usually it is
around 10-15% of strain. I use boundary conditions in form of
displacements. As I can recognize, the problem the incompressible
condition falled down at some elements, but it also could be because
of accumulation of errors. I use MATLAB to solve linear systems, and I
think solution technique implemented for matrixes in MATLAB is quite
stable.
Did anybody try to implement something like I described above?
Where should I find errors, or may be I should use some another
technique to solve such systems?
Currently I'm trying to solve nonlinear system of equations, obtained from
finite-element formulation of large-strain problem of truly incompressible materials. Suppose this system to be [TeX:08764d7d61]\vec{F}(\vec{q})=\vec{0}[/TeX:08764d7d61],
there [TeX:08764d7d61]\vec{F}(\vec{q})=K(\vec{q})-\vec{P}[/TeX:08764d7d61]. [TeX:08764d7d61]K(\vec{q})[/TeX:08764d7d61] is the global stiffnes matrix after applying boundary conditions in form of stresses, [TeX:08764d7d61]\vec{P}[/TeX:08764d7d61] is the global vector of loads, [TeX:08764d7d61]\vec{q}[/TeX:08764d7d61] is the solution vector of nodal displacements and hydrostatic pressures in nodes.
For large strains global stiffness matrix depends on solution vector, so it makes the problem nonlinear. For small strains of course global stiffness matrix doesn't depends on solution, and this problem already solved in my program. So I have a linear solution for small strains.
The problem is how to solve nonlinear system.
Here are some possibilities to solve such system, which I already tried to implement:
Newton method. For this method I should obtain 1st iteration
somewhere,which should be close to real solution, and iterate using
Newton's method. But where can I find such iteration? Linear solution
should be quite different from real nonlinear solution on large strains,
for example, around 50%.
Incremental load technique. The general idea for this method taken
from Oden's book for nonlinear FEA. Suppose loads depends on real
parameter [TeX:08764d7d61]p[/TeX:08764d7d61], so our system looks like
[TeX:08764d7d61]\vec{F}(\vec{q},p)=\vec{0}[/TeX:08764d7d61]. So if I add some small variation
for load parameter: [TeX:08764d7d61]p+\delta p[/TeX:08764d7d61], this should cause a small
variation of solution vector [TeX:08764d7d61]\vec{q}+\delta\vec{q}[/TeX:08764d7d61], and the
system also becomes
[TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)=\vec{0}[/TeX:08764d7d61]
So if I suppose that [TeX:08764d7d61]\vec{F}[/TeX:08764d7d61] is quite smooth by argument
[TeX:08764d7d61]p[/TeX:08764d7d61], I can use Teylor series for [TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)[/TeX:08764d7d61]:
[TeX:08764d7d61]\vec{F}(\vec{q}+\delta\vec{q},p+\delta p)=\vec{F}(\vec{q},p)+\frac{d\vec{F}(\vec{q},p)}{d \vec{q}}\delta\vec{q}+\frac{d\vec{F}(\vec{q},p)}{d p}\delta p+...[/TeX:08764d7d61],
and further:
[TeX:08764d7d61]\delta\vec{q}=J^{-1}(\vec{q},p)\frac{d\vec{F}(\vec{q},p)}{dp}\delta p[/TeX:08764d7d61]
where [TeX:08764d7d61]J^{-1}[/TeX:08764d7d61] is the inverse Jacobi matrix for system.
So this lead us to iterative technique:
[TeX:08764d7d61]\vec{q}_{i+1}=\vec{q}_i-J^{-1}(\vec{q}_i,p)\frac{d\vec{F}(\vec{q}_i,p_i)}{dp}\ delta p_{i+1}[/TeX:08764d7d61].
Supposing [TeX:08764d7d61]\vec{q}_0[/TeX:08764d7d61] from linear problem and using fixed increments, we can (conceivably) solve nonlinear problem at large strains.
At any iteration we can use Jacobi method to make more precise solution.
But the problem is that the solution ruined at some iteration. Usually it is
around 10-15% of strain. I use boundary conditions in form of
displacements. As I can recognize, the problem the incompressible
condition falled down at some elements, but it also could be because
of accumulation of errors. I use MATLAB to solve linear systems, and I
think solution technique implemented for matrixes in MATLAB is quite
stable.
Did anybody try to implement something like I described above?
Where should I find errors, or may be I should use some another
technique to solve such systems?