civilpy.geotech package
Submodules
civilpy.geotech.culmanns module
CivilPy Copyright (C) 2019-2026 - Dane Parks
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
- class civilpy.geotech.culmanns.CulmannsMethod(coordinates_list=None, soil_unit_weight=<Quantity(117.7, 'force_pound / foot ** 3')>, soil_angle_int_friction=<Quantity(29.8, 'degree')>, angle_back_wall_with_horizontal=<Quantity(0, 'degree')>, angle_of_wall_friction_delta=<Quantity(0, 'degree')>, angle_of_wall_friction_gamma=<Quantity(90, 'degree')>, load_scale=<Quantity(2.9059, 'kip / foot')>, wall_height=<Quantity(19.5, 'foot')>, soil_height_above_wall=<Quantity(4.4, 'foot')>, num_slices=19, total_length=<Quantity(38, 'foot')>, track_offset=<Quantity(2, 'foot')>)[source]
Bases:
objectImplements Culmann’s graphical method for lateral earth pressure.
Culmann’s method is a graphical/tabular approach for determining the maximum active lateral earth pressure on a retaining wall under arbitrary backfill geometry and surcharge loading. This class builds the calculation spreadsheet and provides plotting utilities.
- table
Spreadsheet of intermediate Culmann calculations (a_i, b_i, c_i, wedge areas, weights, x/y coordinates, and resultant forces).
- Type:
- __init__(coordinates_list=None, soil_unit_weight=<Quantity(117.7, 'force_pound / foot ** 3')>, soil_angle_int_friction=<Quantity(29.8, 'degree')>, angle_back_wall_with_horizontal=<Quantity(0, 'degree')>, angle_of_wall_friction_delta=<Quantity(0, 'degree')>, angle_of_wall_friction_gamma=<Quantity(90, 'degree')>, load_scale=<Quantity(2.9059, 'kip / foot')>, wall_height=<Quantity(19.5, 'foot')>, soil_height_above_wall=<Quantity(4.4, 'foot')>, num_slices=19, total_length=<Quantity(38, 'foot')>, track_offset=<Quantity(2, 'foot')>)[source]
Initialise the Culmann’s method calculator and generate the table.
- Parameters:
coordinates_list (dict, optional) – Dictionary of labelled coordinate points defining the wall geometry and trial wedge locations. Defaults to
default_coordinates_listbuilt from Cooper E80 loading.soil_unit_weight (pint.Quantity) – Unit weight of the retained soil (default 117.7 lbf/ft³).
soil_angle_int_friction (pint.Quantity) – Angle of internal friction φ (default 29.8°).
angle_back_wall_with_horizontal (pint.Quantity) – Angle α between the back of the wall and horizontal (default 0°).
angle_of_wall_friction_delta (pint.Quantity) – Wall friction angle δ (default 0°).
angle_of_wall_friction_gamma (pint.Quantity) – Angle γ used in the force polygon construction (default 90°).
load_scale (pint.Quantity) – Scale factor converting cumulative wedge weight to plot coordinates (default 2.9059 kips/ft).
wall_height (pint.Quantity) – Height of the retaining wall (default 19.5 ft).
soil_height_above_wall (pint.Quantity) – Height of soil above the wall top (default 4.4 ft).
num_slices (int) – Number of trial wedge slices (default 19).
total_length (pint.Quantity) – Total horizontal extent of the backfill area (default 38 ft).
track_offset (pint.Quantity) – Horizontal offset to the first trial point (default 2 ft).
- calculate_A_i(s_i, a_i, b_i, c_i)[source]
Calculate area A_i (ft^2) using the formula provided.
- calculate_a_i(x_val, y_val)[source]
Calculate a_i (ft) based on the current coordinates.
- calculate_b_i(current_key, keys, coordinates_list, x_val, y_val)[source]
Calculate b_i (ft) using the previous point’s coordinates.
- calculate_c_i(current_key, keys, coordinates_list)[source]
Calculate c_i (ft) based on the previous coordinates. If first point, refer to point ‘A’.
- calculate_cumulative_weights(values)[source]
Calculate cumulative weights (lbf/ft) for a list of values.
- calculate_ll_surcharge(b_i)[source]
Calculate the live-load surcharge for a wedge slice per unit wall length.
Uses a simplified Cooper E80 equivalent strip load distribution. The E80 axle load (80 000 lbf) is distributed over a 4-rail area (18 ft tie spacing × 8.5 ft track width) and integrated over the wedge base length b_i.
- Parameters:
b_i (pint.Quantity) – Length of the wedge base segment b_i (ft).
- Returns:
Live load surcharge contribution (lbf/ft).
- Return type:
pint.Quantity
- calculate_running_total(values)[source]
Calculate running total (ft) for a list of values.
- calculate_s_i(a_i, b_i, c_i)[source]
Calculate s_i (ft) as the semi-perimeter of the triangle.
- calculate_w_i(A_i, soil_unit_weight)[source]
Calculate w_i (lbf/ft) as the incremental weight of the triangle per unit length.
- calculate_x_cgi(x_val, next_x_val)[source]
Calculate x_{cgi} (ft) as the center of gravity x-coordinate.
- calculate_x_ci(total_weight, load_scale, soil_angle_int_friction)[source]
Calculate x_ci (dimensionless plotting coordinate on the force polygon).
Converts total wedge weight to a force-polygon x-coordinate by dividing by the load scale (converted to matching units) and projecting onto the friction angle direction.
- Parameters:
total_weight (pint.Quantity) – Total cumulative wedge weight in lbf/ft.
load_scale (pint.Quantity) – Force-polygon scale factor in kips/ft.
soil_angle_int_friction (pint.Quantity) – Angle of internal friction φ.
- Returns:
The x_ci plotting coordinate (dimensionless).
- Return type:
- calculate_x_ci_prime(y_ci, x_ci, angle_back_wall_with_horizontal, angle_of_wall_friction_delta, soil_angle_int_friction, D, C)[source]
- calculate_y_cgi(y_val, next_y_val)[source]
Calculate y_{cgi} (ft) as the center of gravity y-coordinate.
- calculate_y_ci(x_ci, soil_angle_int_friction)[source]
Calculate y_ci (dimensionless plotting coordinate on the force polygon).
- generate_spreadsheet(coordinates_list, soil_unit_weight, load_scale, soil_angle_int_friction, angle_back_wall_with_horizontal, angle_of_wall_friction_delta)[source]
Calculate various columns for soil and wall friction analysis.
Args: coordinates_list (dict): Dictionary containing coordinate points. soil_unit_weight (float): The unit weight of the soil. load_scale (float): Load scale value. soil_angle_int_friction (float): Angle of internal friction of soil in radians. angle_back_wall_with_horizontal (float): Angle between back of wall and horizontal in radians. angle_of_wall_friction_delta (float): Angle of wall friction in radians.
Returns: pd.DataFrame: DataFrame containing computed columns.
- plot_results()[source]
Plot the retaining wall geometry and Culmann’s method construction.
Generates a matplotlib figure showing:
Trial wedge points (C_1 … C_n) and the base points A and B.
Dashed green lines connecting each C-point back to B.
The ground surface line from A through all C-points.
A trapezoidal retaining wall cross-section.
The figure is displayed via
plt.show().
- civilpy.geotech.culmanns.build_coordinates_list(starting_coordinates_list={'A': (0, 23.9, 'LS1'), 'B': (0, 0, None), 'C_1': (2.0, 19.5, 'LS1'), 'C_10': (20.0, 19.5, 'LS1'), 'C_11': (22.0, 19.5, None), 'C_12': (24.0, 19.5, None), 'C_13': (26.0, 19.5, 'LS2'), 'C_14': (28.0, 19.5, 'LS2'), 'C_15': (30.0, 19.5, 'LS2'), 'C_16': (32.0, 19.5, 'LS2'), 'C_17': (34.0, 19.5, 'LS2'), 'C_18': (36.0, 19.5, 'LS2'), 'C_19': (38.0, 19.5, 'LS2'), 'C_2': (4.0, 19.5, 'LS1'), 'C_3': (6.0, 19.5, 'LS1'), 'C_4': (8.0, 19.5, 'LS1'), 'C_5': (10.0, 19.5, 'LS1'), 'C_6': (12.0, 19.5, 'LS1'), 'C_7': (14.0, 19.5, 'LS1'), 'C_8': (16.0, 19.5, 'LS1'), 'C_9': (18.0, 19.5, 'LS1')}, total_length=38, num_slices=19, track_offset=2, wall_height=19.5, soil_height_above_wall=0)[source]
Populate a Culmann’s method coordinate dictionary with trial wedge points.
Adds
num_slicesC-points ("C_1"…"C_n") to starting_coordinates_list. Each point represents the top of a trial failure wedge at a horizontal spacing oftotal_length / num_slicesstarting from track_offset.- Parameters:
starting_coordinates_list (dict) – Base dictionary containing at least the fixed
"A"(wall top) and"B"(wall toe) points.total_length (float) – Horizontal extent of the soil wedge area (ft).
num_slices (int) – Number of trial wedge points to generate.
track_offset (float) – Horizontal offset from the wall face to the first trial point (ft).
wall_height (float) – Height of the retaining wall (ft).
soil_height_above_wall (float) – Additional soil height above the wall top (ft).
- Returns:
Updated coordinate dictionary with the new C-points added.
- Return type:
- civilpy.geotech.culmanns.find_key_for_value_in_tuple_range(data, number)[source]
Find the key in a dictionary where the number falls between the first two values of the tuple.
Args: data (dict): Dictionary containing lists of tuples. number (float): The number to search for within the tuple ranges.
Returns: key: The key in the dictionary whose tuple contains the number, or None if not found.
Module contents
CivilPy Copyright (C) 2019-2026 - Dane Parks
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
- civilpy.geotech.coulomb_active_pressure(unit_weight, height, friction_angle, wall_friction_angle, backfill_inclination, wall_inclination)[source]
Calculate active earth pressure against an abutment using the Coulomb method.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³ or lb/ft³) height (float): Height of the abutment (meters or feet) friction_angle (float): Internal friction angle of the soil (degrees) wall_friction_angle (float): Angle of wall friction (delta) (degrees) backfill_inclination (float): Angle of inclination of the backfill surface (theta) (degrees) wall_inclination (float): Inclination of the back side of the wall (beta) (degrees)
Returns: float: Active earth pressure (kN/m² or lb/ft²)
- civilpy.geotech.coulomb_active_pressure_with_surcharge(unit_weight, height, friction_angle, wall_friction_angle, backfill_inclination, wall_inclination, surcharge_load)[source]
Calculate active earth pressure against an abutment using the Coulomb method with a surcharge load.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³ or lb/ft³) height (float): Height of the abutment (meters or feet) friction_angle (float): Internal friction angle of the soil (degrees) wall_friction_angle (float): Angle of wall friction (delta) (degrees) backfill_inclination (float): Angle of inclination of the backfill surface (theta) (degrees) wall_inclination (float): Inclination of the back side of the wall (beta) (degrees) surcharge_load (float): Surcharge load at the surface (kN/m² or lb/ft²)
Returns: float: Active earth pressure (kN/m² or lb/ft²)
- civilpy.geotech.culmann_lateral_pressure(unit_weight, height, cohesion, friction_angle, wall_friction_angle, num_slices=100)[source]
Calculate horizontal lateral earth pressure using Culmann’s method.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³) height (float): Height of the wall (meters) cohesion (float): Cohesion of the soil (kPa) friction_angle (float): Internal friction angle of the soil (degrees) wall_friction_angle (float): Wall friction angle (degrees) num_slices (int): Number of slices for the graphical method
Returns: float: Horizontal lateral earth pressure (kPa)
- civilpy.geotech.culmann_lateral_pressure_with_surcharge(unit_weight, height, cohesion, friction_angle, wall_friction_angle, surcharge_load, num_slices=100)[source]
Calculate horizontal lateral earth pressure using Culmann’s method including a live load surcharge.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³) height (float): Height of the wall (meters) cohesion (float): Cohesion of the soil (kPa) friction_angle (float): Internal friction angle of the soil (degrees) wall_friction_angle (float): Wall friction angle (degrees) surcharge_load (float): Live load surcharge at the surface (kPa) num_slices (int): Number of slices for the graphical method
Returns: float: Horizontal lateral earth pressure (kPa)
- civilpy.geotech.rankine_active_pressure(unit_weight, height, friction_angle)[source]
Calculate active earth pressure against an abutment using the Rankine method.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³ or lb/ft³) height (float): Height of the abutment (meters or feet) friction_angle (float): Internal friction angle of the soil (degrees)
Returns: float: Active earth pressure (kN/m or lb/ft)
- civilpy.geotech.rankine_active_pressure_with_surcharge(unit_weight, height, friction_angle, surcharge_load)[source]
Calculate active earth pressure against an abutment using the Rankine method with a surcharge load.
Parameters: unit_weight (float): Unit weight of the soil (kN/m³ or lb/ft³) height (float): Height of the abutment (meters or feet) friction_angle (float): Internal friction angle of the soil (degrees) surcharge_load (float): Surcharge load at the surface (kN/m² or lb/ft²)
Returns: float: Active earth pressure (kN/m² or lb/ft²)