Source code for liquepy.trigger.shear_strain
import numbers
import numpy as np
from liquepy.exceptions import deprecation
[docs]def calc_shear_strain_zhang_2004(fs, d_r):
"""
Calculates the shear strain (not in percentage)
Parameters
----------
fs
d_r: float or array_like, [dec]
Relative density of soil
Returns
-------
"""
if not hasattr(fs, '__len__'):
if not hasattr(d_r, '__len__'):
return calc_single_shear_strain(fs, d_r)
else:
out_values = []
for i in range(len(d_r)):
out_values.append(calc_single_shear_strain(fs, d_r[i]))
return np.array(out_values)
else:
out_values = []
for i in range(len(fs)):
if not hasattr(d_r, '__len__'):
out_values.append(calc_single_shear_strain(fs[i], d_r))
else:
out_values.append(calc_single_shear_strain(fs[i], d_r[i]))
return np.array(out_values)
[docs]def calc_shear_strain(fs, d_r):
deprecation("Use calc_shear_strain_zhang_2004, note that new function returns strain not in percentage!")
return None
[docs]def calc_relative_density_tasuoka_1990(q_c, esig_v0, dr_min=0.0, dr_max=1.0):
"""
Calculates the relative density according to Tasuoka et al. (1990)
Parameters
----------
q_c1n
esig_v0
dr_min
dr_max
Returns
-------
"""
return np.clip((-85. + 76. * np.log10(q_c / np.sqrt(esig_v0))), dr_min, dr_max) / 1e2
[docs]def calc_relative_density_zhang_2002(q_c1n, dr_min=0.0, dr_max=1.0):
"""
Calculates the relative density (Eq. 2) :cite:`Zhang:2004el`
Parameters
----------
q_c1n: Normalised cone tip resistance
Returns
-------
"""
return np.clip((-85. + 76. * np.log10(q_c1n)) / 100, dr_min, dr_max)
[docs]def calculate_shear_strain(fos, relative_density):
deprecation("Use calc_shear_strain")
return calculate_shear_strain(fos, relative_density)
[docs]def calc_single_shear_strain(fs, d_r):
if d_r == -1:
return 0
if d_r > 2.:
raise ValueError('d_r should be a decimal not a percentage')
dr_values = [0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]
for i in range(len(dr_values)):
if d_r < dr_values[i]:
if i == 0:
low_dr = dr_values[0]
d_r_cur = dr_values[0]
else:
low_dr = dr_values[i - 1]
d_r_cur = d_r
high_dr = dr_values[i]
es_low = calc_fixed_dr_gamma_max(fs, low_dr)
es_high = calc_fixed_dr_gamma_max(fs, high_dr)
es_actual = np.interp(d_r_cur, [low_dr, high_dr], [es_low, es_high])
return es_actual
return 0.0
# Maximum cyclic shear strains
[docs]def calc_fixed_dr_gamma_max(fs, relative_density):
if fs > 2.0:
return 0.0
elif relative_density == 1.0:
return 0.0
elif relative_density == 0.9:
if fs >= 0.7:
gamma_max = 3.26 * fs ** (-1.80)
else:
gamma_max = 6.2
elif relative_density == 0.8:
if fs >= 0.56:
gamma_max = 3.22 * fs ** (-2.08)
else:
gamma_max = 10
elif relative_density == 0.7:
if fs >= 0.59:
gamma_max = 3.2 * fs ** (-2.89)
else:
gamma_max = 14.5
elif relative_density == 0.6:
if fs >= 0.66:
gamma_max = 3.58 * fs ** (-4.42)
else:
gamma_max = 22.7
elif relative_density == 0.5:
if fs >= 0.72:
gamma_max = 4.22 * fs ** (-6.39)
else:
gamma_max = 34.1
elif relative_density == 0.4:
if fs >= 1:
gamma_max = 3.31 * fs ** (-7.97)
elif fs >= 0.81:
gamma_max = 250 * (1 - fs) + 3.5
else:
gamma_max = 51.2
elif relative_density < 0.4:
gamma_max = 51.2
else:
raise ValueError("Relative density (%.4f) not set to standard value" % relative_density)
return gamma_max / 100