[petsc-users] Hints for using petscfe for plasticity -- how to update/access internal variables?
Sanjay Govindjee
s_g at berkeley.edu
Wed Sep 20 17:19:34 CDT 2017
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).
-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 <mailto:imilian.hartig at gmail.com>> wrote:
>
>
>> On 20. Sep 2017, at 19:05, Matthew Knepley <knepley at gmail.com
>> <mailto:knepley at gmail.com>> wrote:
>>
>> On Wed, Sep 20, 2017 at 12:57 PM, Maximilian
>> Hartig<imilian.hartig at gmail.com
>> <mailto:imilian.hartig at gmail.com>>wrote:
>>
>>> On 20. Sep 2017, at 18:17, Matthew Knepley
>>> <knepley at gmail.com <mailto:knepley at gmail.com>> wrote:
>>>
>>> On Wed, Sep 20, 2017 at 11:46 AM, Maximilian
>>> Hartig<imilian.hartig at gmail.com
>>> <mailto: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/
>>> <http://www.caam.rice.edu/%7Emk51/>
>>
>>
>>
>>
>> --
>> 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/ <http://www.caam.rice.edu/%7Emk51/>
>
>
>
>
> --
> 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/ <http://www.caam.rice.edu/%7Emk51/>
--
-------------------------------------------------------------------
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
FAX: +1 510 643 5264
s_g at berkeley.edu
http://faculty.ce.berkeley.edu/sanjay
-------------------------------------------------------------------
Books:
Engineering Mechanics of Deformable
Solids: A Presentation with Exercises
http://www.oup.com/us/catalog/general/subject/Physics/MaterialsScience/?view=usa&ci=9780199651641
http://ukcatalogue.oup.com/product/9780199651641.do
http://amzn.com/0199651647
Engineering Mechanics 3 (Dynamics) 2nd Edition
http://www.springer.com/978-3-642-53711-0
http://amzn.com/3642537111
Engineering Mechanics 3, Supplementary Problems: Dynamics
http://www.amzn.com/B00SOXN8JU
-----------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170920/93f44bc4/attachment-0001.html>
More information about the petsc-users
mailing list