Modifying step-44 - Null pressure case

134 views
Skip to first unread message

Lucas Campos

unread,
Sep 4, 2017, 10:18:43 AM9/4/17
to deal.II User Group
Dear all,

I am playing around with the step-44 code, and I have made a few (minor)
modifications to it. Namely, I set the sides of the cube to be free (that
is, with BC of null force) and added the whole top side to boundary
6. This results in exactly what I expect, that is, a squished cube, with 90
degrees symmetry. You can see the results in result_squish.png. 

I could also modify the program to have a positive pressure. The result was not
what I had antecipated, but upon analysing the BCs, it seems correct.  This can
be found in result_pull.png.

However, when I set the pressure to zero, the program stops converging. I do
not understand why that happens, as it seems that the analytical formulation is
independent from an external pressure. I spent quite a while looking how to fix
this, but it seems I am missing rather subtle. Any ideas how to proceed?

I have added both the source code I am using - which, as I said, is based in
step-44 - and the diff between the original version and my version. But, in short,
I removed a few lines make_constraints related to the +- x and +- z sides and
changed make_grid such that the whole +y side is now part of the boundary 6.

There was no changes in parameters.prm.

Bests
result_pull.png
result_squish.png
changes.diff
step-44.cc

Lucas Campos

unread,
Sep 4, 2017, 10:38:22 AM9/4/17
to deal.II User Group
Dear all,

First, I would like to apologize for post the diff the "wrong direction". I just attached the second version correctly.

Also, I think I need to expand in a few things I did try to do already, none with success. First, I tried removing the boundary 6
altogether. Unsurprisingly, this alone did not work, as it is the same as simply set p = 0, as done previously.

I tried augmenting this approach by reinserting the boundary conditions, as I was suspecting the system could be under-
specified. This still did not work. At this point I started suspecting there might be something I was missing from the theory,
but I still tried adding BCs in +x and +z as well. You can guess the result. 

I then read Simo et al. 1985, but even then, I don't see why having the +y side free would lead to any problems. My intuition
says we should simply a cube, with no distortions at al. The most trivial of problems. But this is not what the program above 
outputs.
changes.diff

Andrew McBride

unread,
Sep 4, 2017, 12:41:02 PM9/4/17
to dea...@googlegroups.com
I think the problem arises from the fact that the error residual is essentially zero in the absence of loading. There is nothing wrong with the theory, it’s just that we assume loading will / should be applied. I think this is reasonable.

Try a small value (positive or negative) for the pressure and see what happens

A



--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dealii+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<changes.diff>

Lucas Campos

unread,
Sep 5, 2017, 3:28:19 AM9/5/17
to deal.II User Group
Dear Andrew,

I tested with small (but non-null) pressures and the system indeed converges. If I understand your point correctly, I am essentially having a zero by zero divison when calculating the errors, and that is why the system fails to converge. Is that so?

Bests,
Lucas

Andrew McBride

unread,
Sep 5, 2017, 9:39:48 AM9/5/17
to dea...@googlegroups.com
Hi Lucas

Not quite - have a look at the struct Errors in step 44 where:

void reset()
{
norm = 1.0;
u = 1.0;
p = 1.0;
J = 1.0;
}

void normalize(const Errors &rhs)
{
if (rhs.norm != 0.0)
norm /= rhs.norm;
if (rhs.u != 0.0)
u /= rhs.u;
if (rhs.p != 0.0)
p /= rhs.p;
if (rhs.J != 0.0)
J /= rhs.J;
}

So if the rhs is zero (the case with zero pressure loading) - then the normalised error will also be 1 and we won’t converge.

I think this is reasonable behaviour as we expect some loading to be applied otherwise there is nothing to solve.

A

Lucas Campos

unread,
Sep 5, 2017, 10:56:28 AM9/5/17
to deal.II User Group
Dear Andrew,

I get it now! Thanks a lot.

Lucas
Reply all
Reply to author
Forward
0 new messages