[petsc-users] -snes_fd for problems with residuals with non-continuous first derivative?
Luv Sharma
luvsharma11 at gmail.com
Fri Jun 30 13:49:11 CDT 2017
Hi Max,
I do not understand the equations that you write very clearly.
Are you looking to implement a “local” and “if” type of isotropic hardening plasticity? If that is the case, then in my understanding you need to solve only 1 field equation for the displacement components or for the strain components. You can look at the following code:
https://github.com/tdegeus/GooseFFT/blob/master/small-strain/laminate/elasto-plasticity.py <https://github.com/tdegeus/GooseFFT/blob/master/small-strain/laminate/elasto-plasticity.py>
If you are looking for a PETSc based implementation for plasticity (isotropic/anisotropic) you can look at
https://damask.mpie.de/ <https://damask.mpie.de/>
I had presented a talk about the same at the PETSc User Meeting last year.
As I understand it, additional field equations will only be necessary if the plasticity or elasticity were “nonlocal”. You may want to look at:
On the role of moving elastic–plastic boundaries in strain gradient plasticity, R H J Peerlings
Best regards,
Luv
> On 30 Jun 2017, at 11:52, Maximilian Hartig <imilian.hartig at gmail.com> wrote:
>
> Hi Luv,
>
> I’m modelling linear hardening(sigma_y = sigma_y0 + K_iso*epsilon_plast_eqiv) with isotropic plasticity only. So I should not need to use an iterative method to find the point on the yield surface. I have three fields and 7 unknowns in total:
> Field 0: 3 displacement components
> Field 1: 3 velocity components
> Field 2: 1 equivalent plastic strain
>
> It is the solver for these three fields that is not converging. I am using PetscFE. As residuals for the plastic case (sigma_vM > sigma_yield) I have:
>
> Field 0 (displacement):
> f0[i] = rho*u_t[u_Off[1]+i]
> f1[i*dim+j] = sigma_tr[i*dim+j] - 2*mu*sqrt(3/2)*u_t[uOff[2]]*N[i*dim+j]
>
> where sigma_tr is the trial stress, mu is the shear modulus and N is the unit deviator tensor normal to the yield surface.
>
> Field 1 (velocity):
> f0[i] = u[uOff[1]+i]-u_t[i]
> f1[i*dim+j] = 0
>
> Field 2 (effective plastic strain):
> f0[0] = ||s_tr|| -2*mu*sqrt(3/2)*u_t[uOff[2]]-sqrt(2/3)*sigma_y
> f1[i] = 0
> where ||s_tr|| is the norm of the deviator stress tensor.
>
> Field 0 residual is essentially newton’s second law of motion and Field 2 residual should be the yield criterion. I might have just fundamentally misunderstood the equations of plasticity but I cannot seem to find my mistake.
>
> Thanks,
> Max
>
>
>> On 30. Jun 2017, at 11:09, Luv Sharma <luvsharma11 at gmail.com> wrote:
>>
>> Hi Max,
>>
>> Is your field solver not converging or the material point solver ;)?
>>
>> Best regards,
>> Luv
>>> On 30 Jun 2017, at 10:45, Maximilian Hartig <imilian.hartig at gmail.com> wrote:
>>>
>>> Hello,
>>>
>>> I’m trying to implement plasticity and have problems getting the Petsc SNES to converge. To check if my residual formulation is correct I tried running with -snes_fd for an easy example as the Petsc FAQ suggest. I cannot seem to get the solver to converge at any cost.
>>> I already tried to impose bounds on the solution and moved to vinewtonrsls as a nonlinear solver. I checked and rechecked my residuals but I do not find an error there. I now have the suspicion that the -snes_fd option is not made for handling residuals who’s first derivatives are not continuous (e.g. have an “if” condition in them for the plasticity/ flow-condition). Can you confirm my suspicion? And is there another way to test my residual formulation separate from my hand-coded jacobian?
>>>
>>>
>>> Thanks,
>>> Max
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170630/a94ca8df/attachment.html>
More information about the petsc-users
mailing list