[petsc-users] Hints for using petscfe for plasticity -- how to update/access internal variables?

Matthew Knepley knepley at gmail.com
Thu Sep 21 07:16:39 CDT 2017


On Wed, Sep 20, 2017 at 6:19 PM, Sanjay Govindjee <s_g at berkeley.edu> wrote:

> Matt,
>   There is such a thing as non-local plasticity, one where there is a
> separate field equation to
> solve for the plasticity (beyond the balance of momentum).
>

I had not seen that. We use non-locality in electrostatics to account for
solvent screening which
cannot be modeling well in the continuum.

  Thanks,

     Matt


> -sanjay
>
> On 9/20/17 4:51 PM, Matthew Knepley wrote:
>
> On Wed, Sep 20, 2017 at 3:46 PM, Maximilian Hartig <
> imilian.hartig at gmail.com> wrote:
>
>>
>> On 20. Sep 2017, at 19:05, Matthew Knepley <knepley at gmail.com> wrote:
>>
>> On Wed, Sep 20, 2017 at 12:57 PM, Maximilian Hartig <
>> imilian.hartig at gmail.com> wrote:
>>
>>> On 20. Sep 2017, at 18:17, Matthew Knepley <knepley at gmail.com> wrote:
>>>
>>> On Wed, Sep 20, 2017 at 11:46 AM, Maximilian Hartig <
>>> imilian.hartig at gmail.com> wrote:
>>>
>>>> Hello,
>>>>
>>>> I’m trying to implement plasticity using petscFE but I am quite stuck
>>>> since a while. Here’s what I’m trying to do:
>>>>
>>>> I have a TS which solves the following equation:
>>>> gradient(stress) +Forces = density*acceleration
>>>> where at the moment stress is a linear function of the strain and hence
>>>> the gradient of the displacement. This works fine. Now I want to compare
>>>> the stress to a reference value and if it lies above this yield stress, I
>>>> have to reevaluate the stress at the respective location. Then I need to
>>>> update the plastic strain / yield stress  at this location.
>>>> I tried doing that first by solving three fields at the same time:
>>>> displacements, stresses and yield stress. This failed.
>>>> Then, I tried solving only for displacement increments, storing the
>>>> displacements, stresses and yield stress from the past time step in an
>>>> auxiliary field. The auxiliary fields are updated after each time step with
>>>> a second SNES, using the displacement increments from the current,
>>>> converged time step. This also failed.
>>>> In both cases the code had problems converging and when it did, I ended
>>>> up with negative plastic strain. This is not possible and I don’t know how
>>>> it happens because I explicitly only increment the plastic strain when the
>>>> increment is positive.
>>>>
>>>> I am sure there is an easy solution to how I can update the internal
>>>> variables and determine the correct stress for the residual but I just
>>>> cannot figure it out. I’d be thankful for any hints.
>>>>
>>>
>>> It looks like there are two problems above:
>>>
>>> 1) Convergence
>>>
>>> For any convergence question, we at minimum need to see the output of
>>>
>>>   -snes_view -snes_converged_reason -snes_monitor
>>> -ksp_monitor_true_residual -snes_linesearch_monitor
>>>
>>> However, this does not seem to be the main issue.
>>>
>>> 2) Negative plastic strain
>>>
>>>
>>> This is what I’m mainly concerned with.
>>>
>>>
>>> If the system really converged (I cannot tell without other
>>> information), then the system formulation is wrong. Of course, its
>>> really easy to check by just plugging your solution into the residual
>>> function too. I do not understand your explanation above
>>> completely however. Do you solve for the plastic strain or the increment?
>>>
>>>
>>> I am trying to find a formulation that works and I think there is a core
>>> concept I am just not “getting”.
>>> I want to solve for the displacements.
>>> This works fine in an elastic case. When plasticity is involved, I need
>>> to determine the actual stress for my residual evaluation and I have not
>>> found a way to do that.
>>> All formulations for stress I found in literature use strain increments
>>> so I tried to just solve for increments each timestep and then add them
>>> together in tspoststep. But I still need to somehow evaluate the stress for
>>> my displacement increment residuals. So currently, I have auxiliary fields
>>> with the stress and the plastic strain.
>>>
>>
>> First question: Don't you get stress by just applying a local operator,
>> rather than a solve?
>>
>> That depends on the type of plasticity.
>>
>
> What type of plasticity is not local?
>
>
>> For a linear hardening formulation it is correct that I could just apply
>> a local operator. I’d be happy with that for now. But I’d still need to
>> save stress state and plastic strain to determine whether or not I’m
>> dealing with a plasticity. I don’t know how to do that inside the residual
>> evaluation.
>>
>
> I do not know what you mean by this, meaning why you can't just save these
> as auxiliary fields. Also, it would seem to be enough to have the old
> displacement and the plastic strain.
>
>
>> Plus DMProjectField seems to have problems evaluating the gradient when
>> boundary conditions are imposed.
>>
>
> There are several examples where we do exactly this. Can you show me what
> you mean by this?
>
>   Thanks,
>
>     Matt
>
>
>> Thanks,
>> Max
>>
>>
>>   Thanks,
>>
>>      Matt
>>
>>
>>> I evaluate the current trial stress by adding a stress increment
>>> assuming elastic behaviour. If the trial stress lies beyond the yield
>>> stress I calculate the corrected stress to evaluate my residual for the
>>> displacements. But now I somehow need to update my plastic strain and the
>>> stress in the auxiliary fields. So in tspoststep I created another SNES to
>>> now calculate the stress and plastic strain while the displacement is the
>>> auxiliary field.
>>>
>>> I’m sure there’s an elegant solution on how to update internal variables
>>> but I have not found it.
>>>
>>> Thanks,
>>> Max
>>>
>>>
>>>   Thanks,
>>>
>>>      Matt
>>>
>>>
>>>> Thanks,
>>>> Max
>>>
>>>
>>>
>>>
>>> --
>>> What most experimenters take for granted before they begin their
>>> experiments is infinitely more interesting than any results to which their
>>> experiments lead.
>>> -- Norbert Wiener
>>>
>>> http://www.caam.rice.edu/~mk51/
>>>
>>>
>>>
>>
>>
>> --
>> What most experimenters take for granted before they begin their
>> experiments is infinitely more interesting than any results to which their
>> experiments lead.
>> -- Norbert Wiener
>>
>> http://www.caam.rice.edu/~mk51/
>>
>>
>>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which their
> experiments lead.
> -- Norbert Wiener
>
> http://www.caam.rice.edu/~mk51/
>
>
> --
> -------------------------------------------------------------------
> Sanjay Govindjee, PhD, PE
> Horace, Dorothy, and Katherine Johnson Professor in Engineering
>
> 779 Davis Hall
> University of California
> Berkeley, CA 94720-1710
>
> Voice:  +1 510 642 6060 <(510)%20642-6060>
> FAX:    +1 510 643 5264 <(510)%20643-5264>s_g at berkeley.eduhttp://faculty.ce.berkeley.edu/sanjay
> -------------------------------------------------------------------
>
> Books:
>
> Engineering Mechanics of Deformable
> Solids: A Presentation with Exerciseshttp://www.oup.com/us/catalog/general/subject/Physics/MaterialsScience/?view=usa&ci=9780199651641http://ukcatalogue.oup.com/product/9780199651641.dohttp://amzn.com/0199651647
>
> Engineering Mechanics 3 (Dynamics) 2nd Editionhttp://www.springer.com/978-3-642-53711-0http://amzn.com/3642537111
>
> Engineering Mechanics 3, Supplementary Problems: Dynamics http://www.amzn.com/B00SOXN8JU
>
> -----------------------------------------------
>
>


-- 
What most experimenters take for granted before they begin their
experiments is infinitely more interesting than any results to which their
experiments lead.
-- Norbert Wiener

http://www.caam.rice.edu/~mk51/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170921/f43c19cc/attachment-0001.html>


More information about the petsc-users mailing list