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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 
>>> 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
>> 
> 

Reply via email to