예제 #1
0
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
예제 #2
0
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