Hashin-Shtrikman
- class mechmean.approximation.HashinShtrikmanWalpole(phases, P_func, averaging_func)[source]
Hashin-Shtrikman scheme formulated by [Walpole1966_I], [Walpole1966_II] formatted following [Fernandez2019] (equation 22) and applicable to non-spherical Hill polarization following [Walpole1969], [Willis1977] (page 190) and [Willis1981] (pages 36, 38) including a dual scheme for singular polarizations following [Walpole1969] (page 238).
\[\begin{split}\begin{align*} \mathbb{C}^{\text{eff}} &= \mathbb{C}_{\text{0}} - \mathbb{P}_{\text{0}}^{-1} + \left< \mathbb{W} \right>^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% \mathbb{W} &= \left( \mathbb{C} - \mathbb{C}_{\text{0}} + \mathbb{P}_{\text{0}}^{-1} \right)^{-1} \end{align*}\end{split}\]- with
\(\mathbb{C}_{\text{0}}\) : Stiffness of reference material
\(\mathbb{P}_{\text{0}}\) : Hill polarization of single inclusion in reference material
\(\mathbb{C}\) : Stiffness at location \(\boldsymbol{x}\) (piecewise constant phases)
\(\left<\right>\) : Suitable average for given microstructure. See e.g. [Walpole1966_II] equations 24, 25
Note
The Hill polarization \(\mathbb{P}_{\text{0}}\) reflects the symmetry of the two-point statistics (See [Willis1977] (page 188), [Fernandez2019] ).
- __init__(phases, P_func, averaging_func)[source]
- Parameters
phases (nested dict) – Each entry represents one phase.
phases[....]['material'] (material with .stiffness_mandel6) – Material of phase ‘…’.
phases[....]['W'] (None) – Phases must not have key ‘W’, because each phase-dict is extended by ‘W’. The resulting extended dict is passed to averging_func.
P_func (callcable) – Callable returning Hill polarization for given material.
averaging_func (callable) – Callable that takes nested dict of phases and calculates average of ‘W’.
- calc_C_eff(ref_material)[source]
Calc effective stiffness for given reference material
Handle singular polarizations.
- Returns
Effective stiffness
- Return type
np.array (mandel6_4)
- calc_strain_localization_tensor(key_phase, ref_material)[source]
Calc strain localization tensor
\[\begin{align*} \mathbb{A}_{\text{j}} = \mathbb{A}_{\text{j}}^{\text{SI}} \left< \mathbb{A}^{\text{SI}} \right>^{-1} \end{align*}\]mapping average strain to average strain in phase j.
\[\begin{align*} \left<\mathbb{\varepsilon}\right>_{\text{j}} = \mathbb{A}_{\text{j}} \left[ \left<\mathbb{\varepsilon}\right> \right] \end{align*}\]with
\(\mathbb{A}^{\text{SI}}\) : Strain localization tensor in single inclusion problem
\(\left<\right>\) : Suitable average for given microstructure
\(\left<\mathbb{\varepsilon}\right>_{\text{j}}\) : Average strain in phase j
\(\left<\mathbb{\varepsilon}\right>\) : Average strain
- Parameters
key_phase (str) – Key of phase j in dict phases
ref_material (mechkit.material.Isotropic) – Reference material
- Returns
Strain localization
- Return type
np.array (mandel6_4)
- calc_stress_localization_tensor(key_phase, ref_material)[source]
Calc stress localization tensor
\[\begin{align*} \mathbb{B}_{\text{j}} = \mathbb{C}_{\text{j}} \mathbb{A}_{\text{j}} \mathbb{C}_{\text{0}}^{-1} \end{align*}\]mapping average stress to average stress in phase j.
\[\begin{align*} \left<\mathbb{\sigma}\right>_{\text{j}} = \mathbb{B}_{\text{j}} \left[ \left<\mathbb{\sigma}\right> \right] \end{align*}\]with
\(\mathbb{C}_{\text{j}}\) : Stiffness of phase j
\(\mathbb{A}_{\text{j}}\) : Strain localization tensor of phase j
\(\mathbb{C}_{\text{0}}\) : Stiffness of reference material
\(\left<\mathbb{\sigma}\right>_{\text{j}}\) : Average stress in phase j
\(\left<\mathbb{\sigma}\right>\) : Average stress
- Parameters
key_phase (str) – Key of phase j in dict phases
ref_material (mechkit.material.Isotropic) – Reference material
- Returns
Stress localization
- Return type
np.array (mandel6_4)
- class mechmean.approximation.HSW_VolumeFraction(phases, P_func)[source]
mechmean.approximation.HashinShtrikmanWalpole
with volume average calculated as weighted summation
- class mechmean.approximation.HSW_SinglePhaseOrientation(phases, P_func, orientation_averager)[source]
mechmean.approximation.HashinShtrikmanWalpole
with orientation average over single phase- __init__(phases, P_func, orientation_averager)[source]
- Parameters
.... – Parameters of
mechmean.approximation.HashinShtrikmanWalpole
and in addition:orientation_averager (callable) – Returns orientation average of fourth order tensor given as first positional argument
- class mechmean.approximation.Kehrer2019(phases, averaging_func, k)[source]
Two-step Hashin-Shtrikman homogenization scheme for fiber reinforced composites [Kehrer2019]
Step 1
\[\begin{split}\begin{align*} \mathbb{C}_{\text{upp}} &= \mathbb{C}_{\text{i}} + c_{\text{m}} \text{d} \mathbb{C} \left( \mathbb{I}^{\text{S}} - c_{\text{i}} \mathbb{P}_{\text{i}}^{\text{UD}} \text{d} \mathbb{C} \right)^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% \mathbb{C}_{\text{low}} &= \mathbb{C}_{\text{m}} - c_{\text{i}} \text{d} \mathbb{C} \left( \mathbb{I}^{\text{S}} - c_{\text{m}} \mathbb{P}_{\text{m}}^{\text{UD}} \text{d} \mathbb{C} \right)^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% \text{d}\mathbb{C} &= \mathbb{C}_{\text{m}}-\mathbb{C}_{\text{i}} \end{align*}\end{split}\]with \(\text{j} \in [\text{i},\text{m}]\) and
\(c_{\text{j}}\) : Volume fraction of phase j
\(\mathbb{C}_{\text{j}}\) : Stiffness of phase j
\(\mathbb{P}_{\text{j}}^{\text{UD}}\) : Hill polarization of needle shape in material of phase j
Step 2
For \(\text{j} \in [\text{upp},\text{low}]\)
\[\begin{split}\begin{align*} \mathbb{C}_{\text{j}}^{\text{eff}} &= \mathbb{C}_{\text{0}} - \mathbb{P}_{\text{0}}^{-1} + \left< \mathbb{A}_{\text{j}}^{\star} \right>_{\text{orientation}}^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% \mathbb{A}_{\text{j}}^{\star} &= \left( \mathbb{P}_{\text{0}}^{-1} + \mathbb{C}_{\text{j}} - \mathbb{C}_{\text{0}} \right)^{-1} \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%% \mathbb{C}_{\text{0}} &= \left( 1-k \right) \mathbb{C}_{\text{m}} + k \mathbb{C}_{\text{i}} \end{align*}\end{split}\]with
\(k\) : Scalar weight of fiber phase in reference material.
\(\mathbb{C}_{\text{upp}}^{\text{eff}}\) : Upper effective stiffness
\(\mathbb{C}_{\text{low}}^{\text{eff}}\) : Lower effective stiffness
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, 'k': 0.5, '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'])
>>> input_dict = { 'phases': { 'inclusion': { 'material': inclusion, 'volume_fraction': inp['c_f'], }, 'matrix': { 'material': matrix, 'volume_fraction': 1. - inp['c_f'], }, }, 'k': inp['k'], 'averaging_func': averager.average, } >>> hashin = mechmean.approximation.Kehrer2019(**input_dict) >>> C_eff = hashin.calc_C_eff() Effective_stiffness( upper=array( [[ 1.793e+01, 6.792e+00, 6.440e+00, -7.925e-03, -1.225e-01, 2.797e-01], [ 6.792e+00, 1.666e+01, 6.502e+00, -1.443e-02, -9.110e-03, 2.566e-01], [ 6.440e+00, 6.502e+00, 1.438e+01, -2.853e-03, -4.822e-02, -3.038e-02], [-7.925e-03, -1.443e-02, -2.853e-03, 8.566e+00, 1.067e-01, -7.336e-02], [-1.225e-01, -9.110e-03, -4.822e-02, 1.067e-01, 8.955e+00, -1.951e-02], [ 2.797e-01, 2.566e-01, -3.038e-02, -7.336e-02, -1.951e-02, 1.099e+01]] ), lower=array( [[ 1.320e+01, 6.537e+00, 5.063e+00, -2.566e-02, -2.110e-01, 4.354e-01], [ 6.537e+00, 1.134e+01, 5.077e+00, -2.310e-02, -5.618e-02, 3.731e-01], [ 5.063e+00, 5.077e+00, 8.767e+00, 8.965e-03, -8.823e-03, -1.952e-02], [-2.566e-02, -2.310e-02, 8.965e-03, 3.737e+00, 1.406e-02, -9.265e-02], [-2.110e-01, -5.618e-02, -8.823e-03, 1.406e-02, 3.847e+00, -3.933e-02], [ 4.354e-01, 3.731e-01, -1.952e-02, -9.265e-02, -3.933e-02, 7.122e+00]] ) )
- __init__(phases, averaging_func, k)[source]
- Parameters
phases (dict) – Valid phases are ‘inclusion’ and ‘matrix’.
phases['inclusion']['material'] (mechkit.material.Isotropic) – Isotropic inclusion material.
phases['inclusion']['volume_fraction'] (float) – Volume fraction of inclusion.
phases['matrix']['material'] (mechkit.material.Isotropic) – Isotropic matrix material.
averaging_func (callable) – Callable averaging fourth order tensor.
k (float in range(0,1)) – Weight of fiber phase in reference material.
- class mechmean.approximation.Kehrer2019HSW(phases, averaging_func, k)[source]
Implementation of
mechmean.approximation.Kehrer2019
usingmechmean.approximation.HashinShtrikmanWalpole