在 2015年3月3日星期二 UTC+1下午11:35:05,Robert Cimrman写道:
On 03/03/2015 01:16 PM, Ronghai Wu wrote:
> Hi Robert Cimrman,
>
> Thanks, it helps a lot. But I still have some questions listed below.
> Taking the example of a 2D square domain with a circular hole at center,
> under tensile traction along x-axis(please see attached
> codes"elasticity-periodic BC2").
> (1) If the traction stress components are placed in this way?
> Material('traction', val=[ [sigma11, sigma12], [sigma21, sigma22] ])

No, it uses the symmetric storage vector: sigma11, sigma22, sigma12. I will
update the term docstring.

> (2) I would like to have tensile traction along x-axis, if the following
> codes are correct.
>
> omega = domain.create_region('Omega', 'all')
>
> lef = domain.create_region('Lef', 'vertices in x < %f' % (min_x + eps),
> 'facet')
>
> rig = domain.create_region('Rig', 'vertices in x > %f' % (max_x - eps),
> 'facet')
>
> traction_left = Material('traction_left', val=[[1.,0.], [0.,0.]])
>
> traction_right = Material('traction_right', val=[[1.,0.], [0.,0.]])

So this should be:

traction_lef = Material('traction_lef', val=[[1.], [0.], [0.]])
traction_rig = Material('traction_rig', val=[[1.], [0.], [0.]])
 
> integral = Integral('i', order=3)
>
> t1 = Term.new('dw_lin_elastic(m.function, v, u )', integral, omega, m=m,
> v=v, u=u)
>
> t2 = Term.new('dw_lin_prestress(prestress.function, v )',integral, omega,
> prestress=prestress, v=v)
>
> t3 = Term.new('dw_surface_ltr(traction_left.val, v)', integral, lef,
> traction_left=traction_left, v=v)
>
> t4 = Term.new('dw_surface_ltr(traction_right.val, v)', integral, rig,
> traction_right=traction_right, v=v)
>
> fem_eq = Equation('balance', t1 - t2 - t3 - t4 )

Note here: t3 acts on a boundary, that is completely fixed, so it can be safely
removed.

Or, I would use the following minimal BC:

#stress free BC
pb.time_update(ebcs=Conditions([fix_u_lef_corner, fix_u_rig_corner]))

#top-bottom periodic BC
pb.time_update(ebcs=Conditions([fix_u_lef_corner, fix_u_rig_corner]),
epbcs=Conditions([periodic_y]), functions=functions_y)

with:

fix_u_lef_corner = EssentialBC('fix_u_lef_corner', lef_corner, {'u.all' : 0.0})
fix_u_rig_corner = EssentialBC('fix_u_rig_corner', rig_corner, {'u.1' : 0.0})

i.e. no fix_u_lef.

Thanks, I corrected the codes accordingly.

>
> (3) For the boundary condition at top-bottom boundaries, the results are
> very different between stress-free and periodic BC(please see attached
> pictures"sfepy stress-free BC" and "sfepy periodic BC"). I also attach the
> analytical solution for periodic BC case(see "Analytical solution for
> periodic BC"). However, I found that the sfepy result of stress-free BC
> agrees well with analytical periodic BC, but sfepy result of periodic BC
> does not agree with them. This is the situation I do not understand. And I
> am wondering, do you have other examples with analytical solution which can
> benchmark the stress-free and periodic BC.

IMHO the results correspond well to the boundary conditions: by imposing the
periodic BC on top and bottom, you in fact prevent the narrowing of the domain
in the y direction, so sigma_22 has to be positive. Is the analytical result
really for the boundary conditions you assume?


You are right. I got the analytical from a paper which says the boundary condition is periodic. But I checked more papers and found out the actual boundary condition is stress free.
 
> Stress is plotted in this way. A line along x-axis(or y-axis) across the
> center of hole, plot from the center of hole to boundary, distance(r) is
> normalized by hole radius(R).

BTW. you can get the stress by using the ev_cauchy_stress term, just like the
strain... also check the primer for data probes.


I tried to do this, but got error which I cannot fix (please run "elasticity-periodicBC3.py"). Additionally, I have some questions regarding the strain and stress calculated by pb.evalate(please see "questions about strain and stress.pdf").

Regards,
Ronghai