Source code for edafos.deepfoundations.capacity_api

""" Provide the ``Olson 90`` class.

"""

# -- Imports -----------------------------------------------------------------
from .capacity_base import CapacityMethod


# -- Olson 90 Class ----------------------------------------------------------

[docs]class Olson90(CapacityMethod): """ Class to represent the Olson 90 method for capacity calculations of driven or drilled piles. For the engineering background refer to the section on the :ref:`olson90-method`. """ # -- Constructor ---------------------------------------------------------
[docs] def __init__(self, project): """ Args: project (class): Provide the ``Project`` object as defined in the :class:`~edafos.project.Project` class. """ super().__init__(project=project) self.method_name = 'Olson 90' # Run pre check self._pre_check(['soil_desc', 'tuw', 'corr_n', 'su']) # Run analysis self.run()
# -- Method for shaft resistance -----------------------------------------
[docs] def shaft_res_per_z(self, z1, z2): """ Method that follows the Olson 90 method for pile shaft resistance and calculates :math:`R_s` for a section defined by ``z1`` and ``z2``. Args: z1 (float): Vertical depth to the highest point of interest, measured from the top of the soil profile. - For **SI**: Enter depth, *z1*, in **meters**. - For **English**: Enter depth, *z1*, in **feet**. z2 (float): Vertical depth to the lowest point of interest, measured from the top of the soil profile. - For **SI**: Enter depth, *z1*, in **meters**. - For **English**: Enter depth, *z1*, in **feet**. Returns: Quantity: Two values with units depending on pile type. The first for **plugged** conditions, the second for **unplugged** conditions. """ # Input check if z2 <= z1: raise ValueError("'z2' must be larger than 'z1', please correct.") # Get soil type (cohesive/cohesionless) soil_type = self.project.sp.get_soil_prop(z2, 'soil_type') # Get Average Effective Stress mid_z = z1 + ((z2 - z1) / 2) eff_stress = self.project.sp.calculate_stress(mid_z) # -- Cohesive Soils -------------------------------------------------- if soil_type == 'cohesive': # Get the shear strength su = self.project.sp.get_soil_prop(z2, 'su') # Get the alpha factor a_factor = self.a_factor_rev_api(eff_stress, su) # Calculate unit shaft resistance f_s = self.unit_shaft_res_clay(a_factor, su) pass
# -- Method that follows the recipe --------------------------------------
[docs] def run(self): """ Method where the method "recipe" is compiled and all calculations are performed. Returns: """ # z_list = self._z_for_analysis() z_list = self.project.z_layer_pile() plugged = True total_r_s_out = 0 total_r_s_in = 0 for top_z, bot_z in zip(z_list[:-1], z_list[1:]): # Effective stress mid_z = top_z + ((bot_z - top_z)/2) eff_sigma = self.project.sp.calculate_stress(mid_z) bot_sigma = self.project.sp.calculate_stress(bot_z) # Get soil type (cohesive/cohesionless) soil_type = self.project.sp.get_soil_prop(bot_z, 'soil_type') # Plugged conditions side_area_out = self.project.pile.side_area(top_z, bot_z, box_area=True) toe_area_pl = self.project.pile.xsection_area(bot_z, box_area=True, soil_plug=True) # Unplugged conditions if self.project.pile.pile_type in ['pipe-open', 'h-pile']: side_area_in = self.project.pile.side_area(top_z, bot_z, inside=True) toe_area_upl = self.project.pile.xsection_area(bot_z) else: side_area_in = 0 * self.project.set_units('pile_side_area') toe_area_upl = 0 * self.project.set_units('pile_xarea_alt') if soil_type == 'cohesive': # Side Friction su = self.project.sp.get_soil_prop(bot_z, 'su') a_factor = self.a_factor_rev_api(eff_sigma, su) f_s = self.unit_shaft_res_clay(a_factor, su) # End bearing toe_su = self.average_toe_su() q_p = self.unit_toe_res_clay(toe_su) else: # Side Friction corr_n = self.project.sp.get_soil_prop(bot_z, 'corr_n') soil_desc = self.project.sp.get_soil_prop(bot_z, 'soil_desc') if self.project.pile.pile_type in ['pipe-open', 'h-pile']: k = self.lateral_k_olson90(corr_n, False) else: k = self.lateral_k_olson90(corr_n, True) delta = self.olson90_table(soil_desc, corr_n, 'delta') f_lim = self.olson90_table(soil_desc, corr_n, 'f_lim') f_s = min(self.unit_shaft_res_sand(k, eff_sigma, delta), f_lim) # End bearing n_q = self.olson90_table(soil_desc, corr_n, 'N_q') q_lim = self.olson90_table(soil_desc, corr_n, 'q_lim') q_p = min((bot_sigma * n_q), q_lim) r_s_out = self.shaft_resistance(f_s, side_area_out) r_s_in = self.shaft_resistance(f_s, side_area_in) total_r_s_out = total_r_s_out + r_s_out total_r_s_in = total_r_s_in + r_s_in r_p_pl = self.toe_resistance(q_p, toe_area_pl) r_p_upl = self.toe_resistance(q_p, toe_area_upl) # Plugged total resistance r_n_pl = total_r_s_out + r_p_pl # Unplugged total resistance if self.project.pile.pile_type in ['pipe-open', 'h-pile']: r_n_upl = total_r_s_out + total_r_s_in + r_p_upl else: r_n_upl = 0 + total_r_s_in + r_p_upl # Store values in data frame self.tab_results.loc[len(self.tab_results) + 1] = [ bot_z, total_r_s_out.magnitude, total_r_s_in.magnitude, r_p_pl.magnitude, r_p_upl.magnitude, r_n_pl.magnitude, r_n_upl.magnitude] max_unplugged = self.tab_results.iloc[:, -1].max() max_pluged = self.tab_results.iloc[:, -2].max() if self.project.pile.pile_type in ['pipe-open', 'h-pile']: if max_unplugged < max_pluged: plugged = False result = min(max_unplugged, max_pluged) else: result = max_pluged self.capacity = result self.plugged = plugged return self