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}\]
- 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