miércoles, 6 de mayo de 2020

Hiperelásticidad — Modelo neo-Hookean

En dos entradas anteriores (1, 2) ya he escrito sobre modelos hiperelásticos, y en una de mis primeras entradas mencioné, a un alto nivel, lo que representa formular hiperelasticidad en el Método de los Elementos Finitos (3). Debo aclarar, sin embargo, que para referirme a una formulación explícita y objetiva con miras a modelado numérico, lo cierto es que habría de plantear la conexión de dicho comportamiento con otros algoritmos de solución numérica del elemento finito (p. ej., métodos de Picard), para efectivamente dar ejemplo de su aplicación como tal. Y aunque realmente hay reto de proporciones suficientes en esto último, la limitación de llevarlo a cabo estriba en el tiempo de desarrollo y la depuración que debe hacerse al código que de ello emane una vez que se logre efectuar solución alguna. Por esto mis entradas han versado —y están acotadas— a la mención y anexo de algunos códigos (para ser preciso, de los modelos de Ogden y Extended-Tube). Como paréntesis, debo decir que las entradas que se han dedicado a ello han logrado que el blog tenga más vistas en su historia, por lo que es muy seguro que seguiré en esa vía, procurando guardar todo contenido relacionado con implementaciones numéricas del elemento finito como tal.

En esta entrada he decidido mencionar y presentar el modelo de neo-Hookean, que si bien no es un modelo moderno y totalmente efectivo (incluso es limitado y aplicable sólo para rangos muy concretos de algunos materiales), sí es una descripción matemática que permite predecir respuesta elástica no lineal a niveles de deformación unitaria menores al 150% en gomas.

Modelo neo-Hookean

El modelo neo-Hooke corresponde con una descripción de material constitutiva para ajustar comportamiento elástico a grandes deformaciones en materiales tipo goma, y se basa en dos parámetros materiales, a saber, de un módulo a cortante, $\mu$, y un módulo volumétrico, $\kappa$ (Bergstrom, 2015). Sobre la historia del modelo, la Wikipedia expone que fue propuesto por Rivlin (1948, 1997), sin embargo, y sin alguna pretensión más allá de referir lo que otros autores presentan (Guo, Z., y Sluys, L. J., 2006; Hill, 2001), se dice que éste corresponde con un caso especial del modelo de Mooney (1940), y que fue el Dr. L.R.G Treloar quien lo presentó en su famoso libro The Physics of Rubber Elasticity (Treloar, 1958) para ajustar datos de materiales gomosos. Lejos de todo dato histórico, sin embargo, el modelo ha tenido y tuvo su aplicación en la industria de las gomas, y su pretensión matemática ha servido a investigaciones recientes para modelar materiales con rangos elásticos no-lineales (p.ej., tejidos biológicos como se menciona en Dickinson, Steer, y Worsley, 2017).

La descripción formal del modelo neo-Hookean viene dada por el potencial de energía libre de Helmholtz por unidad de volumen, $\Psi$, como sigue:

\begin{equation}\Psi_{c}(I^{*}_{1}) = \frac{\mu}{2}\Big(I^{*}_{1}-3\Big) + \frac{\kappa}{2}\Big(J-3\Big)^2,\end{equation}
(1)

donde $I^{*}_{1}$ es el primer invariante de la energía libre Helmholtz, y $J = det[\mathbf{F}]$. Además, $I^{*}_{1} = J^{-2/3} tr[\mathbf{C}]$ , y $\mathbf{F}, \mathbf{C}$, son el tensor gradiente de deformación y el tensor derecho de deformación de Cauchy-Green, respectivamente.


En la Ec. (1), dado que $\Psi$ es lineal en $I^{*}_{1}$, efectivamente no es posible que los modelos de esfuerzos que se deriven de ello puedan "capturar" la respuesta de muchos materiales no-lineales a largas deformaciones por que se restringe a tal orden en su desarrollo. Además, ya que $\Psi$ no incluye al segundo invariante $I^{*}_{2}$, el modelo neo-Hookean tiene el consecuente problema de subestimar el esfuerzo de un material en condiciones de carga principalmente biaxial. Quizás éstas son las debilidades de tal modelo.

De la Ec. (1), al derivar $\Psi$ con respecto a $I^{*}_{1}$, se obtienen las ecuaciones de los esfuerzos de Cauchy para las condiciones de carga uniaxial, planar y biaxial, las cuales se presentan a continuación:

\begin{equation}\sigma_{u} = \mu\Big(\lambda^2 - \frac{1}{\lambda}\Big),\end{equation}
(2)

\begin{equation}\sigma_{p} = \mu\Big(\lambda^2 - \frac{1}{\lambda^2}\Big),\end{equation}
(3)

\begin{equation}\sigma_{b} = \mu\Big(\lambda^2 - \frac{1}{\lambda^4}\Big).\end{equation}
(4)

Nótese que, en las anteriores ecuaciones, se usa como medida de deformación el alargamiento del material $\lambda$, y además, se está despreciando la parte volumétrica del material por considerarse para materiales en un estado de incompresibilidad. Debido a esto, el módulo volumétrico $\kappa$ no está presente en ninguna de ellas y pierde influencia para estimar esfuerzos reales.

Algo remarcable del modelo neo-Hookean, con pesar de que no es del todo preciso para estimar esfuerzos en muchos materiales, es su "interpretabilidad" y sencillez. Quizás esto le ha permitido estar vigente en muchas de las investigaciones que se han publicado en la última década. Me explico: existen modelos constitutivos más complejos de material en el cual sus parámetros y variables propias del material, no son del todo inteligibles desde una perspectiva experimental, por lo que muchos investigadores optan por un método sencillo como el modelo neo-Hookean para predecir respuestas en materiales y extraer conclusiones. Para ilustrar el caso, supóngase el modelo Extended-Tube (revisado aquí 2), en el cual la mayoría de sus variables de material no son del todo interpretables, y sus valores, a la hora de ajustar la curva de un material, más que obtenerse de experimentación, se adquieren a través de optimización numérica (este es un tema de profundidad relativamente amplia en cuestiones de simulación numérica). Así, de esta manera, aunque el modelo neo-Hookean no es del todo perfecto, sí tiene ese componente de explicación científica desde los parámetros de material $\mu$ y $\kappa$ —que son derivados de pruebas experimentales—, y aunque esto puede pasar por desapercibido por los recién iniciados en el tema, tiene toda una trascendencia incluso filosófica cuando de «modelado científico» se trata.

Como ya es costumbre en este tipo de entradas, al final de esta se adjunta un código en C++ que implementa el modelo neo-Hookean para el caso uniaxial incompresible de la Ec. (2)., en el cual se utiliza un valor de $\mu = 0.406758$. La Figura 1 presenta las estimaciones logradas con esa condición de material y las compara con los datos de tensión uniaxial de Treloar para una goma vulcanizada.
Figura 1. Comparación de datos esfuerzo-deformación a tensión uniaxial de una goma vulcanizada usando el modelo neo-Hookean para $\mu = 0.406758$.

En la Figura 1 se observa que la estimación del modelo respecto al esfuerzo real es cercana a niveles menores a la unidad de la deformación uniaxial. Por ello, no es recomendable su uso cuando se presenten este tipo de situaciones.


Conclusión

El modelo neo-Hookean, con pesar de ser un modelo muy sencillo y el cual no estima con gran precisión muchos materiales hiperelásticos, sí es una descripción de la respuesta energética a la deformación de un material que ofrece explicación de su comportamiento. Esta parte es fundamental, pues, aunque existen muchos modelos muy precisos, estos últimos tienen debilidades para poder extraer explicaciones del comportamiento de un material. De esta forma, se puede concluir que el modelo neo-Hookean todavía es relevante, por lo que no se debe descartar su aplicación cuando ajusta de manera suficiente a un material, pues es preferible su aplicación por el principio de parsimonia, su poder explicativo, y su posibilidad de implementación en códigos más sofisticados.


Alejandro



Referencias
  1. Guo, Z., & Sluys, L. J. (2006). Application of a new constitutive model for the description of rubber-like materials under monotonic loading. International Journal of Solids and Structures, 43(9), 2799–2819. 
  2. Hill, J. M. (2001). A review of partial solutions of finite elasticity and their applications. International Journal of Non-Linear Mechanics, 36(3), 447–463. https://doi.org/10.1016/s0020-7462(00)00041-x
  3. Mooney, M. (1940). A Theory of Large Elastic Deformation. Journal of Applied Physics, 11(9), 582–592. https://doi.org/10.1063/1.1712836
  4. L.R.G. Treloar (1958). The Physics of Rubber Elasticity, (second ed.), Oxford University Press, Glasgow.
  5. Rivlin R.S. (1997) Large Elastic Deformations of Isotropic Materials. I. Fundamental Concepts. In: Barenblatt G.I., Joseph D.D. (eds) Collected Papers of R.S. Rivlin. Springer, New York, NY
  6. Kim, B., Lee, S.B., Lee, J. et al. (2012). A comparison among Neo-Hookean model, Mooney-Rivlin model, and Ogden model for chloroprene rubber. Int. J. Precis. Eng. Manuf. 13, 759–764  https://doi.org/10.1007/s12541-012-0099-y
  7. Dickinson, A. S., Steer, J. W., & Worsley, P. R. (2017). Finite element analysis of the amputated lower limb: A systematic review and recommendations. Medical Engineering & Physics, 43, 1–18. https://doi.org/10.1016/j.medengphy.2017.02.008
  8. Kim, B., Lee, S.B., Lee, J. et al . A comparison among Neo-Hookean model, Mooney-Rivlin model, and Ogden model for chloroprene rubber. Int. J. Precis. Eng. Manuf. 13, 759–764 . https://doi.org/10.1007/s12541-012-0099-y

/* © 2020 Alejandro E. Rodriguez.  All rights reserved. //For personal use only.
It is not permitted to distribute verbatim copies of this document,
and changing it is not allowed. Contact the owner of the code at alejando(at)arodsn.com or the arodsn.com blog
for further permissions.*/

#include <math.h>
#include <fstream>
#include <vector>
using namespace std;

std::vector<double> neoHookean(std::vector<double> trueStrain, double mu)
{
 std::vector<double> stress(trueStrain.size());
 std::vector<double> lam(trueStrain.size());
 
 for (int i = 0; i < trueStrain.size(); i++)
 {
  lam[i] = exp(trueStrain[i]);
 }

 //Tensile
 for (int i = 1; i < trueStrain.size(); i++)
 {
  stress[i] += mu*(lam[i]*lam[i]-1/lam[i]);
 }
 return stress;
}

void main() {

 ofstream Sigma;
 Sigma.open("Sigma.csv");
 ofstream Epsilon;
 Epsilon.open("Epsilon.csv");

 std::vector<double> trueStrain(100);
 for (int i = 0; i < trueStrain.size(); i++) {
  trueStrain[i] = (0.022) * i;
 }

 std::vector<double> trueStress(trueStrain.size());
 double mu = 0.406758;

 double matrix[100][2]; ///

 trueStress = neoHookean(trueStrain, mu);

 for (int i = 0; i < trueStrain.size(); i++) {
  Epsilon << trueStrain[i] << "\n";
  Sigma << trueStress[i] << "\n";

  matrix[i][0] = exp(trueStrain[i]) - 1; 
  matrix[i][1] = (trueStress[i]) / exp(trueStrain[i]); 
 }

 ofstream Matrix;
 Matrix.open("Matrix.csv");

 for (auto& row : matrix) {
  for (auto col : row)
   Matrix << col << ',';
  Matrix << '\n';
 }

 Epsilon.close();
 Sigma.close();
 Matrix.close();
}

No hay comentarios.:

Publicar un comentario