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

Matthew Knepley knepley at gmail.com
Wed Sep 20 15:51:00 CDT 2017


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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170920/71626556/attachment-0001.html>


More information about the petsc-users mailing list