kimauth / MaterialModels.jl

A libary of mechanical material models for finite element simulations.
MIT License
12 stars 6 forks source link

material_response inputs and outputs #15

Open kimauth opened 3 years ago

kimauth commented 3 years ago

From #14 :

I think we should decide what the material should output, ie dSdE or dPdF etc... If we should allow "delta-strains" (Δε) or force ε + state variable.

I agree that we should have decisions on both of these. My thoughts are:

  1. dSdE / dPdF etc: Can we handle this via the strain trait, too? The stress and the strain measure are closely connected, are they? Which would be the output that is closest related to the small strain model (i.e. which one should it be so that in the simplest case the same material routine can be used for small and finite strains) ?
  2. Δε vs. ε: I'm a little critical about the ε + state variable solution. It seems like a poor idea to me to store an additional (unneeded) state variable for every material point. On the other hand we could store the elastic or plastic part of the strain tensor instead of the stress (but I think this would mean additional operations for computing the trial stress).
KnutAM commented 3 years ago

My rough thoughts for 2 would be I think this choice also depend on what you want to use the state variables for, and you guys are working closer with the FE-implementations. Is there a requirement to save the stress in the state variables? And in the case of finite deformations, which stress? Or would the FE-code have a separate structure for saving such information that is not internal to the material?

In general, I think which option is best depends on your chosen model, and here are some thoughts...

Small strains:

Finite strains: The additive decomposition is no longer valid (in most cases, except for the spatial velocity gradient). Hence, Δ is not so relevant here. For rate-dependent elasticity the old deformation gradient (or another strain measure) could be required. However, if not supplying the deformation gradient but another (nonlinear) strain measure, I think one would need a rate + the current strain for viscoelasticity. Edit: Did not think this through: Δ could of course be used here in some cases, but not for the models that I have worked with. The previous note I perhaps though about additive decomposition into elastic and plastic parts, and that is not valid except for some velocity gradients. But I think the argument for the rate holds true as e.g. dE/dt = [[dF^T/dt]F + F^T [dF/dt]]/2 ≈ 0.5[ΔFᵗF FᵗΔF]/Δt ≠ΔE/Δt?

My conclusion Small strains: Δε vs. ε equally good (+ for ε in non-linear elasticity, + for Δε in viscoelasticity). Finite strains: Except for deformation gradients, new + rate is required for generality. However, I would say old and new deformation gradient makes most sense. After writing this and thinking, I would vote for passing two out of these four (strain measures): old, new, Δ, or rate. Which to choose depend a bit on whether a traits-wrapper will be used or not.

KnutAM commented 3 years ago

For 1: Small strain model would be closest to using Cauchy stress. The strain measure should be on the current configuration as well, and I think the choice is rather a modeling choice. Logarithmic strains are rather computationally costly, so perhaps the Almansi strain is reasonable: e=0.5(FF^T - I). This works for large rotations, but no so good for large compression - in that case log-strains are better.

lijas commented 3 years ago

Thanks Knut for the summary. A lot of stuff I had not thought about before. I probably need to read it 1 or 2 more times to make up mind of what I think is the best way to do it :P

Just some initial thoughts: We could have a different system for the small strains and large strains models, since they will never be called from the same element routine (I think). At first I though it would be smart to "force" the material models to always save the the stress as states variables (specifically the cauchy-stress), since this is something one usually wants to plot. But as Knut said, some models will use different stress measures, so maybe it is better to let the user deal with storing of the stress him/her-self.

kimauth commented 3 years ago

I think the only thing that we need agree on is if we pass ε or Δε. The history variables can differ from material to material and do not need to be the same. However, of course we want to avoid storing unnecessarily many history variables or doing unnecessarily many operations in the material_response routine.

For linear elasticity + plasticity / visco-plasticity (at least the one I've worked with is the same for this purpose), it doesn't matter if we store the stress tensor or the plastic strain (same number of operations required).

σ_trial = σ_old + E ⊡  Δε = E ⊡ (ε - εᵖ_old)

I've been using the stored stresses for convenient postprocessing, but they're rather easy to compute from displacements + plastic strain. I guess one could also argue that storing the plastic strain makes postprocessing strains easier in the same manner as arguing for the stresses.

I never worked with non-linear elasticity, so I'll have to trust you that handing over the full strain instead of the strain increment is better for it. But assuming it is, that would favor handing over the total strain.

Finally, I think even agreeing on one should only be a guideline. If for a certain material there are strong reasons to deviate that should just be well documented.

KnutAM commented 3 years ago

Just asked Carolyn, who is the floor expert at visco*-models: She relies on both the increment and the total strain for a pure viscoelastic model. So from that point of view, I guess it doesn't strengthen or weaken any option on \Delta\epsilon versus \epsilon...