geofound/capacity.py
def size_footing_for_capacity(sl, vertical_load, fos=1.0, length_to_width=1.0, verbose=0, **kwargs):
    """
    Determine the size of a footing given an aspect ratio and a load
    :param sl: Soil object
    :param vertical_load: The applied load to the foundation
    :param fos: The target factor of safety
    :param length_to_width: The desired length to width ratio of the foundation
    :param verbose: verbosity
    :return: a Foundation object
    """
    method = kwargs.get("method", 'vesics')
    depth_to_width = kwargs.get("depth_to_width", 0)
    depth = kwargs.get("depth", 0)
    use_depth_to_width = 0
    if not depth:
        use_depth_to_width = 1

    # Find approximate size
    fd = models.FoundationRaft()
    fd.width = .5  # start with B=1.0m
    for i in range(50):
        fd.length = length_to_width * fd.width
        if use_depth_to_width:
            fd.depth = depth_to_width * fd.width
        capacity_method_selector(sl, fd, method)
        q = fd.q_ult

        bearing_capacity = q * fd.length * fd.width
        fs_actual = bearing_capacity / vertical_load

        if fs_actual < fos:
            # Need to increase foundation sizes
            fd.width += 0.5
        else:
            if verbose:
                log("fs_actual: ", fs_actual)
                log("fd.width: ", fd.width)
            break

    # at this stage the current size should be too big
    width_array = []
    fs_array = []
    for j in range(11):
        width_array.append(fd.width)
        fd.length = length_to_width * fd.width
        if use_depth_to_width:
            fd.depth = depth_to_width * fd.width
        capacity_method_selector(sl, fd, method)
        q = fd.q_ult

        capacity = q * fd.length * fd.width

        fs_array.append(capacity / vertical_load)

        fd.width = fd.width - 0.5 / 10

    # search the array until FS satisfied:
    if verbose:
        log("reqFS: ", fos)
        log("width array: \n", width_array)
        log("FS array: \n", fs_array)

    for fs in range(len(fs_array)):
        if fs_array[fs] < fos:
            fd.width = width_array[fs - 1]
            fd.length = length_to_width * fd.width
            if use_depth_to_width:
                fd.depth = depth_to_width * fd.width
            capacity_method_selector(sl, fd, method)
            break
        if fs == len(fs_array) - 1:
            DesignError("No suitable foundation sizes could be determined!")

    return fd
def size_footing_for_capacity(sl, vertical_load, fos=1.0, length_to_width=1.0, verbose=0, **kwargs):
    """
    Determine the size of a footing given an aspect ratio and a load
    :param sl: Soil object
    :param vertical_load: The applied load to the foundation
    :param fos: The target factor of safety
    :param length_to_width: The desired length to width ratio of the foundation
    :param verbose: verbosity
    :return: a Foundation object
    """
    method = kwargs.get("method", 'vesics')
    depth_to_width = kwargs.get("depth_to_width", 0)
    depth = kwargs.get("depth", 0)
    use_depth_to_width = 0
    if not depth:
        use_depth_to_width = 1

    # Find approximate size
    fd = models.FoundationRaft()
    fd.width = .5  # start with B=1.0m
    for i in range(50):
        fd.length = length_to_width * fd.width
        if use_depth_to_width:
            fd.depth = depth_to_width * fd.width
        capacity_method_selector(sl, fd, method)
        q = fd.q_ult

        bearing_capacity = q * fd.length * fd.width
        fs_actual = bearing_capacity / vertical_load

        if fs_actual < fos:
            # Need to increase foundation sizes
            fd.width += 0.5
        else:
            if verbose:
                log("fs_actual: ", fs_actual)
                log("fd.width: ", fd.width)
            break

    # at this stage the current size should be too big
    width_array = []
    fs_array = []
    for j in range(11):
        width_array.append(fd.width)
        fd.length = length_to_width * fd.width
        if use_depth_to_width:
            fd.depth = depth_to_width * fd.width
        capacity_method_selector(sl, fd, method)
        q = fd.q_ult

        capacity = q * fd.length * fd.width

        fs_array.append(capacity / vertical_load)

        fd.width = fd.width - 0.5 / 10

    # search the array until FS satisfied:
    if verbose:
        log("reqFS: ", fos)
        log("width array: \n", width_array)
        log("FS array: \n", fs_array)

    for fs in range(len(fs_array)):
        if fs_array[fs] < fos:
            fd.width = width_array[fs - 1]
            fd.length = length_to_width * fd.width
            if use_depth_to_width:
                fd.depth = depth_to_width * fd.width
            capacity_method_selector(sl, fd, method)
            break
        if fs == len(fs_array) - 1:
            DesignError("No suitable foundation sizes could be determined!")

    return fd
def size_footing_for_capacity ( sl , vertical_load , fos = 1.0 , length_to_width = 1.0 , verbose = 0 , * * kwargs ) : method = kwargs . get ( "method" , 'vesics' ) depth_to_width = kwargs . get ( "depth_to_width" , 0 ) depth = kwargs . get ( "depth" , 0 ) use_depth_to_width = 0 if not depth : use_depth_to_width = 1 # Find approximate size fd = models . FoundationRaft ( ) fd . width = .5 # start with B=1.0m for i in range ( 50 ) : fd . length = length_to_width * fd . width if use_depth_to_width : fd . depth = depth_to_width * fd . width capacity_method_selector ( sl , fd , method ) q = fd . q_ult bearing_capacity = q * fd . length * fd . width fs_actual = bearing_capacity / vertical_load if fs_actual < fos : # Need to increase foundation sizes fd . width += 0.5 else : if verbose : log ( "fs_actual: " , fs_actual ) log ( "fd.width: " , fd . width ) break # at this stage the current size should be too big width_array = [ ] fs_array = [ ] for j in range ( 11 ) : width_array . append ( fd . width ) fd . length = length_to_width * fd . width if use_depth_to_width : fd . depth = depth_to_width * fd . width capacity_method_selector ( sl , fd , method ) q = fd . q_ult capacity = q * fd . length * fd . width fs_array . append ( capacity / vertical_load ) fd . width = fd . width - 0.5 / 10 # search the array until FS satisfied: if verbose : log ( "reqFS: " , fos ) log ( "width array: \n" , width_array ) log ( "FS array: \n" , fs_array ) for fs in range ( len ( fs_array ) ) : if fs_array [ fs ] < fos : fd . width = width_array [ fs - 1 ] fd . length = length_to_width * fd . width if use_depth_to_width : fd . depth = depth_to_width * fd . width capacity_method_selector ( sl , fd , method ) break if fs == len ( fs_array ) - 1 : DesignError ( "No suitable foundation sizes could be determined!" ) return fd
Determine the size of a footing given an aspect ratio and a load
    :param sl: Soil object
    :param vertical_load: The applied load to the foundation
    :param fos: The target factor of safety
    :param length_to_width: The desired length to width ratio of the foundation
    :param verbose: verbosity
    :return: a Foundation object
Determine the size of a footing given an aspect ratio and a load : param sl : Soil object : param vertical_load : The applied load to the foundation : param fos : The target factor of safety : param length_to_width : The desired length to width ratio of the foundation : param verbose : verbosity : return : a Foundation object