How to get DDSDDE for strain softening material or damage elastic material?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

How to get DDSDDE for strain softening material or damage elastic material?

rudra_civil
Hello Colleagues,
 I am trying to implement a continuum damage mechanics based constitutive model in Abaqus using the user-defined subroutine UMAT. In that context, I am having hard time finding any available example UMAT subroutine which is modeling only damage elastic material (no plasticity).

 
 In my model I am assuming isotropic scalar damage and single scale modeling (no multiscaling feature) framework. Once I get the updated damage for an increment or iteration, I update DDSDDE. The code works fine until peak stress, i.e. until softening happens. I am using viscous stabilization to complete the simulation. However, the overall strain vs. stress plot shows brittle pattern of failure due to localization (for all simulation having more than one element).
 
 A snippet of my UMAT code is given below showing DDSDDE update.
 

 ! *************************************************************************
 ! Update stress and DDSDDE at the end after updating damage
 ! *************************************************************************

     IF (TC_StrnState .GT. 0.d0) THEN
   CALL DDSDDE_Update(DDSDDE,MATPROP%L_T,Omega, NTENS)
     ELSE IF (TC_StrnState .LT. 0.d0) THEN    
   CALL DDSDDE_Update(DDSDDE,MATPROP%L_C,Omega, NTENS)
     END IF
       Stress = MATMUL(DDSDDE,Stran)
 


 !***********************************************************************
 !    DDSDDE update
 !***********************************************************************
 SUBROUTINE DDSDDE_Update(DDSDDE, LMAT,Omega, NTENS)
     REAL(KIND=8), INTENT(IN) :: Omega, LMAT(6,6)
     REAL(KIND=8):: Strss(6), Strn(6)
     INTEGER :: I, NTENS
     REAL(KIND=8), INTENT(OUT) :: DDSDDE(6,6)
     DO I = 1,NTENS
         Strn = 0.d0
         Strn(I) = .000001d0  
     Strss =0.d0
 Strss = Strss+ (1.d0-Omega)*MATMUL(LMAT,Strn)
 DDSDDE(:,I)= Strss(:)/.000001d0
     END DO
  RETURN
 END SUBROUTINE DDSDDE_Update    
 !***********************************************************************
 !***********************************************************************

 
 I have 2 thoughts on modeling damage elastic material in Abaqus using UMAT:
 
 
 From my experience I have seen Abaqus examples related to snapping for structural geometry, but not snapping in damage elastic material. On the other hand, when I am using Riks method or Arclength method in Abaqus no localization happens. All the elements in my geometrical model fails and the strain vs. stress behavior is no longer brittle. Here is the dilemma, we are losing the physical insight to get energy consistent result. Is there any available technique for the commercial software Abaqus to handle material localization, especially when used with user subroutine UMAT ? The second possibility is that I am doing something wrong in my code? Do I need to get some other expression for consistent tangent stiffness matrix or DDSDDE update after damage accumulation? Looking for your comments.

Thank you.
Reply | Threaded
Open this post in threaded view
|

Re: How to get DDSDDE for strain softening material or damage elastic material?

shayan_seg
Hi, 
In the past, I implemented a similar elastic model with a damage model without plasticity. That UMAT code worked quite well even after softening. However, in that study, all the softened elements had some minor elasticity, even if they were completely damaged and the time increments were very small.
For your model, I do not have all the information about your code, and therefore, I cannot go into details. But as you mentioned that your model did not experience any divergence before the peak stress, I assume that your DDSDDE is accurate (it is only an assumption meaning that your code and DDSDDE could also be inaccurate). So maybe the divergence arose either from the low local elasticity of your model or from the high localization effect.
One remedy, as you did, is the artificial viscosity. However, if still, the localization exists considerably, as you mentioned, you ought to solve it, considering that it could also affect your results. A nearly ideal method to address this localization issue is based on averaging the integration point data locally. Accordingly, you need to get the data from each integration point through the URDFIL subroutine. Then, you should average your strain or stress parameters based on the neighboring integration points depending on their distance. Subsequently, the new STRESS/STRAIN arrays should be transferred to the UMAT subroutine so that you can use their values instead of the default values in the UMAT. This approach might help if other parts of your model and code, including the DDSDDE, were correct. For more details, refer to section 2.2 of the following article:
Quiroga, JM Párraga, et al. "The effect of loading rate on the development of early damage in articular cartilage." Biomechanics and modeling in mechanobiology 16.1 (2017): 263-273.

Sincerely,Seyed Shayan SajjadiniaPh.D. Student at Unibz
Sent from Yahoo Mail on Android
Reply | Threaded
Open this post in threaded view
|

Re: How to get DDSDDE for strain softening material or damage elastic material?

rudra_civil
Dear Seyed Shayan Sajjadinia,
 

Thank you for your valuable response.  I understand that an averaging technique, as you are suggesting, like non-local method will solve the problem of localization. I am more concerned about the DDSDDE calculations. How do you update DDSDDE when damage accumulation happens i.e. the magnitude of damage is between 0 and 1? Can you please provide me with a sample UMAT code or consistent tangent stiffness matrix formulation for damage elastic material so that I can check my DDSDDE calculation?
Reply | Threaded
Open this post in threaded view
|

Re: How to get DDSDDE for strain softening material or damage elastic material?

shayan_seg
Hi again,

 I really cannot assess the quality of your DDSDDE as I have not checked your model, and yes, it could also be inaccurate. For my UMAT code, I need to find it among my very old files, and I am not sure I still have kept it, but If you need it, please send an email to me ([hidden email]). In my UMAT code, I used a single DDSDDE array for both before and after damage so that the damage parameter was always in my STRESS tensor. I did not have two different DDSDDE, and instead, the damage parameter acted as a material parameter, which gradually was changed depending on the values of the other parameters. So, I have not done any other modification on my DDSDDE after damage.
 

 If the divergence arose by the localization effects, your strategy of using the artificial viscosity is entirely reasonable unless their amount was not considerable, considering that this method is generally used for any local instabilities, such as surface wrinkling, material instability, etc.
 

 If your DDSDDE for the damaged model was not accurate, but the solution was converged, go for it, and do not care about the DDSDDE. Because most probably, it cannot have affected your model on condition that the other parts of your code were precise. In case you have significant divergence issues, make sure your code is accurate by checking the output of each line and check your algorithm and the mathematical equations. If you couldn't find the source of errors, changing the material model or your overall model might help. DO NOT WASTE YOUR TIME ON ONE PARTICULAR UMAT.
 

 Finally, I highly recommend you to use the USDFLD subroutine so that you can implement your damage model with your possibly accurate DDSDDE without damage in your UMAT code, and you can check the accuracy of the DDSDDE by comparison. So, you do not need to include your damage model in your UMAT, and in some cases, you also do not need even to use UMAT subroutines at all!
 

 

 Sincerely,
 Seyed Shayan Sajjadinia
 Ph.D. Student at Unibz