<div dir="ltr"><div><div><div>I do not clearly understand the discrimination between local and global plasticity. I do have areas where I expect the behaviour to be elastic and other areas where I expect elasto-plastic behaviour.<br></div>Inertia effects are of importance and hence I need second order temporal derivatives of my displacements. The only way I have found to implement this in Petsc is to create a separate velocity field which I use to then compute ü.<br></div>To account for plasticity, in my understanding I need to introduce at least one additional history variable. In my case this is the effective plastic strain e_p. I then solve the equation of motion (grad(sigma)-rho*ü+F=0) and the consistency condition (sigma_eq - sigma_yield = 0) at the same time. Or try to at least.<br></div><div><br></div><div>Thanks,<br></div><div>Max<br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2017-06-30 20:49 GMT+02:00 Luv Sharma <span dir="ltr"><<a href="mailto:luvsharma11@gmail.com" target="_blank">luvsharma11@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Max,<div><br></div><div>I do not understand the equations that you write very clearly. </div><div><br></div><div>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><a href="https://github.com/tdegeus/GooseFFT/blob/master/small-strain/laminate/elasto-plasticity.py" target="_blank">https://github.com/tdegeus/<wbr>GooseFFT/blob/master/small-<wbr>strain/laminate/elasto-<wbr>plasticity.py</a></div><div><br></div><div>If you are looking for a PETSc based implementation for plasticity (isotropic/anisotropic) you can look at </div><div><a href="https://damask.mpie.de/" target="_blank">https://damask.mpie.de/</a></div><div>I had presented a talk about the same at the PETSc User Meeting last year.</div><div><br></div><div>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>On the role of moving elastic–plastic boundaries in strain gradient plasticity, R H J Peerlings</div><div><br></div><div>Best regards,</div><div>Luv</div><div><div class="h5"><div><br><div><blockquote type="cite"><div>On 30 Jun 2017, at 11:52, Maximilian Hartig <<a href="mailto:imilian.hartig@gmail.com" target="_blank">imilian.hartig@gmail.com</a>> wrote:</div><br class="m_6974763644534671648Apple-interchange-newline"><div><div>Hi Luv,<br><br>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>Field 0: <span class="m_6974763644534671648Apple-tab-span" style="white-space:pre-wrap"> </span>3 displacement components<br>Field 1: <span class="m_6974763644534671648Apple-tab-span" style="white-space:pre-wrap">      </span>3 velocity components <br>Field 2: <span class="m_6974763644534671648Apple-tab-span" style="white-space:pre-wrap"> </span>1 equivalent plastic strain<br><br>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><br>Field 0 (displacement):<br>f0[i] = rho*u_t[u_Off[1]+i]<br>f1[i*dim+j] = sigma_tr[i*dim+j] - 2*mu*sqrt(3/2)*u_t[uOff[2]]*N[<wbr>i*dim+j]<br><br>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><br>Field 1 (velocity):<br>f0[i] = u[uOff[1]+i]-u_t[i]<br>f1[i*dim+j] = 0<br><br>Field 2 (effective plastic strain):<br>f0[0] = ||s_tr|| -2*mu*sqrt(3/2)*u_t[uOff[2]]-<wbr>sqrt(2/3)*sigma_y<br>f1[i] = 0<br>where ||s_tr|| is the norm of the deviator stress tensor.<br><br>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><br>Thanks,<br>Max<br><br><br><blockquote type="cite">On 30. Jun 2017, at 11:09, Luv Sharma <<a href="mailto:luvsharma11@gmail.com" target="_blank">luvsharma11@gmail.com</a>> wrote:<br><br>Hi Max,<br><br>Is your field solver not converging or the material point solver ;)? <br><br>Best regards,<br>Luv<br><blockquote type="cite">On 30 Jun 2017, at 10:45, Maximilian Hartig <<a href="mailto:imilian.hartig@gmail.com" target="_blank">imilian.hartig@gmail.com</a>> wrote:<br><br>Hello,<br><br>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>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><br><br>Thanks,<br>Max<br></blockquote><br></blockquote><br></div></div></blockquote></div><br></div></div></div></div></blockquote></div><br></div>