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:
objectGlobal 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:
objectLive 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
- 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:
objectThrough-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
GlobalDefinitionsandLoadDefinitionsfor material constants and load inputs.Defaults to a W24x250 rolled shape. Set
rolled_shape=Falseto 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:
objectClass for load rating bridge members based on the guidance in AREMA Chapter 15
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:
objectClass 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)
- class civilpy.structural.arema.CooperE80EqStrip(length_of_train=<Quantity(150, 'foot')>)[source]
Bases:
objectClass 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.