geofound/capacity.py
def capacity_hansen_1970(sl, fd, h_l=0, h_b=0, vertical_load=1, slope=0, base_tilt=0, verbose=0, **kwargs):
    """
    Calculates the foundation capacity according Hansen (1970)
    Ref: http://bestengineeringprojects.com/civil-projects/
    hansens-bearing-capacity-theory/

    :param sl: Soil object
    :param fd: Foundation object
    :param h_l: Horizontal load parallel to length
    :param h_b: Horizontal load parallel to width
    :param vertical_load: Vertical load
    :param slope: ground slope
    :param base_tilt: The slope of the underside of the foundation
    :param verbose: verbosity
    :return: ultimate bearing stress
    """
    if not kwargs.get("disable_requires", False):
        models.check_required(sl, ["phi_r", "cohesion", "unit_dry_weight"])
        models.check_required(fd, ["length", "width", "depth"])

    area_foundation = fd.length * fd.width
    horizontal_load = np.sqrt(h_l ** 2 + h_b ** 2)
    c_a = 0.6 - 1.0 * sl.cohesion

    fd.nq_factor = ((np.tan(np.pi / 4 + sl.phi_r / 2)) ** 2 * np.exp(np.pi * np.tan(sl.phi_r)))
    if sl.phi_r == 0:
        fd.nc_factor = 5.14
    else:
        fd.nc_factor = (fd.nq_factor - 1) / np.tan(sl.phi_r)
    fd.ng_factor = 1.5 * (fd.nq_factor - 1) * np.tan(sl.phi_r)

    # shape factors
    if sl.phi_r == 0:
        s_c = 0.2 * fd.width / fd.length
    else:
        s_c = 1.0 + fd.nq_factor / fd.nc_factor * fd.width / fd.length

    s_q = 1.0 + fd.width / fd.length * np.sin(sl.phi_r)
    s_g = 1.0 - 0.4 * fd.width / fd.length

    # depth factors:
    if fd.depth / fd.width > 1:
        k = np.arctan(fd.depth / fd.width)
    else:
        k = fd.depth / fd.width
    d_c = 1 + 0.4 * k
    if sl.phi == 0:
        d_c = 0.4 * k
    d_q = 1 + 2 * np.tan(sl.phi_r) * (1 - np.sin(sl.phi_r)) ** 2 * k
    d_g = 1.0

    # incline load factors:
    if sl.phi_r == 0:
        i_q = 1.0
        i_c = 0.5 - 0.5 * np.sqrt(1 - horizontal_load / area_foundation * c_a)
        i_g = 1.0
    else:
        i_q = ((1.0 - 0.5 * horizontal_load /
                (vertical_load + area_foundation * c_a / np.tan(sl.phi_r))) ** 5)
        i_c = i_q - (1 - i_q) / (fd.nq_factor - 1)
        i_g = ((1 - (0.7 * horizontal_load) /
                (vertical_load + area_foundation * c_a / np.tan(sl.phi_r))) ** 5)

    # slope factors:
    if sl.phi_r == 0:
        g_c = (slope / np.pi * 180) / 147
    else:
        g_c = 1.0 - (slope / np.pi * 180) / 147
    g_q = 1 - 0.5 * np.tan(slope) ** 5
    g_g = g_q

    # base tilt factors:
    if sl.phi_r == 0:
        b_c = (base_tilt / np.pi * 180) / 147
    else:
        b_c = 1.0 - (base_tilt / np.pi * 180) / 147
    b_q = (np.exp(-0.0349 * (base_tilt / np.pi * 180) * np.tan(sl.phi_r)))
    b_g = (np.exp(-0.0471 * (base_tilt / np.pi * 180) * np.tan(sl.phi_r)))

    if verbose:
        log("Nc: ", fd.nc_factor)
        log("Nq: ", fd.nq_factor)
        log("Ng: ", fd.ng_factor)
        log("s_c: ", s_c)
        log("s_q: ", s_q)
        log("s_g: ", s_g)
        log("d_c: ", d_c)
        log("d_q: ", d_q)
        log("d_g: ", d_g)
        log("i_c: ", i_c)
        log("i_q: ", i_q)
        log("i_g: ", i_g)
        log("g_c: ", g_c)
        log("g_q: ", g_q)
        log("g_g: ", g_g)
        log("b_c: ", b_c)
        log("b_q: ", b_q)
        log("b_g: ", b_g)

    # stress at footing base:
    q_d = sl.unit_dry_weight * fd.depth

    # Capacity
    if sl.phi_r == 0:
        fd.q_ult = (sl.cohesion * fd.nc_factor *
                    (1 + s_c + d_c - i_c - g_c - b_c) + q_d)
    else:
        fd.q_ult = (sl.cohesion * fd.nc_factor *
                    s_c * d_c * i_c * g_c * b_c +
                    q_d * fd.nq_factor * s_q * d_q * i_q * g_q * b_q +
                    0.5 * fd.width * sl.unit_dry_weight *
                    fd.ng_factor * s_g * d_g * i_g * g_g * b_g)
def capacity_hansen_1970(sl, fd, h_l=0, h_b=0, vertical_load=1, slope=0, base_tilt=0, verbose=0, **kwargs):
    """
    Calculates the foundation capacity according Hansen (1970)
    Ref: http://bestengineeringprojects.com/civil-projects/
    hansens-bearing-capacity-theory/

    :param sl: Soil object
    :param fd: Foundation object
    :param h_l: Horizontal load parallel to length
    :param h_b: Horizontal load parallel to width
    :param vertical_load: Vertical load
    :param slope: ground slope
    :param base_tilt: The slope of the underside of the foundation
    :param verbose: verbosity
    :return: ultimate bearing stress
    """
    if not kwargs.get("disable_requires", False):
        models.check_required(sl, ["phi_r", "cohesion", "unit_dry_weight"])
        models.check_required(fd, ["length", "width", "depth"])

    area_foundation = fd.length * fd.width
    horizontal_load = np.sqrt(h_l ** 2 + h_b ** 2)
    c_a = 0.6 - 1.0 * sl.cohesion

    fd.nq_factor = ((np.tan(np.pi / 4 + sl.phi_r / 2)) ** 2 * np.exp(np.pi * np.tan(sl.phi_r)))
    if sl.phi_r == 0:
        fd.nc_factor = 5.14
    else:
        fd.nc_factor = (fd.nq_factor - 1) / np.tan(sl.phi_r)
    fd.ng_factor = 1.5 * (fd.nq_factor - 1) * np.tan(sl.phi_r)

    # shape factors
    if sl.phi_r == 0:
        s_c = 0.2 * fd.width / fd.length
    else:
        s_c = 1.0 + fd.nq_factor / fd.nc_factor * fd.width / fd.length

    s_q = 1.0 + fd.width / fd.length * np.sin(sl.phi_r)
    s_g = 1.0 - 0.4 * fd.width / fd.length

    # depth factors:
    if fd.depth / fd.width > 1:
        k = np.arctan(fd.depth / fd.width)
    else:
        k = fd.depth / fd.width
    d_c = 1 + 0.4 * k
    if sl.phi == 0:
        d_c = 0.4 * k
    d_q = 1 + 2 * np.tan(sl.phi_r) * (1 - np.sin(sl.phi_r)) ** 2 * k
    d_g = 1.0

    # incline load factors:
    if sl.phi_r == 0:
        i_q = 1.0
        i_c = 0.5 - 0.5 * np.sqrt(1 - horizontal_load / area_foundation * c_a)
        i_g = 1.0
    else:
        i_q = ((1.0 - 0.5 * horizontal_load /
                (vertical_load + area_foundation * c_a / np.tan(sl.phi_r))) ** 5)
        i_c = i_q - (1 - i_q) / (fd.nq_factor - 1)
        i_g = ((1 - (0.7 * horizontal_load) /
                (vertical_load + area_foundation * c_a / np.tan(sl.phi_r))) ** 5)

    # slope factors:
    if sl.phi_r == 0:
        g_c = (slope / np.pi * 180) / 147
    else:
        g_c = 1.0 - (slope / np.pi * 180) / 147
    g_q = 1 - 0.5 * np.tan(slope) ** 5
    g_g = g_q

    # base tilt factors:
    if sl.phi_r == 0:
        b_c = (base_tilt / np.pi * 180) / 147
    else:
        b_c = 1.0 - (base_tilt / np.pi * 180) / 147
    b_q = (np.exp(-0.0349 * (base_tilt / np.pi * 180) * np.tan(sl.phi_r)))
    b_g = (np.exp(-0.0471 * (base_tilt / np.pi * 180) * np.tan(sl.phi_r)))

    if verbose:
        log("Nc: ", fd.nc_factor)
        log("Nq: ", fd.nq_factor)
        log("Ng: ", fd.ng_factor)
        log("s_c: ", s_c)
        log("s_q: ", s_q)
        log("s_g: ", s_g)
        log("d_c: ", d_c)
        log("d_q: ", d_q)
        log("d_g: ", d_g)
        log("i_c: ", i_c)
        log("i_q: ", i_q)
        log("i_g: ", i_g)
        log("g_c: ", g_c)
        log("g_q: ", g_q)
        log("g_g: ", g_g)
        log("b_c: ", b_c)
        log("b_q: ", b_q)
        log("b_g: ", b_g)

    # stress at footing base:
    q_d = sl.unit_dry_weight * fd.depth

    # Capacity
    if sl.phi_r == 0:
        fd.q_ult = (sl.cohesion * fd.nc_factor *
                    (1 + s_c + d_c - i_c - g_c - b_c) + q_d)
    else:
        fd.q_ult = (sl.cohesion * fd.nc_factor *
                    s_c * d_c * i_c * g_c * b_c +
                    q_d * fd.nq_factor * s_q * d_q * i_q * g_q * b_q +
                    0.5 * fd.width * sl.unit_dry_weight *
                    fd.ng_factor * s_g * d_g * i_g * g_g * b_g)
def capacity_hansen_1970 ( sl , fd , h_l = 0 , h_b = 0 , vertical_load = 1 , slope = 0 , base_tilt = 0 , verbose = 0 , * * kwargs ) : if not kwargs . get ( "disable_requires" , False ) : models . check_required ( sl , [ "phi_r" , "cohesion" , "unit_dry_weight" ] ) models . check_required ( fd , [ "length" , "width" , "depth" ] ) area_foundation = fd . length * fd . width horizontal_load = np . sqrt ( h_l ** 2 + h_b ** 2 ) c_a = 0.6 - 1.0 * sl . cohesion fd . nq_factor = ( ( np . tan ( np . pi / 4 + sl . phi_r / 2 ) ) ** 2 * np . exp ( np . pi * np . tan ( sl . phi_r ) ) ) if sl . phi_r == 0 : fd . nc_factor = 5.14 else : fd . nc_factor = ( fd . nq_factor - 1 ) / np . tan ( sl . phi_r ) fd . ng_factor = 1.5 * ( fd . nq_factor - 1 ) * np . tan ( sl . phi_r ) # shape factors if sl . phi_r == 0 : s_c = 0.2 * fd . width / fd . length else : s_c = 1.0 + fd . nq_factor / fd . nc_factor * fd . width / fd . length s_q = 1.0 + fd . width / fd . length * np . sin ( sl . phi_r ) s_g = 1.0 - 0.4 * fd . width / fd . length # depth factors: if fd . depth / fd . width > 1 : k = np . arctan ( fd . depth / fd . width ) else : k = fd . depth / fd . width d_c = 1 + 0.4 * k if sl . phi == 0 : d_c = 0.4 * k d_q = 1 + 2 * np . tan ( sl . phi_r ) * ( 1 - np . sin ( sl . phi_r ) ) ** 2 * k d_g = 1.0 # incline load factors: if sl . phi_r == 0 : i_q = 1.0 i_c = 0.5 - 0.5 * np . sqrt ( 1 - horizontal_load / area_foundation * c_a ) i_g = 1.0 else : i_q = ( ( 1.0 - 0.5 * horizontal_load / ( vertical_load + area_foundation * c_a / np . tan ( sl . phi_r ) ) ) ** 5 ) i_c = i_q - ( 1 - i_q ) / ( fd . nq_factor - 1 ) i_g = ( ( 1 - ( 0.7 * horizontal_load ) / ( vertical_load + area_foundation * c_a / np . tan ( sl . phi_r ) ) ) ** 5 ) # slope factors: if sl . phi_r == 0 : g_c = ( slope / np . pi * 180 ) / 147 else : g_c = 1.0 - ( slope / np . pi * 180 ) / 147 g_q = 1 - 0.5 * np . tan ( slope ) ** 5 g_g = g_q # base tilt factors: if sl . phi_r == 0 : b_c = ( base_tilt / np . pi * 180 ) / 147 else : b_c = 1.0 - ( base_tilt / np . pi * 180 ) / 147 b_q = ( np . exp ( - 0.0349 * ( base_tilt / np . pi * 180 ) * np . tan ( sl . phi_r ) ) ) b_g = ( np . exp ( - 0.0471 * ( base_tilt / np . pi * 180 ) * np . tan ( sl . phi_r ) ) ) if verbose : log ( "Nc: " , fd . nc_factor ) log ( "Nq: " , fd . nq_factor ) log ( "Ng: " , fd . ng_factor ) log ( "s_c: " , s_c ) log ( "s_q: " , s_q ) log ( "s_g: " , s_g ) log ( "d_c: " , d_c ) log ( "d_q: " , d_q ) log ( "d_g: " , d_g ) log ( "i_c: " , i_c ) log ( "i_q: " , i_q ) log ( "i_g: " , i_g ) log ( "g_c: " , g_c ) log ( "g_q: " , g_q ) log ( "g_g: " , g_g ) log ( "b_c: " , b_c ) log ( "b_q: " , b_q ) log ( "b_g: " , b_g ) # stress at footing base: q_d = sl . unit_dry_weight * fd . depth # Capacity if sl . phi_r == 0 : fd . q_ult = ( sl . cohesion * fd . nc_factor * ( 1 + s_c + d_c - i_c - g_c - b_c ) + q_d ) else : fd . q_ult = ( sl . cohesion * fd . nc_factor * s_c * d_c * i_c * g_c * b_c + q_d * fd . nq_factor * s_q * d_q * i_q * g_q * b_q + 0.5 * fd . width * sl . unit_dry_weight * fd . ng_factor * s_g * d_g * i_g * g_g * b_g )
Calculates the foundation capacity according Hansen (1970)
    Ref: http://bestengineeringprojects.com/civil-projects/
    hansens-bearing-capacity-theory/

    :param sl: Soil object
    :param fd: Foundation object
    :param h_l: Horizontal load parallel to length
    :param h_b: Horizontal load parallel to width
    :param vertical_load: Vertical load
    :param slope: ground slope
    :param base_tilt: The slope of the underside of the foundation
    :param verbose: verbosity
    :return: ultimate bearing stress
Calculates the foundation capacity according Hansen ( 1970 ) Ref : http : // bestengineeringprojects . com / civil - projects / hansens - bearing - capacity - theory /