Source code for geost.analysis.cpt
import numpy as np
# NOTE: temporary functions ripped from old code. To be made compatible with Geolib
# functions
[docs]
def calc_ic(qc, rf) -> np.ndarray:
"""
Calculate non-normalized IC values (I_SBT in Robertson 2010). The non-normalized
variant does not require calculations of stresses to normalize with and hence no PWP
data is required.
Please note the following when using non-normalized IC values:
"The non-normalized SBT index (ISBT) is essentially the same as the normalized SBTn
index (Ic) but only uses the basic CPT measurements. In general, the normalized Ic
provides more reliable identification of SBT than the non-normalized ISBT, but when
the insitu vertical effective stress is between 50 kPa to 150 kPa there is often
little difference between normalized and non-normalized SBT."
Parameters
----------
qc : np.ndarray
Cone resistance values
rf : np.ndarray
Friction number
Returns
-------
np.ndarray
Non-normalized IC
"""
ic = np.sqrt((3.47 - np.log10(qc / 0.1)) ** 2 + (np.log10(rf) + 1.22) ** 2)
return ic
# TODO numpy searchsort
[docs]
def calc_lithology(ic, qc, rf) -> np.ndarray:
boundaries = [1.6, 2.0, 2.2, 2.6, 2.95, 3.6]
lith = np.full_like(ic, "NBE", dtype="<U3")
lith[ic < boundaries[0]] = "Z"
lith[(ic >= boundaries[0]) & (ic < boundaries[1])] = "Z"
lith[(ic >= boundaries[1]) & (ic < boundaries[2])] = "Z"
lith[(ic >= boundaries[2]) & (ic < boundaries[3])] = "Z"
lith[(ic >= boundaries[3]) & (ic < boundaries[4])] = "Kz"
lith[(ic >= boundaries[4]) & (ic < boundaries[5])] = "K"
lith[(ic >= boundaries[5]) & (rf > 8)] = "V"
lith[((rf > 5) & (qc < 1.5)) | (rf > 6)] = "V"
lith[(ic >= boundaries[5]) & (rf <= 8)] = "Kh"
return lith