Yes that is exactly what we do. In fact it is a bit better than your
typical continuation/homotopy methods
since the solutions along the way are physically meaningful and also
often of interest.
In our FEA+PETSc code we do this but we only call PETSc for the linear
solves.
We handle all the Newton stuff within our own code. For us this was an
easier route
to a fully working non-linear FEA code since we started with a fully
working non-linear
serial FEA code.
-sg
On 2/18/14 8:38 PM, Barry Smith wrote:
So you could solve a sequence of problems where you move the boundary
condition from being “easy” to the final value you want as a kind of
continuation method?
Hmm, wonder how you would do that cleanly in PETSc.
Barry
On Feb 18, 2014, at 10:31 PM, Sanjay Govindjee <[email protected]> wrote:
One alternate to this is that on the first step the initial value of X_B is not
taken as the know value but rather some prior known value. Then for the first
iteration Y_B turns out to be the known increment; in subsequent iterations it
is take as 0. This can sometimes be helpful with convergence in tough problems.
-sg
On 2/18/14 5:56 PM, Barry Smith wrote:
On Feb 18, 2014, at 5:39 PM, Fande Kong <[email protected]> wrote:
Hi all,
I am just trying to solve a nonlinear system resulted from discretizating a
hyperelasticity problem by finite element method. When I solve a linear PDE, I
never put boundary solution either in a solution vector or a matrix, but
instead, I put boundary condition to the right hand size (load).
You adjust the right hand side to have zero as the boundary conditions.
This can be written as
(A_II A_IB ) ( X_I ) (F_I)
(A_BI A_BB)(X_B) = (F_B)
Which is equivalent to
(A_I A_B) (X_I) (F_I) - (A_B)*(X_B)
(0) =
A_I X_I = F_I - A_B*X_B
In the nonlinear case you have
F_I(X_I,X_B) = ( 0 )
F_B(X_I,X_B) ( 0)
where you know X_B with Jacobian
(J_II J_IB)
(J_BI J_BB)
Newtons’ method on all variables gives
(X_I)^{n+1} = (X_I)^{n} + (Y_I)
(X_B) (X_B) (Y_B)
where JY = F which written out in terms of I and B is
(J_II J_IB) (Y_I) = F_I( X_I,X_B)
(J_BI J_BB) (Y_B) F_B(X_I,X_B)
Now since X_B is the solution on the boundary the updates on the boundary
at zero so Y_B is zero so this system reduces to
J_II Y_I = F_I(X_I,X_B) so Newton reduces to just the interior
with
(X_I)^{n+1} = (X_I)^{n} + J_II^{-1} F_I(X_I,X_B)
Another way to look at it is you are simply solving F_I(X_I,X_B) = 0 with
given X_B so Newton’s method only uses the Jacobian of F_I with respect to X_I
Barry
How can I do a similar thing when solving a nonlinear system using a newton
method?
Thanks,
Fande,