civilpy.structural.arema package

Submodules

civilpy.structural.arema.masonry module

CivilPy Copyright (C) 2019 - 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.structural.arema.rail_tpg_design 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.structural.arema.rail_tpg_design.GlobalDefinitions(f_y=<Quantity(50000, 'pound_force_per_square_inch')>, e_steel=<Quantity(29000000, 'pound_force_per_square_inch')>, tie_length=<Quantity(8.5, 'foot')>, tie_width=<Quantity(8, 'inch')>, tie_depth=<Quantity(7, 'inch')>, tie_design_width=<Quantity(8, 'foot')>, max_tie_spacing=<Quantity(24, 'inch')>, future_ballast=<Quantity(12, 'inch')>, future_ballast_quantity=1, tie_material='Concrete', tie_spacing=<Quantity(1.5, 'foot')>, railroad_gage=<Quantity(4.70833333, 'foot')>, poisson_ratio=0.3, steel_unit_weight=<Quantity(490.0, 'force_pound / foot ** 3')>, ballast_unit_weight=<Quantity(120.0, 'force_pound / foot ** 3')>, tie_unit_weight=<Quantity(150.0, 'force_pound / foot ** 3')>, track_unit_weight=<Quantity(200.0, 'force_pound / foot')>, waterproofing_unit_weight=<Quantity(2.0, 'force_pound / foot ** 2')>, steel_connection_contingency=0.1, asphalt_unit_weight=<Quantity(150.0, 'force_pound / foot ** 3')>, timber_unit_weight=<Quantity(60.0, 'force_pound / foot ** 3')>)[source]

Bases: object

Global material and geometric constants for a through-plate-girder railroad bridge design.

All parameters are pre-populated with typical values per AREMA Chapter 15. Override any argument to match project-specific conditions.

__init__(f_y=<Quantity(50000, 'pound_force_per_square_inch')>, e_steel=<Quantity(29000000, 'pound_force_per_square_inch')>, tie_length=<Quantity(8.5, 'foot')>, tie_width=<Quantity(8, 'inch')>, tie_depth=<Quantity(7, 'inch')>, tie_design_width=<Quantity(8, 'foot')>, max_tie_spacing=<Quantity(24, 'inch')>, future_ballast=<Quantity(12, 'inch')>, future_ballast_quantity=1, tie_material='Concrete', tie_spacing=<Quantity(1.5, 'foot')>, railroad_gage=<Quantity(4.70833333, 'foot')>, poisson_ratio=0.3, steel_unit_weight=<Quantity(490.0, 'force_pound / foot ** 3')>, ballast_unit_weight=<Quantity(120.0, 'force_pound / foot ** 3')>, tie_unit_weight=<Quantity(150.0, 'force_pound / foot ** 3')>, track_unit_weight=<Quantity(200.0, 'force_pound / foot')>, waterproofing_unit_weight=<Quantity(2.0, 'force_pound / foot ** 2')>, steel_connection_contingency=0.1, asphalt_unit_weight=<Quantity(150.0, 'force_pound / foot ** 3')>, timber_unit_weight=<Quantity(60.0, 'force_pound / foot ** 3')>)[source]

Initialize global material and geometry constants. All arguments are keyword-only with AREMA Chapter 15 defaults. Override any value for project-specific conditions — see class docstring for parameter descriptions.

class civilpy.structural.arema.rail_tpg_design.LoadDefinitions(diaphragm_weight_ft=<Quantity(61.0, 'force_pound / foot')>, diaphragm_quant=1, bracing_quant=4, ballasted_deck_reduction=0.9, rocking_percent=0.2, wind_load=<Quantity(300.0, 'force_pound / foot')>, wind_load_h=<Quantity(8, 'foot')>, axel_load=<Quantity(100, 'kip')>, reduction_fact=0.9, wheel_load_percentage=0.2, e80_50_ft=<Quantity(1901.8, 'kip * foot')>, e80_55_ft=<Quantity(2233.1, 'kip * foot')>, end_diaphragm_weight_per_ft=<Quantity(61.0, 'force_pound / foot')>, end_diaphragm_quantity=1, axel_alternative_live_load=<Quantity(100, 'kip')>, jack_pt_offset=<Quantity(3.75, 'foot')>)[source]

Bases: object

Live and dead load definitions for a through-plate-girder railroad bridge design.

Defaults reflect E80 Cooper loading per AREMA Chapter 15. Override arguments to match project-specific loading conditions or alternative load ratings.

__init__(diaphragm_weight_ft=<Quantity(61.0, 'force_pound / foot')>, diaphragm_quant=1, bracing_quant=4, ballasted_deck_reduction=0.9, rocking_percent=0.2, wind_load=<Quantity(300.0, 'force_pound / foot')>, wind_load_h=<Quantity(8, 'foot')>, axel_load=<Quantity(100, 'kip')>, reduction_fact=0.9, wheel_load_percentage=0.2, e80_50_ft=<Quantity(1901.8, 'kip * foot')>, e80_55_ft=<Quantity(2233.1, 'kip * foot')>, end_diaphragm_weight_per_ft=<Quantity(61.0, 'force_pound / foot')>, end_diaphragm_quantity=1, axel_alternative_live_load=<Quantity(100, 'kip')>, jack_pt_offset=<Quantity(3.75, 'foot')>)[source]

Initialize E80 Cooper load definitions. All arguments are keyword-only with AREMA Chapter 15 defaults. Override any value for alternate load ratings or project-specific conditions — see class docstring for descriptions.

class civilpy.structural.arema.rail_tpg_design.TPG(floorbeam_spacing=<Quantity(2.6, 'foot')>, floorbeam_quantity=19, end_floorbeam_quantity=2, girder_spacing=<Quantity(20, 'foot')>, girder_web_height=<Quantity(60, 'inch')>, girder_web_thickness=<Quantity(0.625, 'inch')>, girder_flange_width=<Quantity(20, 'inch')>, girder_flange_thickness=<Quantity(1.625, 'inch')>, max_diaphragm_spacing=<Quantity(10.0, 'foot')>, diaphragm_quantity=20, diaphragm_dia_hole=<Quantity(1.0, 'inch')>, diaphragm_num_holes=4, end_diaphragm_hole_quantity=6, lateral_dia_holes=<Quantity(1.0, 'inch')>, lateral_num_holes=2, web_conn_girder_holes_num=6, web_conn_girder_holes_dia=<Quantity(1, 'inch')>, span_length=<Quantity(52.0, 'foot')>, girder_length=<Quantity(54, 'foot')>, floor_length=<Quantity(58, 'foot')>, floor_quantity=1, rail_quantity=1, asphaltic_plank_t=<Quantity(1, 'inch')>, ballast_plate_spacing=<Quantity(3, 'foot')>, asphaltic_plank_quant=1, deck_plate_thickness=<Quantity(0.75, 'inch')>, min_ballast_below_tie=<Quantity(6, 'inch')>, deck_plate_width=<Quantity(12.0, 'inch')>, waterproofing_quant=1, ballast_under_ties_t=<Quantity(9, 'inch')>, ballast_under_ties_quant=1, tie_level_ballast_quant=1, tie_level_ballast_sloped_reduction=<Quantity(2, 'foot ** 2')>, tie_level_ballast_include_pre_move_weight=False, dia_stop_pl_t=<Quantity(0.5, 'inch')>, dia_stop_pl_width=<Quantity(2.13747995, 'foot')>, dia_stop_pl_quantity=40, horizontal_upper_floor_pl_t=<Quantity(0.5, 'inch')>, horizontal_upper_floor_pl_width=<Quantity(2.15104167, 'foot')>, horizontal_upper_floor_pl_quantity=10, girder_quantity=2, assumed_mean_impact_perc=0.35, bracing_section='MC10x33.6', lateral_bracing_length=<Quantity(32.8024, 'foot')>, lateral_bracing_quantity=4, trans_stiff_da=<Quantity(96, 'inch')>, trans_stiff_actual_da=<Quantity(60, 'inch')>, stiffener_width_bst=<Quantity(6, 'inch')>, stiffener_thickness_tst=<Quantity(0.5, 'inch')>, bearing_stiffener_thickness_tsb=<Quantity(1, 'inch')>, bearing_stiffener_corner_clip=<Quantity(1, 'inch')>, bearing_stiffener_fillet_weld_leg=<Quantity(0.3125, 'inch')>, end_floorbeam=<civilpy.structural.steel.W object>, diaphragm=<civilpy.structural.steel.W object>, lateral_bracing=<civilpy.structural.steel.MC object>, load_values=<civilpy.structural.arema.rail_tpg_design.LoadDefinitions object>, global_values=<civilpy.structural.arema.rail_tpg_design.GlobalDefinitions object>, floorbeam_values=<civilpy.structural.arema.rail_tpg_design.ThroughPlateGirderFloorbeam object>, design_speed=<Quantity(35.0, 'mile / hour')>, curve_radius=<Quantity(2000, 'foot')>)[source]

Bases: object

run_calcs()[source]
class civilpy.structural.arema.rail_tpg_design.ThroughPlateGirderFloorbeam(rolled_shape=True, shape='W24x250', fb_depth=<Quantity(26.3, 'inch')>, fb_web_thickness=<Quantity(1.04, 'inch')>, fb_i_x=<Quantity(8490.0, 'inch ** 4')>, fb_flange_width=<Quantity(13.2, 'inch')>, fb_weight=<Quantity(250.0, 'force_pound / foot')>, fb_r_y=<Quantity(3.14, 'inch')>, fb_flange_thickness=<Quantity(1.89, 'inch')>, fb_bracket_flange_t=<Quantity(0.75, 'inch')>, fb_bracket_flange_web=<Quantity(8.0, 'inch')>, fb_bracket_flange_len=<Quantity(3.33, 'foot')>, fb_bracket_web_t=<Quantity(0.5, 'inch')>, fb_bracket_web_width=<Quantity(1.83, 'foot')>, fb_bracket_web_height=<Quantity(2.75, 'foot')>, fb_bracket_quantity=12, fb_length=<Quantity(20, 'foot')>, rr_gage=<Quantity(4.70833333, 'foot')>, A=<Quantity(100, 'kip')>, s=<Quantity(5, 'foot')>)[source]

Bases: object

Through-plate-girder floor beam design per AREMA Chapter 15.

Models a single floor beam in a through-plate-girder railroad bridge, including bracket geometry, loading, and section properties. Works with GlobalDefinitions and LoadDefinitions for material constants and load inputs.

Defaults to a W24x250 rolled shape. Set rolled_shape=False to use a built-up section defined by the dimensional arguments.

civilpy.structural.arema.steel module

class civilpy.structural.arema.steel.LoadRatingMember(ballast_cover: ~pint.registry.Quantity = None, length: ~pint.registry.Quantity = None, multi_track_factor: int = 1, span_length: ~pint.registry.Quantity = None, speed: ~pint.registry.Quantity = None, degree_of_curvature: ~pint.registry.Quantity = None, super_elevation=None, distance_to_top_of_rail: ~pint.registry.Quantity = None, cl_track_to_cl_girders: ~pint.registry.Quantity = <Quantity(0, 'inch')>, rail_spacing: ~pint.registry.Quantity = <Quantity(5, 'foot')>, load_cases: list = None, section_ids: list = None, element_ids: list = None, results_request: dict = {'Argument': {'COMPONENTS': ['Elem', 'Load', 'Part', 'Axial', 'Shear-y', 'Shear-z', 'Torsion', 'Moment-y', 'Moment-z'], 'EXPORT_PATH': PosixPath('/builds/Dane/civilpy/output.json'), 'LOAD_CASE_NAMES': ['DL(CB)', 'Moving Load Case(MV:all)'], 'NODE_ELEMS': {'KEYS': ['310to536']}, 'PARTS': ['Part I', 'Part 1/4', 'Part 2/4', 'Part 3/4', 'Part J'], 'STYLES': {'FORMAT': 'Default', 'PLACE': 12}, 'TABLE_NAME': 'BeamForce', 'TABLE_TYPE': 'BEAMFORCE', 'UNIT': {'DIST': 'FT', 'FORCE': 'KIPS'}}}, export_path: str = PosixPath('/builds/Dane/civilpy/output/output.json'), dl_case_name: str = '', ll_case_name: str = '', rocking_case_name: str = '', wind_load: bool = True, load_factor: bool = True, f_y: ~pint.registry.Quantity = None, e_s: ~pint.registry.Quantity = None, poissons_ratio: float = None, l_brace: float = None, r_yf: float = None, depth_girder: ~pint.registry.Quantity = None, web_thickness: ~pint.registry.Quantity = None, area_flange: ~pint.registry.Quantity = None, s_x: ~pint.registry.Quantity = None)[source]

Bases: object

Class for load rating bridge members based on the guidance in AREMA Chapter 15

print_results()[source]

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/>.

class civilpy.structural.arema.CooperE80(series: int = 80, distances: list = <factory>, magnitudes: list = <factory>, distributed: dict = <factory>, spacing: str = <Quantity(59.5, 'inch')>)[source]

Bases: object

Class for providing quick access to cooper e80 loadings, provides all values for standard coopers e80 us the class as follows:

loads = CooperE80()

for all CooperE80 variants (i.e. E60) the class can be converted like so:

e60_loads = CooperE80().to_e_series(60)

distances: list
distributed: dict
magnitudes: list
series: int = 80
spacing: str = <Quantity(59.5, 'inch')>
class civilpy.structural.arema.CooperE80EqStrip(length_of_train=<Quantity(150, 'foot')>)[source]

Bases: object

Class to represent Cooper’s E80 loading as a series of distributed loads.

Currently ignores the front 40k axel and starts with the first 80K axel in order to align with Geotech teams calculations done up to this point as well as extending the loads 1.5’ in front of and behind each axel.

distances: list[tuple]
magnitudes: list[int]
tie_width: float