We are developing C++ UDM to model nonlinear stress-strain behaviour including the unload-reload hysteresis using the Mohr-coulomb (or elastic) model as the basis. This was achieved by updating the shear modulus (shear) as a function of strain.
We employ this UDM in a 1-column model with free field and quiet boundary, applying a single shear wave at the base of the model and run dynamic analysis to model shear wave propagation. We managed to obtain stress-strain hysteresis response that match the prescribed backbone curve, however it doesn’t show any/little damped response.
For comparison, the same 1-column model was analysed using FLAC ‘default’ hysteresis model (ini dy_damp hyst default L1 L3) which represent comparable backbone curve. In addition, the UDM was also written for FLAC3D. Both models show comparable result with damped response i.e with significantly smaller reflected (2nd) wave indicating some degree of energy loss.
The figures below plot the calculated results (shear stress vs shear strain, shear stress vs time, acceleration vs time from the element at the base) from the 1-Column model with different material models:
- Linear elastic
- Elastic with Default hysteretic damping
- FLAC2D UDM
- FLAC3D UDM
The responses from the FLAC2D UDM is very similar to those from the linear elastic material (i.e no damping).
Our questions are:
- Is it possible that the nonlinear stress-strain behaviour input is not directly accounted for by FLAC in the calculation of damping?
- Comparing the UDM template for FLAC2D and FLAC3D, it seems the variable “hysteretic_damping_” in FLA2D (state.h) is replaced by “modulus_reduction_factor_” in FLAC3D. Is there more fundamental implication than the variable name itself? In general, we found the scripts worked in FLAC3D require some changes. And in this case, we cannot make it work for FLAC.
- How can we assure that hysteretic damping will be accounted for following the prescribed stress-strain behaviour in FLAC?
You should be hearing back from our Australia office very soon via email. Thanks.
We consider FLAC (v8.1) and FLAC2D (coming v9) are different software. Which one do you refer to?
I am talking about FLAC v8.1
First of all, FLAC v8.1 and FLAC3D v7 are based on different libs. Separate DLLs are required to be built in the specified development environments for FLAC and FLAC3D. Just follow the correct instruction in that software. In other words, if you build DLL in FLAC, follow FLAC instruction, not FLAC3D, and vise versa.
Second, we do not know what codes you wrote so it is hard for us to tell what exactly occurred.
Go back to your questions:
- Usually the hysteretic damping is for models with the constant modulus G0. The implemented would be a factor that multiplicated to G0 and give a new and reduced G. For nonlinear stress-strain behavior, there are two cases: caused by yielding or cased by nonlinear elasticity. Case #1 by yielding, FLAC/FLAC3D will turn off hysteretic damping if material is in yielding because the energy dissipation from the plasticity is big enough and thus extra hysteretic damping is unnecessary. Case #2 by nonlinear elasticity, it depends how you return the function getShearModulus() and how you reduce the modulus. for example, multiplication to the initial G0 or the updated G due to nonlinear elasticity. Things would be messed in this case because both reduction factor and G are changing. In sum, the hysteretic damping is supposed for models with a constant modulus.
- Again, follow the instruction in the designated software.
- We do not understand this question. Could you please explain more?
Hi Cheng, Thanks for looking into this! Please find our response below to each point:
#1. What we want to achieve is comparable to Case #2 (nonlinear elasticity), but without using the built-in ‘hysteretic damping’. Instead, our UDM will provide the stiffness reduction factor and we want to pass this reduction factor back to FLAC.
#2. Our UDM was written for FLAC810 using the C++ template for FLAC and is an extension of mohr-coulomb model. (In parallel, we have also written the UDM for FLAC3D separately using the C++ template for FLAC3D, which works.)
Here, we are focusing on FLAC810.
#3. As mentioned in the initial query, the UDM is aimed for dynamic analysis and with the capability to update the “tangent shear modulus” following a set of unload-reload hysteresis rule. This is achieved without using the built-in ‘hysteretic damping’ command. So far, the UDM has been able to produce the hysteresis loop (as shown by figures in the first thread), but no damping.
Our UDM subroutine run() includes the following lines:
reduction_factor = newG / shear_; // newG is the new tangent shear modulus calculated by the UDM as a function of shear strain
HDampInit(reduction_factor); // same as HDampInit() in FINN to update the stiffness
s->hysteretic_damping = reduction_factor;
The newG is also returned by the function getShearModulus()
Our expectation was that by passing the calculated “reduction_factor” to s->hysteretic_damping, FLAC810 will handle further calculation of energy dissipation.
Possibly, we are missing some steps to communicate the change in shear stiffness to FLAC810 (Note: we have also tried to set s->modulus_changed_ = true; )
Or maybe there are further steps necessary in the UDM to model the energy dissipation due to the hysteresis?
Our Australia office has forwarded your question to us, we will look into the code and see what causes the issue.
If the UDM has taken care of the modulus reduction in the constitutive relationship calculation, generally no extra reduction for hysteretic damping is required.