Subject: Re: [FFC-dev] stable finite element for incompressible nonlinear elasticity?

From: Chong Luo <[email-masked]>
Date: Tue, 25 Mar 2008 15:06:45 -0700 (PDT)

Sorry, I forgot to attach my code in the previous email.

Best,
Chong Luo
----- Original Message ----
From: Chong Luo <[email-masked]>
To: Andy Ray Terrel <[email-masked]>
Cc: [email-masked]
Sent: Tuesday, March 25, 2008 5:05:31 PM
Subject: Re: [FFC-dev] stable finite element for incompressible nonlinear elasticity?

Thank you very much for all those suggestions.

I've attached my code for solving neoHookean elasticity (the 2D version, which is much faster than the 3D one, but still blows up). 

I took "u" to be the mixture of (displacement, pressure), because the NonlinearPDE solver
subroutine pde.solve(u, t, T, dt) seems not accepting two functions simultaneously. So I mix the (displacement, pressure) to be one function "u" so that I can use the subroutine pde.solve(u, t, T, dt) to solve.

I'm not quite sure about how the NonlinearPDE solver works (I copied the code from the /demo/pde/nonlinear-poisson). It seems that it  does the job beautifully simple, but I don't know where to specify the initial value of (displacement, pressure).

Best,

Chong Luo

----- Original Message ----
From: Andy Ray Terrel <[email-masked]>
To: Chong Luo <[email-masked]>; Discussion of FFC development <[email-masked]>
Sent: Tuesday, March 25, 2008 9:04:06 AM
Subject: Re: [FFC-dev] stable finite element for incompressible nonlinear elasticity?

> On the other hand, the one with (P1-P1) does compile, but the computation is
> not stable. What a life ...
> 
> Also, maybe my NeoHookean.form is too complicated, it takes a lot of time (5-10
> minutes) to compile the form file.
> And the size of NeoHookean.h is 4.8M, so it also takes a lot of time to compile
> main.cpp. Is there any way to speed up the compiling?
> 

You need to add stabilization terms for P1-P1 to be a stable stokes 
element this is why the bilinear form has the delta*dot(grad(q), 
grad(p)) term in it.   I can't really see what is going on in your form 
but it appears that you are setting your trial and test functions to be 
the entire mixed space, this seems incorrect behaviour but it really 
depends on the parts that were left out of the form posted to the list.

Another step is to try a P1-P0 element, this won't be as large (or 
accurate) as the P2-P1 element but should be more stable than just P1-P1 
with no stabilization terms.  For a long list of stable stokes elements 
I recommend Brezzi-Fortin.

When compiling with very large .h files generated from ffc, one speedup 
I have found is to turn off all compiler optimizations.  (in g++ do -O0)

Andy

      Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.

      ____________________________________________________________________________________
Never miss a thing.  Make Yahoo your home page. 
http://www.yahoo.com/r/hs

---

From: Andy Ray Terrel <[email-masked]>
Date: Tue, 25 Mar 2008 21:54:59 -0500

So the code built for me quite quickly (using a macbook - 1GB ram, dual 
core intel processor).  I am using the development version of ffc, fiat, 
and dolfin; perhaps that would help.  Just so you know your problem 
diverged when I used a P4-P3 element and the Crouziex-Raviart element 
(see below), I'm guessing that you need to look at something other than 
just the element.

vector = VectorElement("Crouzeix-Raviart", "triangle", 1)
scalar = FiniteElement("Discontinuous Lagrange", "triangle", 0)
mixed = vector+scalar

-- Andy

Chong Luo wrote:
> I've attached my code for solving neoHookean elasticity (the 2D 
> version, which is much faster than the 3D one, but still blows up).
>
> subroutine pde.solve(u, t, T, dt) seems not accepting two functions 
> simultaneously. So I mix the (displacement, pressure) to be one 
> function "u" so that I can use the subroutine pde.solve(u, t, T, dt) 
> to solve.
>
> I'm not quite sure about how the NonlinearPDE solver works (I copied 
> the code from the /demo/pde/nonlinear-poisson). It seems that it  does 
> the job beautifully simple, but I don't know where to specify the 
> initial value of (displacement, pressure).
>
>
> Best,
>
> Chong Luo
>
> ------------------------------------------------------------------------
> Looking for last minute shopping deals? Find them fast with Yahoo! 
> Search. 
> <http://us.rd.yahoo.com/evt=51734/*http://tools.search.yahoo.com/newsearch/category.php?category=shopping>
>
>
> ------------------------------------------------------------------------
> Never miss a thing. Make Yahoo your homepage. 
> <http://us.rd.yahoo.com/evt=51438/*http://www.yahoo.com/r/hs>

-- 

====================
Andy Terrel
Computer Science Dept
University of Chicago
[email-masked]
---------------------

One machine can do the work of fifty men. 
No machine can do the work of one extraordinary man.
                                     -Elbert Hubbard