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/