<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi Max,<div class=""><br class=""></div><div class="">I do not understand the equations that you write very clearly. </div><div class=""><br class=""></div><div class="">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:</div><div class=""><a href="https://github.com/tdegeus/GooseFFT/blob/master/small-strain/laminate/elasto-plasticity.py" class="">https://github.com/tdegeus/GooseFFT/blob/master/small-strain/laminate/elasto-plasticity.py</a></div><div class=""><br class=""></div><div class="">If you are looking for a PETSc based implementation for plasticity (isotropic/anisotropic) you can look at </div><div class=""><a href="https://damask.mpie.de/" class="">https://damask.mpie.de/</a></div><div class="">I had presented a talk about the same at the PETSc User Meeting last year.</div><div class=""><br class=""></div><div class="">As I understand it, additional field equations will only be necessary if the plasticity or elasticity were “nonlocal”. You may want to look at:</div><div class="">On the role of moving elastic–plastic boundaries in strain gradient plasticity, R H J Peerlings</div><div class=""><br class=""></div><div class="">Best regards,</div><div class="">Luv</div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 30 Jun 2017, at 11:52, Maximilian Hartig <<a href="mailto:imilian.hartig@gmail.com" class="">imilian.hartig@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="">Hi Luv,<br class=""><br class="">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:<br class="">Field 0: <span class="Apple-tab-span" style="white-space:pre">      </span>3 displacement components<br class="">Field 1: <span class="Apple-tab-span" style="white-space:pre">     </span>3 velocity components <br class="">Field 2: <span class="Apple-tab-span" style="white-space:pre">        </span>1 equivalent plastic strain<br class=""><br class="">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:<br class=""><br class="">Field 0 (displacement):<br class="">f0[i] = rho*u_t[u_Off[1]+i]<br class="">f1[i*dim+j] = sigma_tr[i*dim+j] - 2*mu*sqrt(3/2)*u_t[uOff[2]]*N[i*dim+j]<br class=""><br class="">where sigma_tr is the trial stress, mu is the shear modulus and N is the unit deviator tensor normal to the yield surface.<br class=""><br class="">Field 1 (velocity):<br class="">f0[i] = u[uOff[1]+i]-u_t[i]<br class="">f1[i*dim+j] = 0<br class=""><br class="">Field 2 (effective plastic strain):<br class="">f0[0] = ||s_tr|| -2*mu*sqrt(3/2)*u_t[uOff[2]]-sqrt(2/3)*sigma_y<br class="">f1[i] = 0<br class="">where ||s_tr|| is the norm of the deviator stress tensor.<br class=""><br class="">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.<br class=""><br class="">Thanks,<br class="">Max<br class=""><br class=""><br class=""><blockquote type="cite" class="">On 30. Jun 2017, at 11:09, Luv Sharma <<a href="mailto:luvsharma11@gmail.com" class="">luvsharma11@gmail.com</a>> wrote:<br class=""><br class="">Hi Max,<br class=""><br class="">Is your field solver not converging or the material point solver ;)? <br class=""><br class="">Best regards,<br class="">Luv<br class=""><blockquote type="cite" class="">On 30 Jun 2017, at 10:45, Maximilian Hartig <<a href="mailto:imilian.hartig@gmail.com" class="">imilian.hartig@gmail.com</a>> wrote:<br class=""><br class="">Hello,<br class=""><br class="">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.<br class="">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?<br class=""><br class=""><br class="">Thanks,<br class="">Max<br class=""></blockquote><br class=""></blockquote><br class=""></div></div></blockquote></div><br class=""></div></body></html>