Skip to content

Conversation

@atpellet
Copy link
Collaborator

@atpellet atpellet commented Oct 9, 2025

Implemented a simple associative viscoplastic flow rule for the MCC model.

In the original case of plasticity, the strain computed in src/simulation/plasticity.cpp, initially

$$\boldsymbol\varepsilon^{E, n+1} = \boldsymbol\varepsilon^{E, trial} - \dot\gamma \frac{\partial f}{\partial \boldsymbol\tau} \Delta t$$

becomes, with the associative viscosity

$$\boldsymbol\varepsilon^{E, n+1} = \boldsymbol\varepsilon^{E, trial} - \frac{\dot\gamma}{\eta} \frac{\partial f}{\partial \boldsymbol\tau} \Delta t$$

with $\eta$ the viscosity.

This modification has necessitated to create a new version of the MCCRMAExcplicit() in src/plasticity_helpers/mcc_rma_explicit.cpp in order the extract $\Delta\Gamma=\Delta t\dot\gamma$ with $\dot\gamma$ the plastic multiplier, such that $\boldsymbol{l}^P = \dot\gamma \frac{\partial y}{\partial \boldsymbol\tau}$.
In the code, $\Delta\Gamma$ is called Delta_GAMMA.

@larsblatny
Copy link
Owner

Hi @atpellet. This is fantastic, thanks for contributing your model!
Before merging, i just want to quickly review the code.

One first question: It seems that the new plasticity helper function only differs from MCCRMAExcplicit by making the delta_gamma returnable? Perhaps we can find a non-intrusive way to add this directly to the existing code so we don't need to duplicate the entire code for such a small change?

On another note, I have not seen this kind of viscoplasticity before so if you have some references that use or introduce similar models I would be very interested. One concern I have is in line 653 and 654 of plasticity.cpp where dydp and dydq (which you need to shift the (p,q)-point from the yield surface to a point away from the yield surafce given by eta) are calculated based on the point on the yield and not on the n+1 point. Are you sure this would give the same result? I suppose this could be easily verified. It is also clear that eta is a unitless parameter, right? So maybe viscosity/eta is not the right term for it?

Just of a minor note, particles.delta_gamma should save only the deviatoric part, that is gamma_dot_S. I realized that this is not explained anywhere... Please also consider renaming Delta_GAMMA to lowercase letters.

@atpellet
Copy link
Collaborator Author

Hi @larsblatny,

I provided a solution for the MCC_RMA_EXPLICIT() duplicate issue by passing delta_gamma as an optional pointer. It is not the most elegant or robust solution by this way no other change is needed.

They were some dimension issues with my viscosity, I have corrected and formatted it better. It now has a form often called Duvaut-Lion viscosity (there is extensive research on the subject). Basically, the viscoplastic strain is computed from the distance between the trail state and it's projection to the yield surface. The input parameter is the viscosity eta (Pa.s), but the compuations use a relaxation time defined as t_relax = eta/E (Youngs modulus).

I am not sure I fully understood your issue when saying One concern I have is in line 653 and 654 of plasticity.cpp where dydp and dydq (which you need to shift the (p,q)-point from the yield surface to a point away from the yield surafce given by eta) are calculated based on the point on the yield and not on the n+1 point.. Is it still a concern of yours ? If yes, can you develop ?

Cheers.
A. Pellet

PS : In my case, particles.delta_gamma stores the full plastic norm. I guess it is not an issue since this value is never used and just outputted in particles.ply ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants