The fkm_load_distribution module#

Scale a load sequence for FKM nonlinear load distribution safety.

The accessors in this module multiply a stress or load sequence by the FKM nonlinear load factor \(\gamma_L\). The factor accounts for the assumed load distribution, the assessment failure probability \(P_A\), and the load probability \(P_L\) of either 2.5 percent or 50 percent.

The FKM nonlinear guideline defines three possible methods to consider the statistical distribution of the load:

  • Normal distribution with standard deviation \(s_L\).

  • Lognormal distribution with logarithmic standard deviation \(LSD_s\).

  • Unknown distribution, using \(\gamma_L = 1.1\) for \(P_L = 2.5\%\).

The corresponding accessors are fkm_safety_normal_from_stddev, fkm_safety_lognormal_from_stddev, and fkm_safety_blanket.

The resulting scaling factor can be retrieved with .gamma_L(input_parameters), the scaled load series can be obtained with .scaled_load_sequence(input_parameters).

Notes

The statistical load factors implement FKM nonlinear guideline clause 2.3.2.

Examples

>>> input_parameters = pd.Series({"P_A": 1e-5, "P_L": 50, "s_L": 10, "LSD_s": 1e-2,})
>>> load_sequence = pd.Series([100.0, 150.0, 200.0], name="load")
>>> # uses input_parameters.s_L, input_parameters.P_L, input_parameters.P_A
>>> load_sequence.fkm_safety_normal_from_stddev.scaled_load_sequence(input_parameters)
0    114.9450
1    172.4175
2    229.8900
Name: load, dtype: float64
>>> # uses input_parameters.s_L, input_parameters.P_L, input_parameters.P_A
>>> load_sequence.fkm_safety_lognormal_from_stddev.scaled_load_sequence(input_parameters)
0    107.124794
1    160.687191
2    214.249588
Name: load, dtype: float64
>>> # uses input_parameters.P_L
>>> load_sequence.fkm_safety_blanket.scaled_load_sequence(input_parameters)
0    100.0
1    150.0
2    200.0
Name: load, dtype: float64
class pylife.strength.fkm_load_distribution.FKMLoadDistributionBlanket(pandas_obj)[source]#

Scale a load sequence with the FKM blanket load factor.

Use this accessor when the statistical load distribution is unknown. For \(P_L = 2.5\%\) it applies the constant blanket factor \(\gamma_L = 1.1\); for \(P_L = 50\%\) it leaves the load unchanged.

Signal contract:

Parameters:

pandas_obj (pandas.Series or pandas.DataFrame) – Load sequence or stress sequence. Stress values are typically given in MPa.

See also

FKMLoadDistributionNormal

Scale loads with a normal distribution.

FKMLoadDistributionLognormal

Scale loads with a lognormal distribution.

Notes

Implement FKM nonlinear guideline clause 2.3.2.3. Prefer this accessor when no reliable statistical distribution parameters are available.

gamma_L(input_parameters)[source]#

Compute the scaling factor \(\gamma_L\).

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, has to be on of {2.5, 50}. (de: Ausfallwahrscheinlichkeit)

Returns:

Load scaling factor \(\gamma_L\), dimensionless.

Return type:

float

Raises:

ValueError – If P_L is missing or is neither 2.5 nor 50 percent.

scaled_load_sequence(input_parameters)[source]#

Scale the load sequence with the blanket load factor.

The only required input parameter is P_L.

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, one of {2.5, 50}

Returns:

Scaled copy of the input object. The load column is multiplied by \(\gamma_L\) according to FKM nonlinear guideline clause 2.3.2.3.

Return type:

pandas.Series or pandas.DataFrame

Raises:

ValueError – If P_L is missing or is neither 2.5 nor 50 percent.

class pylife.strength.fkm_load_distribution.FKMLoadDistributionLognormal(pandas_obj)[source]#

Scale a load sequence assuming lognormally distributed loads.

Use this accessor when the logarithm of the load values is normally distributed and the logarithmic standard deviation \(LSD_s\) is known. It is suited to multiplicative scatter, where the safety factor is independent of the absolute load level.

Signal contract:

Parameters:

pandas_obj (pandas.Series or pandas.DataFrame) – Load sequence or stress sequence. Stress values are typically given in MPa.

See also

FKMLoadDistributionNormal

Scale loads with a normal distribution.

FKMLoadDistributionBlanket

Scale loads when the distribution is unknown.

Notes

Implement FKM nonlinear guideline clause 2.3.2.2. Prefer this accessor over FKMLoadDistributionNormal when scatter acts as a relative factor on the load level.

gamma_L(input_parameters)[source]#

Compute the scaling factor \(\gamma_L\).

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.LSD_s: standard deviation of the lognormal distribution

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, one of {2.5, 50}

  • input_parameters.P_A: probability in [%], one of {1e-7, 1e-6, 1e-5, 7.2e-5, 1e-3, 2.3e-1, 0.5} (de: Ausfallwahrscheinlichkeit)

Returns:

Load scaling factor \(\gamma_L\), dimensionless.

Return type:

float

Raises:

ValueError – If a required parameter is missing or P_A is not supported.

scaled_load_sequence(input_parameters)[source]#

Scale the load sequence with the lognormal-distribution factor.

The following parameters are used: LSD_s, P_L, P_A.

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.LSD_s: standard deviation of the lognormal distribution

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, one of {2.5, 50}

  • input_parameters.P_A: probability in [%], one of {1e-7, 1e-6, 1e-5, 7.2e-5, 1e-3, 2.3e-1, 0.5} (de: Ausfallwahrscheinlichkeit)

Returns:

Scaled copy of the input object. The load column is multiplied by \(\gamma_L\) according to FKM nonlinear guideline clause 2.3.2.2.

Return type:

pandas.Series or pandas.DataFrame

Raises:

ValueError – If a required parameter is missing or P_A is not supported.

class pylife.strength.fkm_load_distribution.FKMLoadDistributionNormal(pandas_obj)[source]#

Scale a load sequence assuming normally distributed loads.

Use this accessor when the load values are normally distributed and the standard deviation \(s_L\) is known in the same unit as the load sequence. It converts a load sequence from the reference load probability to the requested FKM load probability and assessment failure probability.

Signal contract:

Parameters:

pandas_obj (pandas.Series or pandas.DataFrame) – Load sequence or stress sequence. Stress values are typically given in MPa.

See also

FKMLoadDistributionLognormal

Scale loads with a lognormal distribution.

FKMLoadDistributionBlanket

Scale loads when the distribution is unknown.

Notes

Implement FKM nonlinear guideline clause 2.3.2.1. Prefer this accessor over FKMLoadDistributionLognormal when additive scatter in load or stress is the appropriate model.

gamma_L(input_parameters)[source]#

Compute the scaling factor \(\gamma_L = (L_\text{max} + \alpha_L) / L_\text{max}\).

Note that for load sequences on multiple nodes (i.e. on a full mesh), \(L_\text{max}\) is the maximum load over all nodes and load steps, not different for different nodes.

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.s_L: standard deviation of the normal distribution

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, one of {2.5, 50}

  • input_parameters.P_A: probability in [%], one of {1e-7, 1e-6, 1e-5, 7.2e-5, 1e-3, 2.3e-1, 0.5} (de: Ausfallwahrscheinlichkeit)

  • input_parameters.max_load_independently_for_nodes: optional, whether the scaling should be performed independently at every node (True), or uniformly over all nodes (False). The default value is False.

Returns:

Load scaling factor \(\gamma_L\), dimensionless.

Return type:

float

Raises:

ValueError – If a required parameter is missing or P_A is not supported.

scaled_load_sequence(input_parameters)[source]#

Scale the load sequence with the normal-distribution factor.

The following parameters are used: s_L, P_L, P_A.

Parameters:

input_parameters (pandas Series) –

The parameters to specify the upscaling method.

  • input_parameters.s_L: standard deviation of the normal distribution

  • input_parameters.P_L: probability in [%] of the load for which to do the assessment, one of {2.5, 50}

  • input_parameters.P_A: probability in [%], one of {1e-7, 1e-6, 1e-5, 7.2e-5, 1e-3, 2.3e-1, 0.5} (de: Ausfallwahrscheinlichkeit)

Returns:

Scaled copy of the input object. The load column is multiplied by \(\gamma_L\) according to FKM nonlinear guideline clause 2.3.2.1.

Return type:

pandas.Series or pandas.DataFrame

Raises:

ValueError – If a required parameter is missing or P_A is not supported.

class pylife.strength.fkm_load_distribution.FKMLoadSequence(pandas_obj)[source]#

Scale load data by a constant FKM load factor.

This accessor is available as .fkm_load_sequence on pandas.Series and pandas.DataFrame objects. It is the shared base for the FKM statistical load distribution accessors and can also be used directly when a factor \(\gamma_L\) is already known.

Signal contract:

  • A pandas.Series represents one scalar load value per load step.

  • A pandas.DataFrame with one column represents one scalar load value per index row.

  • A pandas.DataFrame with multiple columns stores the load in the first column; additional columns, such as a stress gradient, are copied unchanged by scaled_by_constant().

  • The object must not be empty.

Parameters:

pandas_obj (pandas.Series or pandas.DataFrame) – Load sequence, stress sequence, or mesh-indexed load table to scale. Load or stress values are interpreted in the units used by the subsequent assessment, typically MPa for stresses.

Notes

Mesh-like data are commonly indexed by load_step and node_id. The scaling methods preserve the original index and all non-load columns.

maximum_absolute_load(max_load_independently_for_nodes=False)[source]#

Get the maximum absolute load over all nodes and load steps.

This is implemented for pd.Series (where the index is just the index of the load step), pd.DataFrame with one column (where the index is a MultiIndex of load_step and node_id), and pd.DataFrame with multiple columns with the load is given in the first column.

Parameters:

max_load_independently_for_nodes (bool, optional) – Flag indicating whether to compute the maximum absolute load separately for every node. If set to False, a single maximum value is computed over all nodes. Default is False.

Returns:

Maximum absolute load. The unit is the same as the load sequence, typically MPa for stress values.

Return type:

float

scaled_by_constant(gamma_L)[source]#

Scale the load sequence by the given constant gamma_L.

This method basically computes gamma_L * self._obj. The data in self._obj is either a pandas.Series, a pandas.DataFrame with a single column or a pandas.DataFrame with multiple columns (usually two for stress and stress gradient). In the case of a Series or only one column, it simply scales all values by the factor gamma_L. In the case of a DataFrame with multiple columns, it only scales the first column by the factor gamma_L and keeps the other columns unchanged.

Returns a scaled copy of the data.

Parameters:

gamma_L (float) – Scaling factor for the load sequence, dimensionless.

Returns:

Scaled copy of the load sequence. For a multi-column pandas.DataFrame, only the first column is multiplied by gamma_L.

Return type:

pandas.Series or pandas.DataFrame