def calc_horz_strip_via_gazetas_1991(sl, fd, ip_axis='width', a0=0.0, f_contact=1.0, h_rigid=None): """ Assumes out-of-plane is infinite, stiffness is returned as a per metre length Parameters ---------- sl: Soil Object fd: Foundation object ip_axis: str The axis that is in the plane of deformation axis: str The axis which it should be computed around (if not None, then ip_axis is ignored) a0: float dynamic factor f_contact: float Effective sidewall contact scaling factor Returns ------- """ l_ip = getattr(fd, ip_axis) b = l_ip / 2 k_strip = 2.0 * sl.g_mod / (2 - sl.poissons_ratio) if h_rigid: n_rigid = 1 + 2 * b / h_rigid else: n_rigid = 1 if a0: f_dyn = tdc.get_ky_gazetas(a0, 1000) else: f_dyn = 1.0 if fd.depth is not None and fd.depth != 0.0: if fd.depth < 0.0: raise ValueError( f'foundation depth must be zero or greater, not {fd.depth}') if f_contact == 0.0: dw = 0.0 else: dw = min(fd.height, fd.depth) * f_contact n_emb = 1 + 1.26 * (dw / b) else: n_emb = 1. if h_rigid: n_rigid = 1 + 2.0 * b / h_rigid else: n_rigid = 1 return k_strip * n_emb * f_dyn * n_rigid
def calc_horz_via_gazetas_1991(sl, fd, ip_axis='width', axis=None, a0=0.0, f_contact=1.0): """ Calculate the shear stiffness for translation along an axis. Parameters ---------- sl: Soil Object fd: Foundation object ip_axis: str The axis that is in the plane of deformation axis: str The axis which it should be computed around (if not None, then ip_axis is ignored) a0: float dynamic factor f_contact: float Effective sidewall contact scaling factor Returns ------- """ if axis is not None: ip_axis = axis n_emb = 1.0 if fd.length >= fd.width: len_dominant = True l = fd.length * 0.5 b = fd.width * 0.5 else: len_dominant = False l = fd.width * 0.5 b = fd.length * 0.5 if (ip_axis == 'length' and len_dominant) or (ip_axis == 'width' and not len_dominant): y_axis = True # Direction of l else: y_axis = False # Direction of b v = sl.poissons_ratio k_y = 2 * sl.g_mod * l / (2 - v) * (2.0 + 2.5 * (b / l)**0.85) if y_axis is False: # x_axis k_shear = (k_y - (0.2 * sl.g_mod * l) / (0.75 - v) * (1.0 - b / l)) f_dyn = 1.0 if fd.depth: z_w = (fd.depth + (fd.depth - fd.height)) / 2 h = min([fd.height, fd.depth]) a_w = 2 * h * (fd.width + fd.length) * f_contact n_emb = (1 + 0.15 * (fd.depth / l)**0.5) * (1 + 0.52 * (z_w * a_w / (l * b**2))**0.4) else: if a0: f_dyn = tdc.get_ky_gazetas(a0, l / b) else: f_dyn = 1.0 if fd.depth: z_w = (fd.depth + (fd.depth - fd.height)) / 2 h = min([fd.height, fd.depth]) a_w = 2 * h * (fd.width + fd.length) * f_contact n_emb = (1 + 0.15 * (fd.depth / b)**0.5) * (1 + 0.52 * (z_w * a_w / (b * l**2))**0.4) k_shear = k_y return k_shear * n_emb * f_dyn