Mori-Tanaka
- class mechmean.approximation.MoriTanaka(phases, **kwargs)[source]
Bases:
TwoPhaseComposite
Approximate strain localization following [Mori1973].
The ansatz [Gross2016] (equation 8.101)
\[\begin{align*} \left<\mathbb{\varepsilon}\right>_{\text{i}} = \mathbb{A}^{\text{SI}} \left[ \left< \mathbb{\varepsilon} \right>_{\text{m}} \right] \end{align*}\]leads to
\[\begin{split}\begin{align*} \left<\mathbb{\varepsilon}\right> &= c_{\text{m}} \left<\mathbb{\varepsilon}\right>_{\text{m}} + c_{\text{i}} \left<\mathbb{\varepsilon}\right>_{\text{i}} \\ &= c_{\text{m}} \left(\mathbb{A}^{\text{SI}}\right)^{-1} \left<\mathbb{\varepsilon}\right>_{\text{i}} + c_{\text{i}} \left<\mathbb{\varepsilon}\right>_{\text{i}} \\ &= \underbrace{ \left( c_{\text{m}} \left(\mathbb{A}^{\text{SI}}\right)^{-1} + c_{\text{i}} \mathbb{I}^{\text{S}} \right) }_{\left( \mathbb{A}_{\text{i}}^{\text{MT}} \right)^{-1}} \left<\mathbb{\varepsilon}\right>_{\text{i}} \end{align*}\end{split}\].
Note
The Hill polarization of the inclusion \(\mathbb{P}_{\text{i}}\) represents the geometry of the inclusion and depends on the material properties of the matrix.
- __init__(phases, **kwargs)[source]
- Parameters
phases (dict) – Valid phases are ‘inclusion’ and ‘matrix’.
phases['inclusion']['material'] (mechkit.material.Isotropic) – Inclusion material
phases['inclusion']['volume_fraction'] (float) – Volume fraction of inclusion
phases['inclusion']['hill_polarization'] (np.array (mandel6_4)) – Hill polarization
phases['matrix']['material'] (mechkit.material.Isotropic) – Matrix material
- calc_A_MT_i(c_i, A_SI_i)[source]
Calc strain localization by Mori-Tanaka assumption with
\[\begin{align*} \mathbb{A}_{\text{i}}^{\text{MT}} &= \left( c_{\text{m}} \left( \mathbb{A}_{\text{i}}^{\text{SI}} \right)^{-1} + c_{\text{i}} \mathbb{I}^{\text{S}} \right)^{-1} \end{align*}\]Note
See [Weng1990] (2.22) for a connection between average strain localization tensors of the Mori-Tanaka scheme and Hashin-Shtrikman-Walpole scheme, as the above equation can be cast into the following form:
\[\begin{split}\begin{align*} \mathbb{A}_{\text{i}}^{\text{MT}} &= \mathbb{A}_{\text{i}}^{\text{SI}} \left( c_{\text{m}} \mathbb{I}^{\text{S}} + c_{\text{i}} \mathbb{A}_{\text{i}}^{\text{SI}} \right)^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% &= \mathbb{A}_{\text{i}}^{\text{SI}} \left( \left< \mathbb{A}^{\text{SI}} \right> \right)^{-1} \;\; \text{with $\mathbb{A}_{\text{m}}^{\text{SI}}=\mathbb{I}$ } \\ \end{align*}\end{split}\]Note that \(\mathbb{A}_{\text{i}}^{\text{SI}} (P, C_{\text{i}}, C_{\text{surrounding material}} )\) is a function of the matrix stiffness in the Mori-Tanaka context and a function of the stiffness of the reference material in the Hashin-Shtrikman context.
- Parameters
c_i (float) – Volume fraction of inclusion.
A_SI_i (np.array (mandel6_4)) – Strain localization of inclusion.
- Returns
Strain localization Mori-Tanaka.
- Return type
np.array (mandel6_4)
- class mechmean.approximation.MoriTanakaOrientationAveragedBenveniste(**kwargs)[source]
Bases:
MoriTanaka
Include fiber orientation in Mori-Tanaka approximation following [Benveniste1987] and [Brylka2017] equation (2.73).
Use \(\left<\mathbb{A}_{\text{i}}^{\text{MT}}\right>_{\text{f}}\) as \(\mathbb{A}_{\text{i}}^{\text{Approximated}}\) with
\[\begin{align*} \left<\mathbb{A}_{\text{i}}^{\text{MT}}\right>_{\text{f}} = \left( c_{\text{m}} \left( \left< \mathbb{A}_{\text{i}}^{\text{SI}} \right>_{\text{f}} \right)^{-1} + c_{\text{i}} \mathbb{I}^{\text{S}} \right)^{-1} \end{align*}\]and with the orientation averaged strain localization of the single inclusion problem \(\left<\mathbb{A}_{\text{i}}^{\text{SI}}\right>_{\text{f}}\).
Examples
>>> import mechkit >>> inp = { 'E_f': 73.0, 'E_m': 3.4, 'N4': np.array( [[ 4.09e-01, 1.48e-01, 1.03e-02, -2.20e-03, -1.86e-02, 3.52e-02], [ 1.48e-01, 2.51e-01, 6.50e-03, -2.00e-03, -5.50e-03, 3.11e-02], [ 1.03e-02, 6.50e-03, 9.70e-03, 8.00e-04, -1.20e-03, 4.00e-04], [-2.20e-03, -2.00e-03, 8.00e-04, 1.30e-02, 5.00e-04, -7.70e-03], [-1.86e-02, -5.50e-03, -1.20e-03, 5.00e-04, 2.06e-02, -3.20e-03], [ 3.52e-02, 3.11e-02, 4.00e-04, -7.70e-03, -3.20e-03, 2.97e-01]] ), 'c_f': 0.22, 'nu_f': 0.22, 'nu_m': 0.385, }
>>> inclusion = mechkit.material.Isotropic( E=inp['E_f'], nu=inp['nu_f'], ) >>> matrix = mechkit.material.Isotropic( E=inp['E_m'], nu=inp['nu_m'], ) >>> averager = mechmean.orientation_averager.AdvaniTucker(N4=inp['N4']) >>> P_func = mechmean.hill_polarization.Castaneda().needle
>>> input_dict = { 'phases': { 'inclusion': { 'material': inclusion, 'volume_fraction': inp['c_f'], 'hill_polarization': P_func(matrix=matrix), }, 'matrix': { 'material': matrix, }, }, 'averaging_func': averager.average, }
>>> mori = mechmean.approximation.MoriTanakaOrientationAveragedBenveniste(**input_dict) >>> C_eff = mori.calc_C_eff() [[ 1.479e+01, 7.000e+00, 5.045e+00, -3.118e-02, -2.842e-01, 4.863e-01], [ 7.000e+00, 1.251e+01, 5.057e+00, -2.973e-02, -7.226e-02, 4.390e-01], [ 5.045e+00, 5.057e+00, 8.827e+00, 1.472e-02, -1.303e-02, -2.303e-02], [-3.118e-02, -2.973e-02, 1.472e-02, 3.824e+00, 1.668e-02, -1.239e-01], [-2.842e-01, -7.226e-02, -1.303e-02, 1.668e-02, 3.982e+00, -4.843e-02], [ 4.863e-01, 4.390e-01, -2.303e-02, -1.239e-01, -4.843e-02, 8.386e+00]])
- __init__(**kwargs)[source]
- Parameters
.... – Parameters of
mechmean.approximation.MoriTanaka
and in addition:averaging_func (function) – Function averaging fourth order tensor.
- calc_A_SI_i()[source]
Some orientation averaging schemes are restricted to quantities with transversal isotropic material symmetry. \(\mathbb{A}_{\text{i}}^{\text{SI}}\) may lack this symmetry. The orientation averaging scheme is applied to an intermediate, stiffness-like quantity \(\mathbb{A}^{\star}\) leading to
\[\begin{split}\begin{align*} \mathbb{A}^{\star} &= \text{d}\mathbb{C} \mathbb{A}^{\text{SI}} \\ \left<\mathbb{A}^{\star}\right>_{\text{f}} &= \text{Orientation average}\left(\mathbb{A}^{\star}\right) \\ \left<\mathbb{A}_{\text{i}}^{\text{SI}}\right>_{\text{f}} &= \left(\text{d}\mathbb{C}\right)^{-1} \left<\mathbb{A}^{\star}\right>_{\text{f}} \\ \text{with } \;\; \text{d}\mathbb{C} &= \mathbb{C}_{\text{i}} - \mathbb{C}_{\text{m}}. \end{align*}\end{split}\]