def calc_vert_strip_via_gazetas_1991(sl, fd, ip_axis='width', a0=0.0, f_contact=1.0, h_rigid=None, **kwargs): """ Vertical stiffness per metre of a footing with infinite out-of-plane length Parameters ---------- sl: Soil Object fd: Foundation object a0: float Dynamic factor f_contact: float Effective sidewall contact scaling factor f_contact h_rigid kwargs Returns ------- """ l_ip = getattr(fd, ip_axis) b = l_ip / 2 v = sl.poissons_ratio k_strip = 0.73 * sl.g_mod / (1 - v) if a0: lob = 1000 if sl.poissons_ratio <= 0.4: f_dyn_surf = tdc.get_kz_gazetas_v_lte_0p4(a0, lob) else: f_dyn_surf = tdc.get_kz_gazetas_v_gt_0p4(a0, lob) else: f_dyn_surf = 1. 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 a_w = 2 * dw * fd.width n_emb = (1 + fd.depth / (21 * b)) * (1 + 0.2 * (a_w / (2 * b))**(2. / 3)) if v <= 0.4: f_dyn_full_emb = 1 - 0.09 * (fd.depth / b)**(3. / 4) * a0**2 f_dyn_trench = 1 + 0.09 * (fd.depth / b)**(3. / 4) * a0**2 else: f_dyn_full_emb = 1 - 0.35 * (fd.depth / b)**0.5 * a0**3.5 f_dyn_trench = f_dyn_surf # Assume the same as the surface - this is currently not provided f_dyn_surf = 1. # interpolate between f_dyn_emb = f_dyn_trench + (f_dyn_full_emb - f_dyn_trench) * (dw / fd.depth) else: n_emb = 1 f_dyn_emb = 1.0 if h_rigid: n_rigid = 1 + 3.5 * b / h_rigid else: n_rigid = 1 return k_strip * n_emb * f_dyn_surf * f_dyn_emb * n_rigid
def calc_vert_via_gazetas_1991(sl, fd, a0=None, f_contact=1.0): """ Vertical stiffness of foundation Parameters ---------- sl: Soil Object fd: Foundation object a0: float Dynamic factor f_contact: float Effective sidewall contact scaling factor Returns ------- """ v = sl.poissons_ratio l = fd.length * 0.5 b = fd.width * 0.5 k_v_0 = 2 * sl.g_mod * l / (1 - v) * (0.73 + 1.54 * (b / l)**0.75) if a0: if sl.poissons_ratio <= 0.4: f_dyn_surf = tdc.get_kz_gazetas_v_lte_0p4(a0, l / b) else: f_dyn_surf = tdc.get_kz_gazetas_v_gt_0p4(a0, l / b) else: f_dyn_surf = 1. 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 a_w = 2 * dw * (fd.width + fd.length) chi = b / l n_emb = (1 + fd.depth / (21 * b) * (1 + 1.3 * chi)) * (1 + 0.2 * (a_w / (4 * b * l))**(2. / 3)) if a0: h = min([fd.height, fd.depth]) if v <= 0.4: f_dyn_full_emb = 1 - 0.09 * (fd.depth / b)**(3. / 4) * a0**2 f_dyn_trench = 1 + 0.09 * (fd.depth / b)**(3. / 4) * a0**2 else: if l / b < 2.5: f_dyn_full_emb = 1 - 0.09 * (fd.depth / b)**(3. / 4) * a0**2 else: f_dyn_full_emb = 1 - 0.35 * (fd.depth / b)**0.5 * a0**3.5 f_dyn_trench = f_dyn_surf # Assume the same as the surface - this is currently not provided f_dyn_surf = 1. # interpolate between f_dyn_emb = f_dyn_trench + (f_dyn_full_emb - f_dyn_trench) * ( (h * f_contact) / fd.depth) else: f_dyn_emb = 1 else: n_emb = 1.0 f_dyn_emb = 1.0 return k_v_0 * n_emb * f_dyn_surf * f_dyn_emb