[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