crack_growth#

The module py_fatigue.damage.crack_growth contains all the damage models related to the crack growth approach.

py_fatigue.damage.crack_growth.get_geometry_factor(crack_depth: float, crack_type: str, crack_geometry: dict) float#

Get the geometric factor. This should be a function of the crack size. The default value is 1.0.

py_fatigue.damage.crack_growth.get_sif(stress_: float, crack_depth_: float, crack_type: str, crack_geometry: Dict[list, float]) Tuple[float, float]#

Get the SIF value given the stress and the crack size. The method calculates the SIF value according to the following equation:

\[SIF = Y(a) \cdot \Delta \sigma \cdot \sqrt{\pi a}\]
Parameters:
  • stress (float) – Stress value.

  • crack_depth (float) – Crack size value.

  • crack_type (str) – Crack type.

  • crack_geometry (dict) – Crack geometry dictionary.

Returns:

SIF value, geometric factor.

Return type:

Tuple[float, float]

py_fatigue.damage.crack_growth.get_crack_growth(cycle_count: CycleCount, cg_curve: ParisCurve, crack_geometry: Type[ACG], express_mode: bool = False) CalcCrackGrowth#

Calculate the crack size by numerically integrating the crack growth curve. In this example we will consider the Paris’ law, but the function can be used with any other crack growth curve.

\[\begin{split}\begin{align} \begin{cases} \frac{da}{dN} & = C \left( \Delta K \right)^{m} \\ \Delta K & = Y(a) \cdot \Delta \sigma \sqrt{\pi a} \\ \end{cases} \end{align}\end{split}\]

From the equations above, the crack growths rate can be expressed as a function of the stress range. Considering the Paris’ law, as in this example, gives:

\[\frac{da}{dN} = C \left( Y(a) \cdot \Delta \sigma \sqrt{\pi a} \right)^{m}\]

se this crack growth rate together with the cycle step size to determine the incremental growth of the crack for this iteration:

\[\Delta a = \frac{da}{dN} \cdot \Delta N\]

The new crack size is then calculated by adding the incremental growth to the previous crack size:

\[a_{j+1} = a_{j} + \Delta a\]

where \(a_{j}\) is the crack size at the \(j\)-th cycle.

The crack is grown iteratively either until the failure condition is met or until the stress history is over.

If failure occurs, the total number of cycles that it took to grow the crack to the critical size becomes the predicted life of the part.

Parameters:
  • cycle_count (py_fatigue.CycleCount) – Cycle count object.

  • cg_curve (py_fatigue.ParisCurve) – The crack growth curve

  • crack_geometry (Type[ACG]) – The initial crack geometry

  • express_mode (bool, optional) – If True, the crack growth is calculated using the express mode. This mode is faster but ‘slightly’ less accurate. The default is False.

Returns:

The crack growth calculation object

Return type:

CalcCrackGrowth

class py_fatigue.damage.crack_growth.CrackGrowth(pandas_obj)#

Accessor for the crack growth calculation

Parameters:

pandas_obj (pd.DataFrame) – The pandas dataframe object that will be extended with the crack growth calculation results. The original dataframe must have the following columns: - stress_range - count_cycle - mean_stress The dataframe will be extended with the following columns: - crack_depth - sif - cumul_cycles - geometry_factor

calc_growth(cg_curve: ParisCurve, crack_geometry: Type[ACG], express_mode: bool = False)#

Calculate the crack_propagation of the given crack geometry.

Parameters:
  • cg_curve (py_fatigue.ParisCurve) – The crack growth curve

  • crack_geometry (Type[ACG]) – The initial crack geometry

  • express_mode (bool, optional) – If True, the crack propagation runs ‘express’, by default False

Returns:

The DataFrame with the results of the crack_growth analysis.

Return type:

DataFrame