Convergence issue with hyperelastic material
Hi, everyone!
I have this script (attached) where a block of a hyperelastic, "almost incompressible", material is deformed uniformly. The results seem acceptable with coarse meshes (e.g. N_NODES=3, lo_mesh.png), but weird things show up with finer ones (N_NODES=10, hi_mesh.png).
I've tried tweaking some solvers settings (e.g. changing i_max
or
eps_r
etc. or switching to ScipyIterative
linear solver), which
led to some minor changes, but did not actually solve the problem.
Can this be due to the solvers setting?
Or is it a property of the displacement-based formulation? (i.e. would
mixed formulation work better?)
I also noted that the example
large_deformation/compare_elastic_materials.py
seems to converge
reliably, but loading is imposed by surface tractions instead of
prescribed displacements in it.
Thanks, Jan
Hi Jan,
On 01/18/2018 04:21 PM, Jan Heczko wrote:
Hi, everyone!
I have this script (attached) where a block of a hyperelastic, "almost incompressible", material is deformed uniformly. The results seem acceptable with coarse meshes (e.g. N_NODES=3, lo_mesh.png), but weird things show up with finer ones (N_NODES=10, hi_mesh.png).
I've tried tweaking some solvers settings (e.g. changing
i_max
oreps_r
etc. or switching toScipyIterative
linear solver), which led to some minor changes, but did not actually solve the problem.Can this be due to the solvers setting? Or is it a property of the displacement-based formulation? (i.e. would mixed formulation work better?)
Yes, it is partially related to the displacement-based loading. You are increasing the load too fast. Try smaller time step for the finer mesh, so that the elements are not too stretched (relative to their size) at the beginning of each nonlinear solve.
You can try using the adaptive time-stepper to help you with setting the correct time-step (and make Newton fail early):
from sfepy.solvers.ts_solvers import AdaptiveTimeSteppingSolver, adapt_time_step
...
nls = Newton(
...
i_max=6,
...
)
tss = AdaptiveTimeSteppingSolver(
{
't0' : 0., 't1' : 10., 'n_step' : 201,
'dt_red_factor' : 0.5,
'dt_red_max' : 1e-6,
'dt_inc_factor' : 1.25,
'dt_inc_on_iter' : 4,
'dt_inc_wait' : 5,
'adapt_fun' : adapt_time_step,
},
problem=pb)
Check also ./script/plot_times.py (change output format to hdf5 to use that).
r.
I also noted that the example
large_deformation/compare_elastic_materials.py
seems to converge reliably, but loading is imposed by surface tractions instead of prescribed displacements in it.Thanks, Jan
SfePy mailing list sfepy@python.org https://mail.python.org/mm3/mailman3/lists/sfepy.python.org/
Thanks for the reply. Meanwhile, I managed to solve the issue using mixed formulation. Now I would like to add it as a new example.
So far, I added the file into the examples/large_deformation
folder, but when I try to regenerate the documentation (as described in [1]), my new example does not seem to appear in the list of examples nor does e.g. examples/linear_elasticity/two_bodies_contact.py
. I thought that the documentation is generated automatically from docstrings. Am I missing something?
[1] http://sfepy.org/doc-devel/developer_guide.html#how-to-regenerate-documentat...
On 01/23/2018 06:49 PM, Jan Heczko wrote:
Thanks for the reply. Meanwhile, I managed to solve the issue using mixed formulation. Now I would like to add it as a new example.
Great!
So far, I added the file into the
examples/large_deformation
folder, but when I try to regenerate the documentation (as described in [1]), my new example does not seem to appear in the list of examples nor does e.g.examples/linear_elasticity/two_bodies_contact.py
. I thought that the documentation is generated automatically from docstrings. Am I missing something?
Yes, check [2] (script/gen_gallery.py).
r.
[2] http://sfepy.org/doc-devel/release_tasks.html
[1] http://sfepy.org/doc-devel/developer_guide.html#how-to-regenerate-documentat...
SfePy mailing list sfepy@python.org https://mail.python.org/mm3/mailman3/lists/sfepy.python.org/
participants (2)
-
Jan Heczko
-
Robert Cimrman