Skip to content

spt.py

subsurfaceio.functions.spt

SPT functions.

Classes:

Name Description
ReferenceFigureRegistry

Pre-instantiated reference figures

Functions:

Name Description
get_borehole_diameter_correction__skempton1986standard

Calculation function.

get_clean_sand_normalized_blow_count__cetin2004standard

Calculation function.

get_clean_sand_normalized_blow_count__seed1987design

Calculation function.

get_clean_sand_normalized_blow_count_sr__idriss2003estimating

Calculation function.

get_coefficient_of_consolidation__navfac1982soil

Calculation function.

get_compression_index__rendon1983closure

Calculation function.

get_compression_ratio__lambe1969soil

Calculation function.

get_constrained_modulus__janbu1985soil

Calculation function.

get_corrected_blow_count__skempton1986standard

Calculation function.

get_energy_ratio_correction__skempton1986standard

Calculation function.

get_fines_content_factor__cetin2004standard

Calculation function.

get_friction_angle__schnaid2009prediction

Calculation function.

get_is_fine_soil_spt

Calculation function.

get_is_potentially_liquefiable_spt

Calculation function.

get_iterative_parameters_spt__idriss2008soil

Calculation function.

get_normalized_blow_count__liao1986overburden

Calculation function.

get_normalized_blow_count_fines_inc__cetin2018use

Calculation function.

get_normalized_blow_count_fines_inc__idriss2006semi

Calculation function.

get_normalized_blow_count_fines_inc_sr__seed1987design

Calculation function.

get_normalized_residual_shear_strength__kramer2015empirical

Calculation function.

get_normalized_residual_shear_strength__weber2015engineering

Calculation function.

get_normalized_residual_shear_strength_spt__idriss2007spt

Calculation function.

get_normalized_residual_shear_strength_spt__idriss2008soil

Calculation function.

get_overburden_correction__cetin2004standard

Calculation function.

get_overburden_correction__cetin2018use

Calculation function.

get_overburden_correction__liao1986overburden

Calculation function.

get_overburden_stress_exponent__liao1986overburden

Calculation function.

get_peak_friction_angle__sorensen2013correlation

Calculation function.

get_permeability__chapuis2004predicting

Calculation function.

get_permeability__chapuis2012predicting

Calculation function.

get_permeability__mbonimpa2002practical

Calculation function.

get_poisson_ratio__bowles1996foundation

Calculation function.

get_recompression_index__lo1982prediction

Calculation function.

get_recompression_ratio__lo1982prediction

Calculation function.

get_relative_density__idriss2003estimating

Calculation function.

get_remolded_undrained_shear_strength__degroot2019engineering

Calculation function.

get_rod_length_correction__cetin2004standard

Calculation function.

get_rod_length_correction__cetin2018use

Calculation function.

get_rod_length_correction__skempton1986standard

Calculation function.

get_shear_velocity__wair2012guidelines

Calculation function.

get_undrained_shear_strength__sivrikaya2006determination

Calculation function.

get_unit_weight__cetin2018use

Calculation function.

ReferenceFigureRegistry

Pre-instantiated reference figures

get_borehole_diameter_correction__skempton1986standard

get_borehole_diameter_correction__skempton1986standard(
    borehole_diameter,
    use_simplified_blows_correction,
    depth,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_borehole\_diameter\_correction\_\_skempton1986standard}(D_{bh}, \mathrm{use\_simplified\_blows\_correction}, z) \\ \hspace{1em} \mathbf{if} \ \mathrm{use\_simplified\_blows\_correction} \\ \hspace{2em} C_B \gets 1 \\ \hspace{1em} \mathbf{else} \\ \hspace{2em} C_B \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"borehole\_diameter"}, D_{bh}, \textrm{"borehole\_diameter\_correction"} \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} C_B \gets \mathrm{np}.\mathrm{full\_like} \mathopen{}\left( z, C_B \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_B \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
borehole_diameter float

Diameter of borehole for SPT or sampling

required
use_simplified_blows_correction bool

Applies SPT blow count correction for energy only

required
depth float

Depth below ground surface to bottom of layer

required

Returns:

Name Type Description
borehole_diameter_correction float

SPT correction factor for borehole diameter

get_clean_sand_normalized_blow_count__cetin2004standard

get_clean_sand_normalized_blow_count__cetin2004standard(
    normalized_blow_count,
    fines_content_factor,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_clean\_sand\_normalized\_blow\_count\_\_cetin2004standard}(N_{160}, C_{FINES}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} N_{160cs} \gets N_{160} \cdot C_{FINES} \\ \hspace{1em} N_{160cs} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( N_{160cs} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( N_{160cs}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ N_{160cs} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
fines_content_factor float

Fines content factor for liquefaction analysis

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
clean_sand_normalized_blow_count float

Equivalent clean sand SPT blow count (N_160)

get_clean_sand_normalized_blow_count__seed1987design

get_clean_sand_normalized_blow_count__seed1987design(
    normalized_blow_count,
    normalized_blow_count_fines_inc,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_clean\_sand\_normalized\_blow\_count\_\_seed1987design}(N_{160}, ΔN_{160}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} N_{160cs} \gets N_{160} + ΔN_{160} \\ \hspace{1em} N_{160cs} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( N_{160cs} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( N_{160cs}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ N_{160cs} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
normalized_blow_count_fines_inc float

Fines content increment to normalized blow count

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
clean_sand_normalized_blow_count float

Equivalent clean sand SPT blow count (N_160)

get_clean_sand_normalized_blow_count_sr__idriss2003estimating

get_clean_sand_normalized_blow_count_sr__idriss2003estimating(
    normalized_blow_count,
    normalized_blow_count_fines_inc_sr,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_clean\_sand\_normalized\_blow\_count\_sr\_\_idriss2003estimating}(N_{160}, ΔN_{160-Sr}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} \mathbf{return} \ \mathrm{get\_clean\_sand\_normalized\_blow\_count\_\_seed1987design} \mathopen{}\left( N_{160}, ΔN_{160-Sr}, \mathrm{is\_fine\_soil} \mathclose{}\right) \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
normalized_blow_count_fines_inc_sr float

Fines content increment to normalized blow count for residual shear strength

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
clean_sand_normalized_blow_count_sr float

Equivalent clean sand N_160 for residual shear strength

get_coefficient_of_consolidation__navfac1982soil

get_coefficient_of_consolidation__navfac1982soil(
    liquid_limit,
    is_fine_soil,
    is_disturbed_soil=False,
    consolidation_state="NC",
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_coefficient\_of\_consolidation\_\_navfac1982soil}(LL, \mathrm{is\_fine\_soil}, \mathrm{is\_disturbed\_soil}, \mathrm{consolidation\_state}) \\ \hspace{1em} \mathrm{remolded} \gets \mathrm{ReferenceFigureRegistry}.\mathrm{CoefficientOfConsolidationNAVFAC1982}.\mathrm{interpolate\_at\_x} \mathopen{}\left( LL \mathclose{}\right) \\ \hspace{1em} \mathrm{virgin} \gets \mathrm{ReferenceFigureRegistry}.\mathrm{CoefficientOfConsolidationNAVFAC1982}.\mathrm{interpolate\_at\_x} \mathopen{}\left( LL \mathclose{}\right) \\ \hspace{1em} \mathrm{reloading} \gets \mathrm{ReferenceFigureRegistry}.\mathrm{CoefficientOfConsolidationNAVFAC1982}.\mathrm{interpolate\_at\_x} \mathopen{}\left( LL \mathclose{}\right) \\ \hspace{1em} C_v \gets \mathrm{np}.\mathrm{select} \mathopen{}\left( \mathopen{}\left[ \mathrm{is\_disturbed\_soil}, \mathrm{consolidation\_state} = \textrm{"NC"}, \mathrm{np}.\mathrm{isin} \mathopen{}\left( \mathrm{consolidation\_state}, \mathopen{}\left[ \textrm{"LOC"}, \textrm{"MOC"}, \textrm{"HOC"} \mathclose{}\right] \mathclose{}\right) \mathclose{}\right], \mathopen{}\left[ \mathrm{remolded}, \mathrm{virgin}, \mathrm{reloading} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_v, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_v \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
liquid_limit float

Liquid limit of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required
is_disturbed_soil bool

Indicates if soil sample is disturbed

False
consolidation_state str

Soil consolidation state description

'NC'

Returns:

Name Type Description
coefficient_of_consolidation float

Coefficient of consolidation for soil

get_compression_index__rendon1983closure

get_compression_index__rendon1983closure(
    water_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_compression\_index\_\_rendon1983closure}(w_c, \mathrm{is\_fine\_soil}) \\ \hspace{1em} C_c \gets 0.01 \mathopen{}\left( w_c - 7.549 \mathclose{}\right) \\ \hspace{1em} C_c \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( C_c \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_c, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_c \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
water_content float

Natural water content of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
compression_index float

Compression index for soil consolidation

get_compression_ratio__lambe1969soil

get_compression_ratio__lambe1969soil(
    water_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_compression\_ratio\_\_lambe1969soil}(w_c, \mathrm{is\_fine\_soil}) \\ \hspace{1em} CR \gets \mathrm{ReferenceFigureRegistry}.\mathrm{CompressionRatioLambe1969}.\mathrm{interpolate\_at\_x} \mathopen{}\left( w_c \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( CR, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ CR \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
water_content float

Natural water content of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
compression_ratio float

Compression ratio for soil

get_constrained_modulus__janbu1985soil

get_constrained_modulus__janbu1985soil(
    water_content, effective_stress, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_constrained\_modulus\_\_janbu1985soil}(w_c, σ_v', \mathrm{is\_fine\_soil}) \\ \hspace{1em} m \gets 107.3 \exp \mathopen{}\left( -0.05042 w_c \mathclose{}\right) + 2.834 \\ \hspace{1em} M \gets 0.001 \cdot m \cdot σ_v' \\ \hspace{1em} M \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( M \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( M, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ M \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
water_content float

Natural water content of soil

required
effective_stress float

Effective vertical stress in soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
constrained_modulus float

Constrained modulus of soil

get_corrected_blow_count__skempton1986standard

get_corrected_blow_count__skempton1986standard(
    blow_count,
    energy_ratio_correction,
    borehole_diameter_correction,
    rod_length_correction,
    sampler_correction,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_corrected\_blow\_count\_\_skempton1986standard}(N, C_E, C_B, C_R, C_S) \\ \hspace{1em} N_{60} \gets N \cdot C_E \cdot C_B \cdot C_R \cdot C_S \\ \hspace{1em} \mathbf{return} \ N_{60} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
blow_count float

SPT measured blow count

required
energy_ratio_correction float

SPT correction factor for energy ratio

required
borehole_diameter_correction float

SPT correction factor for borehole diameter

required
rod_length_correction float

SPT correction factor for rod length

required
sampler_correction float

SPT correction factor for sampling method

required

Returns:

Name Type Description
corrected_blow_count float

Blow count corrected for field conditions

get_energy_ratio_correction__skempton1986standard

get_energy_ratio_correction__skempton1986standard(
    energy_ratio, depth
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_energy\_ratio\_correction\_\_skempton1986standard}(ER, z) \\ \hspace{1em} C_E \gets \frac{ER}{60} \\ \hspace{1em} C_E \gets \mathrm{np}.\mathrm{full\_like} \mathopen{}\left( z, C_E \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_E \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
energy_ratio float

SPT equipment measured energy ratio

required
depth float

Depth below ground surface to bottom of layer

required

Returns:

Name Type Description
energy_ratio_correction float

SPT correction factor for energy ratio

get_fines_content_factor__cetin2004standard

get_fines_content_factor__cetin2004standard(
    normalized_blow_count, fines_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_fines\_content\_factor\_\_cetin2004standard}(N_{160}, FC, \mathrm{is\_fine\_soil}) \\ \hspace{1em} FC \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( FC, 5, 35 \mathclose{}\right) \\ \hspace{1em} C_{FINES} \gets 1 + 0.004 FC + 0.05 \frac{FC}{N_{160}} \\ \hspace{1em} C_{FINES} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( C_{FINES} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_{FINES}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_{FINES} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
fines_content float

Percentage of fines passing No. 200 sieve

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
fines_content_factor float

Fines content factor for liquefaction analysis

get_friction_angle__schnaid2009prediction

get_friction_angle__schnaid2009prediction(
    normalized_blow_count, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_friction\_angle\_\_schnaid2009prediction}(N_{160}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} ϕ \gets 18 N_{160}^{0.234} \\ \hspace{1em} ϕ \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( ϕ \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ϕ, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ϕ \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
friction_angle float

Friction angle of soil

get_is_fine_soil_spt

get_is_fine_soil_spt(soil_type2)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_is\_fine\_soil\_spt}(\mathrm{soil\_type2}) \\ \hspace{1em} \mathrm{is\_fine\_soil} \gets \mathrm{soil\_type2} \ne \textrm{"Coarse"} \\ \hspace{1em} \mathbf{return} \ \mathrm{is\_fine\_soil} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
soil_type2 str

Secondary soil type description

required

Returns:

Name Type Description
is_fine_soil bool

Indicates if soil is fine-grained

get_is_potentially_liquefiable_spt

get_is_potentially_liquefiable_spt(
    below_water_table,
    depth,
    liquefaction_max_depth,
    soil_type,
    exclude_clay_like_sands=True,
    uscs_symbol=None,
    fines_content=float("nan"),
    plasticity_index=float("nan"),
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_is\_potentially\_liquefiable\_spt}(\mathrm{below\_water\_table}, z, LIQ_{max\ z}, \mathrm{soil\_type}, \mathrm{exclude\_clay\_like\_sands}, \mathrm{uscs\_symbol}, FC, PI) \\ \hspace{1em} \mathrm{is\_potentially\_liquefiable} \gets \mathrm{get\_is\_potentially\_liquefiable} \mathopen{}\left( \mathrm{below\_water\_table}, z, LIQ_{max\ z} \mathclose{}\right) \\ \hspace{1em} \mathrm{is\_potentially\_liquefiable} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( \mathrm{is\_potentially\_liquefiable} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( \mathrm{is\_potentially\_liquefiable}, \mathrm{soil\_type} \ne \textrm{"Sand"}, \mathrm{False} \mathclose{}\right) \\ \hspace{1em} \mathbf{if} \ \mathrm{exclude\_clay\_like\_sands} \\ \hspace{2em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( \mathrm{is\_potentially\_liquefiable}, \mathopen{}\left( \mathrm{uscs\_symbol} = \textrm{"SC"} \mathclose{}\right) \mathbin{\&} \mathopen{}\left( FC > 35 \mathclose{}\right) \mathbin{\&} \mathopen{}\left( PI > 12 \mathclose{}\right), \mathrm{False} \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} \mathbf{return} \ \mathrm{is\_potentially\_liquefiable} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
below_water_table bool

Indicates if soil layer is below water table

required
depth float

Depth below ground surface to bottom of layer

required
liquefaction_max_depth float

Maximum depth for liquefaction analysis

required
soil_type str

Primary soil type description

required
exclude_clay_like_sands bool

Ignores clayey sands (SC) with FC > 35% and PI > 12% for SPT-based liquefaction

True
uscs_symbol str

Unified Soil Classification System symbol

None
fines_content float

Percentage of fines passing No. 200 sieve

float('nan')
plasticity_index float

Plasticity index of soil

float('nan')

Returns:

Name Type Description
is_potentially_liquefiable bool

Indicates if soil is potentially liquefiable

get_iterative_parameters_spt__idriss2008soil

get_iterative_parameters_spt__idriss2008soil(
    corrected_blow_count,
    normalized_blow_count_fines_inc,
    effective_stress,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_iterative\_parameters\_spt\_\_idriss2008soil}(N_{60}, ΔN_{160}, σ_v', \mathrm{is\_fine\_soil}) \\ \hspace{1em} \mathrm{max\_iter} \gets 10 \\ \hspace{1em} \mathrm{tol} \gets 0.0001 \\ \hspace{1em} n \gets \mathrm{None} \\ \hspace{1em} C_n \gets \mathrm{None} \\ \hspace{1em} N_{160cs} \gets \mathrm{np}.\mathrm{ones\_like} \mathopen{}\left( N_{60} \mathclose{}\right) \\ \hspace{1em} \mathbf{for} \ \mathrm{\_} \in \mathrm{range} \mathopen{}\left( \mathrm{max\_iter} \mathclose{}\right) \ \mathbf{do} \\ \hspace{2em} \mathrm{clean\_sand\_normalized\_blow\_count\_old} \gets \mathrm{np}.\mathrm{copy} \mathopen{}\left( N_{160cs} \mathclose{}\right) \\ \hspace{2em} n \gets 0.784 - 0.0768 \sqrt{ \mathrm{np}.\mathrm{clip} \mathopen{}\left( N_{160cs}, 1, 46 \mathclose{}\right) } \\ \hspace{2em} C_n \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( \mathopen{}\left( \frac{101.325}{σ_v'} \mathclose{}\right)^{n}, 0, 1.7 \mathclose{}\right) \\ \hspace{2em} N_{160cs} \gets N_{60} \cdot C_n + ΔN_{160} \\ \hspace{2em} \mathbf{if} \ \mathrm{np}.\mathrm{nanmax} \mathopen{}\left( \mathopen{}\left| N_{160cs} - \mathrm{clean\_sand\_normalized\_blow\_count\_old} \mathclose{}\right| \mathclose{}\right) < \mathrm{tol} \\ \hspace{3em} \mathbf{break} \\ \hspace{2em} \mathbf{end \ if} \\ \hspace{1em} \mathbf{end \ for} \\ \hspace{1em} n \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( n \mathclose{}\right) \\ \hspace{1em} C_n \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( C_n \mathclose{}\right) \\ \hspace{1em} N_{160cs} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( N_{160cs} \mathclose{}\right) \\ \hspace{1em} \mathrm{nan\_mask} \gets \mathrm{is\_fine\_soil} \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( n, \mathrm{nan\_mask}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_n, \mathrm{nan\_mask}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( N_{160cs}, \mathrm{nan\_mask}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ \mathopen{}\left( n, C_n, N_{160cs} \mathclose{}\right) \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
corrected_blow_count float

Blow count corrected for field conditions

required
normalized_blow_count_fines_inc float

Fines content increment to normalized blow count

required
effective_stress float

Effective vertical stress in soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
overburden_stress_exponent float

Stress exponent for overburden correction

overburden_correction float

Overburden correction factor for SPT

clean_sand_normalized_blow_count float

Equivalent clean sand SPT blow count (N_160)

get_normalized_blow_count__liao1986overburden

get_normalized_blow_count__liao1986overburden(
    corrected_blow_count,
    overburden_correction,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_blow\_count\_\_liao1986overburden}(N_{60}, C_n, \mathrm{is\_fine\_soil}) \\ \hspace{1em} \textrm{" coduto: Although Liao and Whitman did not place any limits on this correction, it is probably best to keep (N1)60 < 2 corrected\_blow\_count. This limit avoids excessively high values at shallow depths "} \\ \hspace{1em} \textrm{" SPTCorr uses 0.4 <= overburden\_correction <= 1.7 limits "} \\ \hspace{1em} \textrm{" boulanger2014cpt shows 0.0 <= overburden\_correction <= 1.7 limits "} \\ \hspace{1em} \textrm{" Also used by cetin2004standard who limits it to 1.6 "} \\ \hspace{1em} \textrm{" Also used by cetin2018use who limits it to 2.0 "} \\ \hspace{1em} N_{160} \gets N_{60} \cdot C_n \\ \hspace{1em} N_{160} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( N_{160} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( N_{160}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ N_{160} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
corrected_blow_count float

Blow count corrected for field conditions

required
overburden_correction float

Overburden correction factor for SPT

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

get_normalized_blow_count_fines_inc__cetin2018use

get_normalized_blow_count_fines_inc__cetin2018use(
    normalized_blow_count, fines_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_blow\_count\_fines\_inc\_\_cetin2018use}(N_{160}, FC, \mathrm{is\_fine\_soil}) \\ \hspace{1em} \mathrm{cetineayy\_coeffs} \gets \mathrm{ReferenceDataSets}.\mathrm{ModelCoefficientsCetin}.\mathrm{to\_index\_map} \mathopen{}\left( \textrm{"theta"}, \textrm{"2018"} \mathclose{}\right) \\ \hspace{1em} \mathopen{}\left( \mathrm{theta1}, \mathrm{theta4} \mathclose{}\right) \gets \mathopen{}\left( \mathrm{cetineayy\_coeffs}_{\textrm{"1"}}, \mathrm{cetineayy\_coeffs}_{\textrm{"4"}} \mathclose{}\right) \\ \hspace{1em} FC \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( FC, 5, 35 \mathclose{}\right) \\ \hspace{1em} ΔN_{160} \gets FC \cdot \mathopen{}\left( \mathrm{theta1} \cdot N_{160} + \mathrm{theta4} \mathclose{}\right) \\ \hspace{1em} ΔN_{160} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( ΔN_{160} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ΔN_{160}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ΔN_{160} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
fines_content float

Percentage of fines passing No. 200 sieve

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_blow_count_fines_inc float

Fines content increment to normalized blow count

get_normalized_blow_count_fines_inc__idriss2006semi

get_normalized_blow_count_fines_inc__idriss2006semi(
    fines_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_blow\_count\_fines\_inc\_\_idriss2006semi}(FC, \mathrm{is\_fine\_soil}) \\ \hspace{1em} ΔN_{160} \gets \exp \mathopen{}\left( 1.63 + \frac{9.7}{FC + 0.01} - \mathopen{}\left( \frac{15.7}{FC + 0.01} \mathclose{}\right)^{2} \mathclose{}\right) \\ \hspace{1em} ΔN_{160} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( ΔN_{160} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ΔN_{160}, \mathrm{np}.\mathrm{isclose} \mathopen{}\left( ΔN_{160}, 0 \mathclose{}\right), 0 \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ΔN_{160}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ΔN_{160} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
fines_content float

Percentage of fines passing No. 200 sieve

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_blow_count_fines_inc float

Fines content increment to normalized blow count

get_normalized_blow_count_fines_inc_sr__seed1987design

get_normalized_blow_count_fines_inc_sr__seed1987design(
    fines_content, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_blow\_count\_fines\_inc\_sr\_\_seed1987design}(FC, \mathrm{is\_fine\_soil}) \\ \hspace{1em} ΔN_{160} \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"fines\_content"}, FC, \textrm{"normalized\_blow\_count\_fines\_inc"} \mathclose{}\right) \\ \hspace{1em} ΔN_{160} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( ΔN_{160} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ΔN_{160}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ΔN_{160} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
fines_content float

Percentage of fines passing No. 200 sieve

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_blow_count_fines_inc_sr float

Fines content increment to normalized blow count for residual shear strength

get_normalized_residual_shear_strength__kramer2015empirical

get_normalized_residual_shear_strength__kramer2015empirical(
    normalized_blow_count, effective_stress, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_residual\_shear\_strength\_\_kramer2015empirical}(N_{160}, σ_v', \mathrm{is\_fine\_soil}) \\ \hspace{1em} S_r \gets 101.325 \cdot \exp \mathopen{}\left( -8.444 + 0.109 N_{160} + 5.379 \mathopen{}\left( \frac{σ_v'}{101.325} \mathclose{}\right)^{0.1} \mathclose{}\right) \\ \hspace{1em} S_r \gets \mathrm{np}.\mathrm{where} \mathopen{}\left( N_{160} \le 15, S_r, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} S_{r\ ratio} \gets \frac{S_r}{σ_v'} \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( S_{r\ ratio}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ S_{r\ ratio} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
effective_stress float

Effective vertical stress in soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_residual_shear_strength float

Post-liquefaction residual shear strength to effective stress ratio

get_normalized_residual_shear_strength__weber2015engineering

get_normalized_residual_shear_strength__weber2015engineering(
    clean_sand_normalized_blow_count,
    effective_stress,
    is_fine_soil,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_residual\_shear\_strength\_\_weber2015engineering}(N_{160cs}, σ_v', \mathrm{is\_fine\_soil}) \\ \hspace{1em} S_r \gets 0.048 \cdot \mathopen{}\left( \exp \mathopen{}\left( 0.1407 N_{160cs} + 4.2399 \mathopen{}\left( \frac{σ_v'}{101.325} \mathclose{}\right)^{0.12} \mathclose{}\right) - 0.43991 \mathopen{}\left( N_{160cs}^{1.45} + 0.2 N_{160cs} \cdot \mathopen{}\left( \frac{σ_v'}{101.325} \mathclose{}\right)^{2.48} + 41.13 \mathclose{}\right) \mathclose{}\right) \\ \hspace{1em} S_r \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( S_r, \mathrm{None}, 0.29 σ_v' \mathclose{}\right) \\ \hspace{1em} S_{r\ ratio} \gets \frac{S_r}{σ_v'} \\ \hspace{1em} S_{r\ ratio} \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( S_{r\ ratio} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( S_{r\ ratio}, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ S_{r\ ratio} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
clean_sand_normalized_blow_count float

Equivalent clean sand SPT blow count (N_160)

required
effective_stress float

Effective vertical stress in soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
normalized_residual_shear_strength float

Post-liquefaction residual shear strength to effective stress ratio

get_normalized_residual_shear_strength_spt__idriss2007spt

get_normalized_residual_shear_strength_spt__idriss2007spt(
    clean_sand_normalized_blow_count,
    void_redistribution_is_significant,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_residual\_shear\_strength\_spt\_\_idriss2007spt}(N_{160cs}, \mathrm{void\_redistribution\_is\_significant}) \\ \hspace{1em} \textrm{" Equation obtained from idriss2008soil "} \\ \hspace{1em} S_{r\ ratio} \gets \exp \mathopen{}\left( \frac{N_{160cs}}{16} + \mathopen{}\left( \frac{N_{160cs} - 16}{21.2} \mathclose{}\right)^{3} - 3 \mathclose{}\right) \\ \hspace{1em} \mathbf{if} \ \lnot \mathrm{void\_redistribution\_is\_significant} \\ \hspace{2em} S_{r\ ratio} \gets S_{r\ ratio} \cdot \mathopen{}\left( 1 + \exp \mathopen{}\left( \frac{N_{160cs}}{2.4} - 6.6 \mathclose{}\right) \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} S_{r\ ratio} \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( S_{r\ ratio}, 0, \mathrm{tandg} \mathopen{}\left( 25 \mathclose{}\right) \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ S_{r\ ratio} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
clean_sand_normalized_blow_count float

Equivalent clean sand SPT blow count (N_160)

required
void_redistribution_is_significant bool

Applies for I&B residual shear strength calculations

required

Returns:

Name Type Description
normalized_residual_shear_strength float

Post-liquefaction residual shear strength to effective stress ratio

get_normalized_residual_shear_strength_spt__idriss2008soil

get_normalized_residual_shear_strength_spt__idriss2008soil(
    clean_sand_normalized_blow_count_sr,
    void_redistribution_is_significant,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_normalized\_residual\_shear\_strength\_spt\_\_idriss2008soil}(N_{160cs-Sr}, \mathrm{void\_redistribution\_is\_significant}) \\ \hspace{1em} \mathbf{return} \ \mathrm{get\_normalized\_residual\_shear\_strength\_spt\_\_idriss2007spt} \mathopen{}\left( \mathclose{}\right) \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
clean_sand_normalized_blow_count_sr float

Equivalent clean sand N_160 for residual shear strength

required
void_redistribution_is_significant bool

Applies for I&B residual shear strength calculations

required

Returns:

Name Type Description
normalized_residual_shear_strength float

Post-liquefaction residual shear strength to effective stress ratio

get_overburden_correction__cetin2004standard

get_overburden_correction__cetin2004standard(
    effective_stress,
    overburden_stress_exponent=0.5,
    overburden_correction_limit=1.6,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_overburden\_correction\_\_cetin2004standard}(σ_v', n, C_{n\ lim}) \\ \hspace{1em} \mathbf{return} \ \mathrm{get\_overburden\_correction\_\_liao1986overburden} \mathopen{}\left( \mathclose{}\right) \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
effective_stress float

Effective vertical stress in soil

required
overburden_stress_exponent float

Stress exponent for overburden correction

0.5
overburden_correction_limit float

Limit for overburden correction factor

1.6

Returns:

Name Type Description
overburden_correction float

Overburden correction factor for SPT

get_overburden_correction__cetin2018use

get_overburden_correction__cetin2018use(
    effective_stress,
    overburden_stress_exponent=0.5,
    overburden_correction_limit=2.0,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_overburden\_correction\_\_cetin2018use}(σ_v', n, C_{n\ lim}) \\ \hspace{1em} \mathbf{return} \ \mathrm{get\_overburden\_correction\_\_liao1986overburden} \mathopen{}\left( \mathclose{}\right) \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
effective_stress float

Effective vertical stress in soil

required
overburden_stress_exponent float

Stress exponent for overburden correction

0.5
overburden_correction_limit float

Limit for overburden correction factor

2.0

Returns:

Name Type Description
overburden_correction float

Overburden correction factor for SPT

get_overburden_correction__liao1986overburden

get_overburden_correction__liao1986overburden(
    overburden_stress_exponent,
    effective_stress,
    overburden_correction_limit=1.7,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_overburden\_correction\_\_liao1986overburden}(n, σ_v', C_{n\ lim}) \\ \hspace{1em} C_n \gets \mathopen{}\left( \frac{101.325}{σ_v'} \mathclose{}\right)^{n} \\ \hspace{1em} C_n \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( C_n, 0, C_{n\ lim} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_n \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
overburden_stress_exponent float

Stress exponent for overburden correction

required
effective_stress float

Effective vertical stress in soil

required
overburden_correction_limit float

Limit for overburden correction factor

1.7

Returns:

Name Type Description
overburden_correction float

Overburden correction factor for SPT

get_overburden_stress_exponent__liao1986overburden

get_overburden_stress_exponent__liao1986overburden(depth)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_overburden\_stress\_exponent\_\_liao1986overburden}(z) \\ \hspace{1em} n \gets \mathrm{np}.\mathrm{full\_like} \mathopen{}\left( z, 0.5 \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ n \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
depth float

Depth below ground surface to bottom of layer

required

Returns:

Name Type Description
overburden_stress_exponent float

Stress exponent for overburden correction

get_peak_friction_angle__sorensen2013correlation

get_peak_friction_angle__sorensen2013correlation(
    plasticity_index, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_peak\_friction\_angle\_\_sorensen2013correlation}(PI, \mathrm{is\_fine\_soil}) \\ \hspace{1em} ϕ' \gets 43 - 10 \log_{10} PI \\ \hspace{1em} ϕ' \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( ϕ' \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( ϕ', \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ϕ' \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
plasticity_index float

Plasticity index of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
peak_friction_angle float

Peak friction angle of soil

get_permeability__chapuis2004predicting

get_permeability__chapuis2004predicting(
    void_ratio, diameter_at_10_percent_finer, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_permeability\_\_chapuis2004predicting}(e, D_{10}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} k \gets 0.01 \cdot 2.4622 \mathopen{}\left( D_{10}^{2} \cdot \frac{e^{3}}{1 + e} \mathclose{}\right)^{0.7825} \\ \hspace{1em} k \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( k \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( k, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ k \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
void_ratio float

Void ratio of soil

required
diameter_at_10_percent_finer float

Diameter at 10% finer from sieve analysis

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
permeability float

Soil permeability

get_permeability__chapuis2012predicting

get_permeability__chapuis2012predicting(
    void_ratio,
    is_fine_soil,
    diameter_at_10_percent_finer=float("nan"),
    liquid_limit=float("nan"),
    unit_weight=float("nan"),
    water_unit_weight=9.81,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_permeability\_\_chapuis2012predicting}(e, \mathrm{is\_fine\_soil}, D_{10}, LL, γ, γ_w) \\ \hspace{1em} \mathrm{k\_is\_fine\_soil} \gets \mathrm{get\_permeability\_\_mbonimpa2002practical} \mathopen{}\left( \mathclose{}\right) \\ \hspace{1em} \mathrm{k\_is\_granular} \gets \mathrm{get\_permeability\_\_chapuis2004predicting} \mathopen{}\left( \mathclose{}\right) \\ \hspace{1em} k \gets \mathrm{np}.\mathrm{where} \mathopen{}\left( \mathrm{is\_fine\_soil}, \mathrm{k\_is\_fine\_soil}, \mathrm{k\_is\_granular} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ k \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
void_ratio float

Void ratio of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required
diameter_at_10_percent_finer float

Diameter at 10% finer from sieve analysis

float('nan')
liquid_limit float

Liquid limit of soil

float('nan')
unit_weight float

Unit weight of soil

float('nan')
water_unit_weight float

Unit weight of water

9.81

Returns:

Name Type Description
permeability float

Soil permeability

get_permeability__mbonimpa2002practical

get_permeability__mbonimpa2002practical(
    void_ratio,
    liquid_limit,
    unit_weight,
    is_fine_soil,
    water_unit_weight=9.81,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_permeability\_\_mbonimpa2002practical}(e, LL, γ, \mathrm{is\_fine\_soil}, γ_w) \\ \hspace{1em} \mathrm{C\_p} \gets 5.6 \\ \hspace{1em} \mathrm{mu\_w} \gets 0.001 \\ \hspace{1em} x \gets 7.7 LL^{-0.15} - 3 \\ \hspace{1em} \chi \gets 1.5 \\ \hspace{1em} \mathrm{rho\_s} \gets \frac{1000 γ}{g} \\ \hspace{1em} k \gets 0.01 \mathrm{C\_p} \frac{γ_w}{\mathrm{mu\_w}} \frac{e^{3 + x}}{1 + e} \frac{1}{\mathrm{rho\_s}^{2} \cdot LL^{2 \chi}} \\ \hspace{1em} k \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( k \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( k, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ k \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
void_ratio float

Void ratio of soil

required
liquid_limit float

Liquid limit of soil

required
unit_weight float

Unit weight of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required
water_unit_weight float

Unit weight of water

9.81

Returns:

Name Type Description
permeability float

Soil permeability

get_poisson_ratio__bowles1996foundation

get_poisson_ratio__bowles1996foundation(
    soil_type, below_water_table
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_poisson\_ratio\_\_bowles1996foundation}(\mathrm{soil\_type}, \mathrm{below\_water\_table}) \\ \hspace{1em} \textrm{" Table 7.2 Values or value ranges for Poisson's ratio ν by bowles1996foundation "} \\ \begin{array}{l} \hspace{1em} \mathbf{function} \ \mathrm{get\_mean\_value}(\mathrm{key}) \\ \hspace{2em} \mathbf{return} \ \mathrm{np}.\mathrm{mean} \mathopen{}\left( \mathopen{}\left[ \mathrm{mapping\_min}_{\mathrm{key}}, \mathrm{mapping\_max}_{\mathrm{key}} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ function} \end{array} \\ \hspace{1em} \mathrm{mapping\_min} \gets \mathrm{ReferenceDataSets}.\mathrm{PoissonRatioBowles1996}.\mathrm{to\_index\_map} \mathopen{}\left( \textrm{"material"}, \textrm{"min"} \mathclose{}\right) \\ \hspace{1em} \mathrm{mapping\_max} \gets \mathrm{ReferenceDataSets}.\mathrm{PoissonRatioBowles1996}.\mathrm{to\_index\_map} \mathopen{}\left( \textrm{"material"}, \textrm{"max"} \mathclose{}\right) \\ \hspace{1em} \mathrm{condition\_1} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Clay"} \mathclose{}\right) \mathbin{\&} \mathord{\sim} \mathrm{below\_water\_table} \\ \hspace{1em} \mathrm{choice\_1} \gets \mathrm{get\_mean\_value} \mathopen{}\left( \textrm{"Clay.Unsaturated"} \mathclose{}\right) \\ \hspace{1em} \mathrm{condition\_2} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Clay"} \mathclose{}\right) \mathbin{\&} \mathrm{below\_water\_table} \\ \hspace{1em} \mathrm{choice\_2} \gets \mathrm{get\_mean\_value} \mathopen{}\left( \textrm{"Clay.Saturated"} \mathclose{}\right) \\ \hspace{1em} \mathrm{condition\_3} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Sand"} \mathclose{}\right) \mathbin{|} \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Gravel"} \mathclose{}\right) \\ \hspace{1em} \mathrm{choice\_3} \gets \mathrm{get\_mean\_value} \mathopen{}\left( \textrm{"Sand, gravelly sand"} \mathclose{}\right) \\ \hspace{1em} \mathrm{condition\_4} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Peat"} \mathclose{}\right) \mathbin{|} \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Organic"} \mathclose{}\right) \\ \hspace{1em} \mathrm{choice\_4} \gets \mathrm{get\_mean\_value} \mathopen{}\left( \textrm{"Peat, organic (from Long et al. (2022))"} \mathclose{}\right) \\ \hspace{1em} \mathrm{condition\_5} \gets \mathrm{soil\_type} = \textrm{"Other"} \\ \hspace{1em} \mathrm{choice\_5} \gets \mathrm{get\_mean\_value} \mathopen{}\left( \textrm{"All soils"} \mathclose{}\right) \\ \hspace{1em} ν \gets \mathrm{np}.\mathrm{select} \mathopen{}\left( \mathopen{}\left[ \mathrm{condition\_1}, \mathrm{condition\_2}, \mathrm{condition\_3}, \mathrm{condition\_4}, \mathrm{condition\_5} \mathclose{}\right], \mathopen{}\left[ \mathrm{choice\_1}, \mathrm{choice\_2}, \mathrm{choice\_3}, \mathrm{choice\_4}, \mathrm{choice\_5} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ ν \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
soil_type str

Primary soil type description

required
below_water_table bool

Indicates if soil layer is below water table

required

Returns:

Name Type Description
poisson_ratio float

Poisson’s ratio of soil

get_recompression_index__lo1982prediction

get_recompression_index__lo1982prediction(
    compression_index, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_recompression\_index\_\_lo1982prediction}(C_c, \mathrm{is\_fine\_soil}) \\ \hspace{1em} C_r \gets -0.00327 + 0.139 C_c \\ \hspace{1em} C_r \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( C_r \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_r, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ C_r \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
compression_index float

Compression index for soil consolidation

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
recompression_index float

Recompression (swelling) index of soil

get_recompression_ratio__lo1982prediction

get_recompression_ratio__lo1982prediction(
    compression_ratio, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_recompression\_ratio\_\_lo1982prediction}(CR, \mathrm{is\_fine\_soil}) \\ \hspace{1em} RR \gets \mathrm{get\_recompression\_index\_\_lo1982prediction} \mathopen{}\left( CR, \mathrm{is\_fine\_soil} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ RR \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
compression_ratio float

Compression ratio for soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
recompression_ratio float

Recompression ratio of soil

get_relative_density__idriss2003estimating

get_relative_density__idriss2003estimating(
    normalized_blow_count, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_relative\_density\_\_idriss2003estimating}(N_{160}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} D_r \gets 100 \sqrt{ \frac{N_{160}}{46} } \\ \hspace{1em} D_r \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( D_r \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( D_r, \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ D_r \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
normalized_blow_count float

N_60 corrected to 1 atm effective overburden stress

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
relative_density float

Relative density of soil

get_remolded_undrained_shear_strength__degroot2019engineering

get_remolded_undrained_shear_strength__degroot2019engineering(
    liquidity_index, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_remolded\_undrained\_shear\_strength\_\_degroot2019engineering}(LI, \mathrm{is\_fine\_soil}) \\ \hspace{1em} \textrm{" Based on ngi database for liquidity\_index > 0 "} \\ \hspace{1em} S_{ur} \gets 4.5 LI^{-1.5} \\ \hspace{1em} S_{ur} \gets \mathrm{np}.\mathrm{where} \mathopen{}\left( LI > 0, S_{ur}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( S_{ur}, \mathord{\sim} \mathrm{is\_fine\_soil}, \mathrm{np}.\mathrm{nan} \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ S_{ur} \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
liquidity_index float

Liquidity index of soil

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
remolded_undrained_shear_strength float

Remolded undrained shear strength of soil

get_rod_length_correction__cetin2004standard

get_rod_length_correction__cetin2004standard(
    depth, rod_length, use_simplified_blows_correction
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_rod\_length\_correction\_\_cetin2004standard}(z, \mathrm{rod\_length}, \mathrm{use\_simplified\_blows\_correction}) \\ \hspace{1em} \mathbf{if} \ \mathrm{use\_simplified\_blows\_correction} \\ \hspace{2em} C_R \gets 1 \\ \hspace{1em} \mathbf{else} \\ \hspace{2em} C_R \gets \frac{1}{0.9898 + \frac{4.3166}{\mathopen{}\left( \mathrm{rod\_length} + z \mathclose{}\right)^{2}}} \\ \hspace{2em} C_R \gets \mathrm{np}.\mathrm{clip} \mathopen{}\left( C_R, 0.75, 1 \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} \mathbf{return} \ C_R \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
depth float

Depth below ground surface to bottom of layer

required
rod_length float

Total length of SPT rods

required
use_simplified_blows_correction bool

Applies SPT blow count correction for energy only

required

Returns:

Name Type Description
rod_length_correction float

SPT correction factor for rod length

get_rod_length_correction__cetin2018use

get_rod_length_correction__cetin2018use(
    depth, rod_length, use_simplified_blows_correction
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_rod\_length\_correction\_\_cetin2018use}(z, \mathrm{rod\_length}, \mathrm{use\_simplified\_blows\_correction}) \\ \hspace{1em} \mathbf{if} \ \mathrm{use\_simplified\_blows\_correction} \\ \hspace{2em} C_R \gets 1 \\ \hspace{1em} \mathbf{else} \\ \hspace{2em} C_R \gets 0.48 + 0.225 \log \mathopen{}\left( \mathrm{rod\_length} + z \mathclose{}\right) \\ \hspace{2em} C_R \gets \mathrm{np}.\mathrm{asarray} \mathopen{}\left( C_R \mathclose{}\right) \\ \hspace{2em} \mathrm{np}.\mathrm{putmask} \mathopen{}\left( C_R, \mathrm{rod\_length} + z > 10, 1 \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} \mathbf{return} \ C_R \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
depth float

Depth below ground surface to bottom of layer

required
rod_length float

Total length of SPT rods

required
use_simplified_blows_correction bool

Applies SPT blow count correction for energy only

required

Returns:

Name Type Description
rod_length_correction float

SPT correction factor for rod length

get_rod_length_correction__skempton1986standard

get_rod_length_correction__skempton1986standard(
    depth, rod_length, use_simplified_blows_correction
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_rod\_length\_correction\_\_skempton1986standard}(z, \mathrm{rod\_length}, \mathrm{use\_simplified\_blows\_correction}) \\ \hspace{1em} \mathbf{if} \ \mathrm{use\_simplified\_blows\_correction} \\ \hspace{2em} C_R \gets \mathrm{np}.\mathrm{full\_like} \mathopen{}\left( z, 1 \mathclose{}\right) \\ \hspace{1em} \mathbf{else} \\ \hspace{2em} C_R \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"depth\_plus\_rod\_length"}, z + \mathrm{rod\_length}, \textrm{"rod\_length\_correction"} \mathclose{}\right) \\ \hspace{1em} \mathbf{end \ if} \\ \hspace{1em} \mathbf{return} \ C_R \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
depth float

Depth below ground surface to bottom of layer

required
rod_length float

Total length of SPT rods

required
use_simplified_blows_correction bool

Applies SPT blow count correction for energy only

required

Returns:

Name Type Description
rod_length_correction float

SPT correction factor for rod length

get_shear_velocity__wair2012guidelines

get_shear_velocity__wair2012guidelines(
    corrected_blow_count,
    effective_stress,
    soil_type,
    geological_epoch="Holocene",
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_shear\_velocity\_\_wair2012guidelines}(N_{60}, σ_v', \mathrm{soil\_type}, \mathrm{geological\_epoch}) \\ \hspace{1em} \textrm{" Age scaling factors are provided too: [All, Clay \& Silt, Sand]: 0.87, 0.88, 0.90 for Holocene and 1.13, 1.12, 1.17 for Pleistocene "} \\ \hspace{1em} \mathrm{condition\_1} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Clay"} \mathclose{}\right) \mathbin{|} \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Silt"} \mathclose{}\right) \\ \hspace{1em} \mathrm{choice\_1} \gets 26 N_{60}^{0.17} \cdot σ_v'^{0.32} \\ \hspace{1em} \mathrm{condition\_2} \gets \mathrm{soil\_type} = \textrm{"Sand"} \\ \hspace{1em} \mathrm{choice\_2} \gets 30 N_{60}^{0.23} \cdot σ_v'^{0.23} \\ \hspace{1em} \mathrm{condition\_3} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Gravel"} \mathclose{}\right) \mathbin{\&} \mathopen{}\left( \mathrm{geological\_epoch} = \textrm{"Holocene"} \mathclose{}\right) \\ \hspace{1em} \mathrm{choice\_3} \gets 53 N_{60}^{0.19} \cdot σ_v'^{0.18} \\ \hspace{1em} \mathrm{condition\_4} \gets \mathopen{}\left( \mathrm{soil\_type} = \textrm{"Gravel"} \mathclose{}\right) \mathbin{\&} \mathopen{}\left( \mathrm{geological\_epoch} = \textrm{"Pleistocene"} \mathclose{}\right) \\ \hspace{1em} \mathrm{choice\_4} \gets 115 N_{60}^{0.17} \cdot σ_v'^{0.12} \\ \hspace{1em} \mathrm{default} \gets 30 N_{60}^{0.215} \cdot σ_v'^{0.275} \\ \hspace{1em} V_s \gets \mathrm{np}.\mathrm{select} \mathopen{}\left( \mathopen{}\left[ \mathrm{condition\_1}, \mathrm{condition\_2}, \mathrm{condition\_3}, \mathrm{condition\_4} \mathclose{}\right], \mathopen{}\left[ \mathrm{choice\_1}, \mathrm{choice\_2}, \mathrm{choice\_3}, \mathrm{choice\_4} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ V_s \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
corrected_blow_count float

Blow count corrected for field conditions

required
effective_stress float

Effective vertical stress in soil

required
soil_type str

Primary soil type description

required
geological_epoch str

Geological epoch of soil formation

'Holocene'

Returns:

Name Type Description
shear_velocity float

Shear wave velocity of soil

get_undrained_shear_strength__sivrikaya2006determination

get_undrained_shear_strength__sivrikaya2006determination(
    corrected_blow_count, uscs_symbol, is_fine_soil
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_undrained\_shear\_strength\_\_sivrikaya2006determination}(N_{60}, \mathrm{uscs\_symbol}, \mathrm{is\_fine\_soil}) \\ \hspace{1em} \mathrm{condition\_1} \gets \mathrm{uscs\_symbol} = \textrm{"CH"} \\ \hspace{1em} \mathrm{choice\_1} \gets 7.8 N_{60} \\ \hspace{1em} \mathrm{condition\_2} \gets \mathrm{uscs\_symbol} = \textrm{"CL"} \\ \hspace{1em} \mathrm{choice\_2} \gets 5.35 N_{60} \\ \hspace{1em} \mathrm{condition\_3} \gets \mathrm{uscs\_symbol} = \textrm{"Clay"} \\ \hspace{1em} \mathrm{choice\_3} \gets 6.9 N_{60} \\ \hspace{1em} \mathrm{condition\_4} \gets \mathrm{is\_fine\_soil} \\ \hspace{1em} \mathrm{choice\_4} \gets 6.35 N_{60} \\ \hspace{1em} S_u \gets \mathrm{np}.\mathrm{select} \mathopen{}\left( \mathopen{}\left[ \mathrm{condition\_1}, \mathrm{condition\_2}, \mathrm{condition\_3}, \mathrm{condition\_4} \mathclose{}\right], \mathopen{}\left[ \mathrm{choice\_1}, \mathrm{choice\_2}, \mathrm{choice\_3}, \mathrm{choice\_4} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ S_u \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
corrected_blow_count float

Blow count corrected for field conditions

required
uscs_symbol str

Unified Soil Classification System symbol

required
is_fine_soil bool

Indicates if soil is fine-grained

required

Returns:

Name Type Description
undrained_shear_strength float

Undrained shear strength of soil

get_unit_weight__cetin2018use

get_unit_weight__cetin2018use(
    corrected_blow_count,
    is_fine_soil,
    below_water_table,
    default_unit_weight=16.0,
)

Calculation function.

\[ \begin{array}{l} \mathbf{function} \ \mathrm{get\_unit\_weight\_\_cetin2018use}(N_{60}, \mathrm{is\_fine\_soil}, \mathrm{below\_water\_table}, γ_{default}) \\ \hspace{1em} \mathrm{coarse\_moist} \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"corrected\_blow\_count"}, N_{60}, \textrm{"unit\_weight.Coarse.Moist"} \mathclose{}\right) \\ \hspace{1em} \mathrm{coarse\_saturated} \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"corrected\_blow\_count"}, N_{60}, \textrm{"unit\_weight.Coarse.Saturated"} \mathclose{}\right) \\ \hspace{1em} \mathrm{fine\_moist} \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"corrected\_blow\_count"}, N_{60}, \textrm{"unit\_weight.Fine.Moist"} \mathclose{}\right) \\ \hspace{1em} \mathrm{fine\_saturated} \gets \mathrm{parameter\_registry}.\mathrm{bin\_data} \mathopen{}\left( \textrm{"corrected\_blow\_count"}, N_{60}, \textrm{"unit\_weight.Fine.Saturated"} \mathclose{}\right) \\ \hspace{1em} γ \gets \mathrm{np}.\mathrm{select} \mathopen{}\left( \mathopen{}\left[ \mathord{\sim} \mathrm{is\_fine\_soil} \mathbin{\&} \mathord{\sim} \mathrm{below\_water\_table}, \mathord{\sim} \mathrm{is\_fine\_soil} \mathbin{\&} \mathrm{below\_water\_table}, \mathrm{is\_fine\_soil} \mathbin{\&} \mathord{\sim} \mathrm{below\_water\_table}, \mathrm{is\_fine\_soil} \mathbin{\&} \mathrm{below\_water\_table} \mathclose{}\right], \mathopen{}\left[ \mathrm{coarse\_moist}, \mathrm{coarse\_saturated}, \mathrm{fine\_moist}, \mathrm{fine\_saturated} \mathclose{}\right] \mathclose{}\right) \\ \hspace{1em} \mathbf{return} \ γ \\ \mathbf{end \ function} \end{array} \]

Parameters:

Name Type Description Default
corrected_blow_count float

Blow count corrected for field conditions

required
is_fine_soil bool

Indicates if soil is fine-grained

required
below_water_table bool

Indicates if soil layer is below water table

required
default_unit_weight float

Unit weight used for missing or undefined values

16.0

Returns:

Name Type Description
unit_weight float

Unit weight of soil