API
Index of functions
find_cpt_column_namesget_least_squares_interpolatorget_load_vs_depthget_pile_head_displacementget_initial_pile_head_stiffnessget_soil_type_CPT2012get_kc_base_CPT2012get_ultimate_shaft_loadget_ultimate_shaft_resistanceget_fsmax_shaft_CPT2012get_alpha_shaft_CPT2012get_fsol_shaft_CPT2012get_average_qc_at_pile_baseget_E0get_Vsget_Icget_Ic_usingQt_onlyget_bigQtnget_bigQtget_Frget_Rfget_qnget_qtget_sigmav0_effectiveget_sigmav0_totalread_delimited_text_file
Function details
PileResponse.find_cpt_column_names — Functionfind_cpt_column_names(names::Vector{SubString{String}})Return a vector [depth_col, qc_col, fs_col, u2_col] providing the relevant names for each item from names.
The function looks for the (non case sensitive) strings "depth", "qc", "fs" and "u2" within the items in names.
Example
data = read_delimited_text_file("./data/example_cpt_data.csv", delim=',')
column_names = collect(keys(data))
depth_col, qc_col, fs_col, u2_col = find_cpt_column_names(column_names)PileResponse.get_least_squares_interpolator — Functionget_least_squares_interpolator(xvals::AbstractVector, yvals::AbstractVector; p0::AbstractVector = [0.0,0.0])Return a function fun() such that fun(x) = mx + b is the least squares linear approximation to [xvals, yvals].
p0 [Float64, Float64]is the initial guess, and[0.0, 0.0]seems to work.
PileResponse.get_load_vs_depth — Functionget_load_vs_depth(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, Ic::AbstractVector{Float64}, applied_load::Float64, pile_ult_load::Float64, pile_length::Float64, pile_diameter::Float64, pile_type::AbstractString)Returns [depth, load], which is the load carried by the pile at each depth for a given applied_load at the pile head.
Example
mydepth, myload = get_load_vs_depth(depth_m, qc_MPa, Ic, applied_load, pile_ult_load, pile_length, pile_diameter, pile_type)PileResponse.get_pile_head_displacement — Functionget_pile_head_displacement(k0::Float64, pile_head_loads::AbstractVector{Float64}, pile_ult_load::Float64)Return the pile head displacement for the given load vector.
Arguments
k0::Float64is the initial pile head stiffness.pile_head_loads::AbstractVector{Float64}is a vector of the load applied at the pile head. It will be sorted into increasing order.pile_ult_load::Float64is the assessed ultimate load of the pile.
See also get_initial_pile_head_stiffness.
The assumption is that the pile head stiffness k for a given load P can be approximated as:
- $k = k_{0}(1 - (P/P_{ult})^{0.3})$.
Reference
- Mayne, P. W. (2001) Stress-strain-strength flow parameters from enhanced in-situ tests.
- Fahey, M. and Carter, J. P. (1993) A finite element study of the pressuremeter in sand using a nonlinear elastic plastic model.
PileResponse.get_initial_pile_head_stiffness — Functionget_initial_pile_head_stiffness(pile_length::Float64, pile_diameter::Float64, Epile::Int64, Esoil_L::Float64, Esoil_Lon2::Float64; ν::Float64 = 0.3)Return the initial pile head stiffness for small strain (MN/m).
Arguments
Epile (MPa)is the elastic modulus of the pile.Esoil_L (MPa)is the small strain (E₀) elastic modulus of the soil at the base of the pile shaft.Esoil_Lon2 (MPa)is the small strain (E₀) elastic modulus of the soil at the midpoint of the pile shaft.ν(input as \nu[tab]) is the Poisson's ratio of the soil.
The theory is based on the closed form elastic solution provided by Randolph and Wroth (1978). The theory assumes that the soil has a linearly increasing elastic modulus with depth.
Reference
- Randolph, M. F. and Wroth, C. P. (1978). Analysis of deformation of vertically loaded piles. Jnl. Geot. Eng. Divn., ASCE, 108 (GT12): 1465 - 1488.
PileResponse.get_soil_type_CPT2012 — Functionget_soil_type_CPT2012(Ic::AbstractVector{Float64})Return a vector of soil types (deonted by 1, 2 or 3) for use in CPT2012 capacity assessment:
- 1 = Silts and clays (Ic > 2.70).
- 2 = Intermediate soil (2.50 < Ic <= 2.70).
- 3 = Sands (Ic <= 2.50).
PileResponse.get_kc_base_CPT2012 — Functionget_kc_base_CPT2012()Return a dictionary with pile base resistance factors $k_{c}$ such that:
$Q_{ult(base)} = k_{c} \cdot q_{ca}$, where $q_{ca}$ is the equivalent average cone resistance at the pile base.
Keys: pile types.Values: $k_{c}$ factors for [silt/clay, intermediate soils, sands].
See also get_average_qc_at_pile_base.
Reference
- Frank, R. (2017). Some aspects of research and practice for pile design in France. Innov. Infrastruct. Solutions. 2 (32) 1 - 15.
PileResponse.get_ultimate_shaft_load — Functionget_ultimate_shaft_load(depth_m::AbstractVector{Float64}, fshaft_MPa::AbstractVector{Float64}, pile_diameter::Float64, pile_length::Float64)Return the ultimate shaft load for the pile (MN).
fshaft_MPa is the ultimate shaft resistance (MPa) for each node corresponding to the depth_m vector.
PileResponse.get_ultimate_shaft_resistance — Functionget_ultimate_shaft_resistance(qc_MPa::AbstractVector{Float64}, Ic::AbstractVector{Float64}, pile_type::String; factor::Float64 = 1.0)Return the ultimate shaft resistance (MPa) for each element. The method follows the approach described by Frank (2017) where:
- $f_{s} = \alpha\cdot f_{sol}$, with $f_{sol} \leq f_{smax}$
Set factor = 1.0 for ultimate resistance and factor < 1.0 for loads less than the ultimate load.
See also:
Reference
- Frank, R. (2017). Some aspects of research and practice for pile design in France. Innov. Infrastruct. Solutions. 2 (32) 1 - 15.
PileResponse.get_fsmax_shaft_CPT2012 — Functionget_fsmax_shaft_CPT2012()Return a dictionary with maximum pile shaft resistance values $f_{smax}$, such that:
$Q_{ult(shaft)} \leq f_{smax}$.
Keys: Pile types.Values: Maximum shaft resistance $f_{smax}$ (kPa) for [silt/clay, intermediate soils, sands].
Reference
- Frank, R. (2017). Some aspects of research and practice for pile design in France. Innov. Infrastruct. Solutions. 2 (32) 1 - 15.
PileResponse.get_alpha_shaft_CPT2012 — Functionget_alpha_shaft_CPT2012()Return a dictionary with pile shaft resistance $\alpha$ factors, such that:
$Q_{ult(shaft)} = \alpha \cdot f_{sol}$
Keys: Pile types.Values: $\alpha$ factors for [silt/clay, intermediate soils, sands].
See also: get_fsol_shaft_CPT2012.
Reference
- Frank, R. (2017). Some aspects of research and practice for pile design in France. Innov. Infrastruct. Solutions. 2 (32) 1 - 15.
PileResponse.get_fsol_shaft_CPT2012 — Functionget_fsol_shaft_CPT2012(qc_MPa::AbstractVector{Float64}, Ic::AbstractVector{Float64})Return $f_{sol}$ (kPa), the unfactored ultimate pile shaft resistance.
Ic is the CPT soil behaviour type index. If Ic is not available, provide a vector of the same length as qc_MPa with values 1, 2 or 3 depending on whether the soil is silt/clay, intermediate or sand respectively for each point.
See also get_Ic
Reference
- Frank, R. (2017). Some aspects of research and practice for pile design in France. Innov. Infrastruct. Solutions. 2 (32) 1 - 15.
PileResponse.get_average_qc_at_pile_base — Functionget_average_qc_at_pile_base(depth_m::AbstractVector{Float64},qc_MPa::AbstractVector{Float64}, pile_length::Float64, pile_diameter::Float64; clip_to_30pct::Bool = false)Return the average qc within +/- 1.5 pile diameters from the base, with values limited to within +/- 30% of the value at the base.
If clip_to_30pct = false, values will not be limited to +/- 30% of the value at the pile base prior to averaging.
PileResponse.get_E0 — Functionget_E0(Vs::AbstractVector{Float64}; gamma::Float64 = 18.0, ν::Float64 = 0.3)Return E₀(MPa) = 2 * (1 + ν) * gamma / 9.81 * Vs² * 0.001.
Arguments
Vsis the shear wave velocity.gammais soil unit weight in kN/m², which is assumed constant.νis the soil Poisson's ratio, which is assumed constant.
See also get_Vs.
PileResponse.get_Vs — Functionget_Vs(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, fs_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}, gw_depth::Float64; gamma::Float64 = 18.0, a::Float64 = 0.73)Return (αᵥₛ * qn / pa)^0.5 where αᵥₛ = 10^(0.55 * Ic + 1.68).
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
Reference
- Robertson, P. K. and Cabal, K. (2022). Guide to cone penetration testing. 7th Ed. Gregg Drilling LLC.
PileResponse.get_Ic — Functionget_Ic(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64},
fs_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}, gw_depth::Float64; gamma::Float64 = 18.0, a::Float64 = 0.73)Return the soil behaviour type index based on Qtn:
Ic = [(3.47 - log10(Qtn))² + (log10(Fr) + 1.22)²] ^ 0.5.
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
Reference
- Robertson, P. K. and Cabal, K. (2022). Guide to cone penetration testing. 7th Ed. Gregg Drilling LLC.
PileResponse.get_Ic_usingQt_only — Functionget_Ic_usingQt_only(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64},
fs_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}, gw_depth::Float64; gamma::Float64 = 18.0, a::Float64 = 0.73)Return the soil behaviour type index based on Qt (not Qtn):
Ic = [(3.47 - log10(Qt))² + (log10(Fr) + 1.22)²] ^ 0.5.
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
Reference
- Robertson, P. K. and Cabal, K. (2022). Guide to cone penetration testing. 7th Ed. Gregg Drilling LLC.
PileResponse.get_bigQtn — Functionget_bigQtn(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, fs_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}; gw_depth::Float64, gamma::Float64 = 18.0, a::Float64 = 0.73)Return:
Qₜₙ = (qₜ - σᵥ₀) / 0.101 * (0.101 / σ'ᵥ₀)ⁿ.- where:
n = 0.381 * Ic + 0.05 * σ'ᵥ₀ / 0.101 - 0.15.
Uses an iterative process.
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_bigQt — Functionget_bigQt(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}; gw_depth::Float64, gamma::Float64 = 18.0, a::Float64 = 0.73)Return Qₜ = (qₜ - σᵥ₀) / σ'ᵥ₀.
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_Fr — Functionget_Fr(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, fs_MPa::AbstractVector{Float64},u2_MPa::AbstractVector{Float64}; gamma::Float64 = 18.0, a::Float64 = 0.73)Return (fₛ / qₙ) * 100.
Arguments
gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_Rf — Functionget_Rf(qc_MPa::AbstractVector{Float64}, fs_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}; a::Float64 = 0.73)Return (fₛ / qₜ) * 100.
ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_qn — Functionget_qn(depth_m::AbstractVector{Float64}, qc_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}; gamma::Float64 = 18.0, a::Float64 = 0.73)Return qₙ = qt - σᵥ₀.
Arguments
gammais soil unit weight in kN/m², which is assumed constant.ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_qt — Functionget_qt(qc_MPa::AbstractVector{Float64}, u2_MPa::AbstractVector{Float64}; a::Float64 = 0.73)Return qt = qc + u2(1 - a).
ais the net area ratio of the cone, typically between 0.70 and 0.85.
PileResponse.get_sigmav0_effective — Functionget_sigmav0_effective(depth_m::AbstractVector{Float64}, gw_depth::Float64, gamma::Float64 = 18.0)Return the effective vertical stress σ'ᵥ₀ (MPa).
Arguments
gw_depthis depth to groundwater in metres.gammais soil unit weight in kN/m², which is assumed constant.
PileResponse.get_sigmav0_total — Functionget_sigmav0_total(depth_m::AbstractVector{Float64}; gamma::Float64 = 18.0)Return the total vertical stress σᵥ₀ (MPa).
gammais soil unit weight in kN/m², which is assumed constant.
PileResponse.read_delimited_text_file — Functionread_delimited_text_file(filepath::String; delim::AbstractChar=',', T::Type=Float64)Return a dictionary (data) such that:
data[col1_header] = col1_values.
Assumes the first row is the header and that all columns below the header have the same type.
delimis the separator, ',' for comma separated, or '\t' for tab separated values.