Regime switching model ====================== Overview -------- This model selects a stress and history update function from a input list of :doc:`NEMLModel_sd` objects based on a normalized activation energy. This activation energy is a function of strain rate and temperature and the form of the normalized energy comes from the work of Kocks and Mecking [KM2003]_. The input to the metamodel is a list of material models and a corresponding list of activation energy cutoffs :math:`\left[g_1, g_2, \dots, g_n \right]`. When the caller requests a stress and history update this metamodel first calculates the normalized activation energy .. math:: g = \frac{k T}{\mu b^3} \ln\frac{\dot{\varepsilon}_0}{\dot{\varepsilon}}. Here :math:`k` is the Boltzmann constant, :math:`T` the current value of temperature, :math:`\mu` the current, temperature-dependent shear modulus, :math:`b` a Burgers vector, :math:`\dot{\varepsilon}_0` a reference strain rate, and :math:`\dot{\varepsilon}` the current equivalent strain rate, computed as .. math:: \dot{\varepsilon} = \frac{\varepsilon_{n+1} - \varepsilon_{n}}{t_{n+1} - t_{n}} with .. math:: \varepsilon_{n+1} = \sqrt{\frac{2}{3}\bm{\varepsilon}_{n+1}:\bm{\varepsilon}_{n+1}} and similarly for state *n*. If :math:`g`, Vector of base models, No ``gs``, :code:`std::vector<`:code:`double`:code:`>`, Corresponding vector of energies, No ``kboltz``, :code:`double`, Boltzmann's constant, No ``b``, :code:`double`, Burger's vector length, No ``eps0``, :code:`double`, Reference strain rate, No ``alpha``, :cpp:class:`neml::Interpolate`, Temperature dependent instantaneous CTE, ``0.0`` Class description ----------------- .. doxygenclass:: neml::KMRegimeModel :members: :undoc-members: