You can apply distributed axial loads along truss members:
from milcapy.loads.load import DistributedLoadtruss.set_current_load_pattern('Wind')truss.set_distributed_load(DistributedLoad( p_i=5.0, # Axial load at node i (force/length) p_j=5.0 # Axial load at node j (force/length)))
The equivalent nodal forces are computed as:
F_i = (2*p_i + p_j) * L / 6F_j = (2*p_j + p_i) * L / 6
Distributed loads are automatically converted to equivalent nodal forces during assembly.
import milcapy as mx# Create a Warren truss bridgemodel = mx.Model()# Bottom chord nodesfor i in range(6): model.add_node(i+1, i*2, 0)# Top chord nodes for i in range(5): model.add_node(i+7, i*2+1, 2)# Material and sectionsmodel.add_material('Steel', E=200e9, v=0.3, rho=7850)model.add_section('Chord', material='Steel', A=0.003)model.add_section('Web', material='Steel', A=0.002)# Bottom chordfor i in range(5): model.add_truss(i+1, i+1, i+2, 'Chord')# Top chordfor i in range(4): model.add_truss(i+6, i+7, i+8, 'Chord')# Web members (diagonal and vertical)model.add_truss(11, 1, 7, 'Web') # Diagonalmodel.add_truss(12, 7, 2, 'Web') # Diagonalmodel.add_truss(13, 2, 8, 'Web') # Diagonal# ... continue pattern
if axial_force > 0: print("Member in TENSION")else: print("Member in COMPRESSION")
Important: Truss members in compression must be checked for buckling. Milcapy computes axial forces only; stability checks must be performed separately.