Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

change composite vep to log iteration #5337

Closed
wants to merge 2 commits into from

Conversation

bobmyhill
Copy link
Member

This PR changes the iterative scheme for the composite viscoplastic rheology to use the log stress and strain rate.
This should be a more linear system and therefore be more efficient.

@bobmyhill
Copy link
Member Author

/rebuild

Copy link
Contributor

@naliboff naliboff left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@bobmyhill - Nice, the way you designed the composite model made this a really straightforward optimization!

Question - would there be further performance improvements by implementing the same changes as in #5227 when calculating the derivatives for additional rheology mechanisms, or is just a modification to the iteration over all the mechanisms (as done here) that will likely provide the significant improvement?

This PR looks largely good to after the testers finish and we see what changes. Thanks!

@bobmyhill
Copy link
Member Author

Hi @naliboff, after I fix the bug, this will do the same thing as @lhy11009's change to Peierls. It will be marginally more expensive, but not sufficient to need a further change

@lhy11009
Copy link
Contributor

@bobmyhill, I agree with @bobmyhill , this is really neat solution.

@bobmyhill
Copy link
Member Author

Ok, the problem here is with the (damped) Drucker-Prager, where
dln(strain_rate) / dln(stress) = stress / (stress - yield_stress).
At the yield stress, this value is undefined.
For the undamped scheme, the strain rate is also non-unique above the yield stress, making the problem worse.

With a damped plastic element there is always a unique stress for any given strain rate, but a naive Newton scheme without line search is going to struggle to find it.
With an undamped plastic element an iterative scheme is not required; if the plastic element is active then it accommodates all the strain - so this would be easy enough to implement.

Not sure what the best solution is to this problem. Line search (e.g. using SUNDIALS) would certainly help. Maybe there's another option.

FYI: @lhy11009, @naliboff

@bobmyhill bobmyhill force-pushed the iterate_vp branch 4 times, most recently from 9064c53 to 1b11d2d Compare July 28, 2023 15:42
@bobmyhill
Copy link
Member Author

@bangerth ... KINSOL's linesearch solves this problem, but those almost-duplicated calls (the numerical derivatives) are still there, so it takes about double the number of function calls in the material model.

@bobmyhill
Copy link
Member Author

Improved implementation at #5978

@bobmyhill bobmyhill closed this Jul 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants