0% found this document useful (0 votes)
8 views52 pages

Anastruct Library

The document provides a series of Python code snippets using the Anastruct library to model various structural elements such as beams, frames, and trusses. It includes examples of creating structures with different support types, applying loads, solving for reactions, and visualizing results through plots. Additionally, it demonstrates how to save and load truss systems using pickle for later use.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views52 pages

Anastruct Library

The document provides a series of Python code snippets using the Anastruct library to model various structural elements such as beams, frames, and trusses. It includes examples of creating structures with different support types, applying loads, solving for reactions, and visualizing results through plots. Additionally, it demonstrates how to save and load truss systems using pickle for later use.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

In [1]: from anastruct import SystemElements

ss = SystemElements()

Indeterminate Beam:
In [2]: from anastruct import SystemElements

ss = SystemElements()

# ----------------------------
# Create beam with required nodes
# ----------------------------
ss.add_element(location=[[0, 0], [10, 0]]) # Element 1
ss.add_element(location=[[10, 0], [20, 0]]) # Element 2
ss.add_element(location=[[20, 0], [40, 0]]) # Element 3

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed support at 0 ft
ss.add_support_roll(node_id=3) # Roller at 20 ft
ss.add_support_roll(node_id=4) # Roller at 40 ft

# ----------------------------
# Loads
# ----------------------------

# Point load: 20 k downward at 10 ft (node 2)


ss.point_load(node_id=2, Fy=-20)

# UDL: 1.5 k/ft from 20 ft to 40 ft (element 3)


ss.q_load(element_id=3, q=-1.5)

# ----------------------------
# Solve
# ----------------------------
[Link]()
# ----------------------------
# Plots
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
ss.show_displacement()
Beam With Spring Support:
In [50]: from anastruct import SystemElements

ss = SystemElements(EI=166666.6)

# ----------------------------
# Create beam with required nodes
# ----------------------------
ss.add_element(location=[[0, 0], [10, 0]]) # Element 1
ss.add_element(location=[[10, 0], [20, 0]]) # Element 2
ss.add_element(location=[[20, 0], [40, 0]]) # Element 3

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed support at 0 ft
ss.add_support_spring(node_id=3,translation = 2, k = 10) # Roller at 20 ft
ss.add_support_spring(node_id=4, translation = 2, k = 15) # Roller at 40 ft

#translation=1 → horizontal spring


# translation=2 → vertical spring
# translation=3 → rotational spring (moment)
# ----------------------------
# Loads
# ----------------------------

# Point load: 20 k downward at 10 ft (node 2)


ss.point_load(node_id=2, Fy=-20)

# UDL: 1.5 k/ft from 20 ft to 40 ft (element 3)


ss.q_load(element_id=3, q=-1.5)

# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Plots
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
Internal Hinge Beam:
In [56]: from anastruct import SystemElements

ss = SystemElements()

# ----------------------------
# Create beam with required nodes
# ----------------------------
ss.add_element(location=[[0, 0], [15, 0]]) # Element 1
ss.add_element(location=[[15, 0], [30, 0]], release_start=True) # Element 2 with hinge at Node 2

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed support at Node 1
ss.add_support_roll(node_id=3) # Roller support at Node 3

# ----------------------------
# Loads
# ----------------------------
ss.q_load(element_id=2, q=-5.403) # UDL on Element 2

# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Plots
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
In [ ]: from anastruct import SystemElements

ss = SystemElements()
# ----------------------------
# Create beam with required nodes
# ----------------------------
ss.add_element(location=[[0, 0], [10, 0]]) # Element 1
ss.add_element(location=[[10, 0], [20, 0]]) # Element 2
ss.add_element(location=[[20, 0], [40, 0]]) # Element 3

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed support at 0 ft
ss.add_support_roll(node_id=3) # Roller at 20 ft
ss.add_support_roll(node_id=4) # Roller at 40 ft

# ----------------------------
# Loads
# ----------------------------

# Point load: 20 k downward at 10 ft (node 2)


ss.point_load(node_id=2, Fy=-20)

# UDL: 1.5 k/ft from 20 ft to 40 ft (element 3)


ss.q_load(element_id=3, q=-1.5)

# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Plots
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
Indeterminate Frame:
In [ ]:

In [44]: from anastruct import SystemElements

ss = SystemElements()

# ----------------------------
# Frame geometry
# ----------------------------
ss.add_element(location=[[0, 0], [0, 15]], EI=1) # Element 1: Left column
ss.add_element(location=[[0, 15], [30, 15]], EI = 2) # Element 2: Beam
ss.add_element(location=[[30, 15], [30, 0]], EI = 1) # Element 3: Right column

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed base at left column
ss.add_support_hinged(node_id=4) # Roller base at right column

# ----------------------------
# Loads
# ----------------------------

# Horizontal point load at top-left joint (wind load)


ss.point_load(node_id=2, Fx=5)

# Vertical UDL on beam (gravity load)


ss.q_load(element_id=2, q=-2)

# ----------------------------
# Solve FIRST
# ----------------------------
[Link]()

# ----------------------------
# Results
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
Internal Hinge Frame:
In [64]: from anastruct import SystemElements

ss = SystemElements()

# ----------------------------
# Frame geometry
# ----------------------------
ss.add_element(location=[[0, 0], [0, 16]], EI=1) # Element 1: Left column
ss.add_element(location=[[0, 16], [40, 16]], EI = 2, release_start=True) # Element 2: Beam
ss.add_element(location=[[40, 16], [40, 0]], EI = 1) # Element 3: Right column

# ----------------------------
# Supports
# ----------------------------
ss.add_support_fixed(node_id=1) # Fixed base at left column
ss.add_support_fixed(node_id=4)
# ----------------------------
# Loads
# ----------------------------

# Vertical UDL on beam (gravity load)


ss.q_load(element_id=2, q=-1.5)

# ----------------------------
# Solve FIRST
# ----------------------------
[Link]()

# ----------------------------
# Results
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
Inclined Frame:
In [65]: from anastruct import SystemElements

ss = SystemElements()

# -------------------
# Geometry (ft)
# A(0,0) → B(20,16) → D(40,16)
# -------------------
ss.add_element(location=[[0, 0], [10, 10]], EI=2) # Inclined member (2I)
ss.add_element(location=[[10, 10], [30, 10]], EI=1) # Horizontal member (I)

# -------------------
# Supports
# -------------------
ss.add_support_fixed(node_id=1) # A
ss.add_support_fixed(node_id=3) # D

# -------------------
# Load
# -------------------
ss.q_load(element_id=2, q=-5) # 1.5 kip/ft downward

# -------------------
# Solve
# -------------------
[Link]()

# -------------------
# Results
# -------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_shear_force()
ss.show_bending_moment()
ss.show_axial_force()
In [69]: ss.show_reaction_force(figsize=(12, 6))
Indeterminate Truss With Rotated Support:
In [90]: from anastruct import SystemElements

# ----------------------------
# Truss setup
# ----------------------------
ss = SystemElements(EA=1000, EI=1e-6) # EA = constant, EI very small for pin-jointed truss

# ----------------------------
# Nodes and elements
# ----------------------------
# Node coordinates
nodes = {
'A': [0, 0],
'B': [20, 0],
'C': [0, 15],
'D': [20, 15]
}

# Elements (start_node, end_node)


elements = [
('A', 'B'),
('A', 'C'),
('A', 'D'),
('B', 'D'),
('C', 'D'),
('B', 'C'),
('C', 'B'), # Diagonal (BC) and diagonal (AC)
('C', 'D')
]

# Add elements
element_map = {} # to track element IDs
for i, (start, end) in enumerate(elements, start=1):
element_map[i] = ss.add_element(location=[nodes[start], nodes[end]], EI=1e-6) # EI ~0 for truss

# ----------------------------
# Supports
# ----------------------------
ss.add_support_hinged(node_id=1) # A pinned (fixed in x & y)
ss.add_support_roll(node_id=2) # B roller (vertical restrained)
ss.add_support_roll(node_id=4, direction= 1) # D roller (vertical restrained)

# ----------------------------
# Loads
# ----------------------------
ss.point_load(node_id=3, Fx= 10, Fy=-20) # C: 10k horizontal, 20k vertical
#ss.point_load(node_id=3, Fx=10)
# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Results
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
Indeterminate Truss:
In [89]: from anastruct import SystemElements

# ----------------------------
# Truss setup
# ----------------------------
ss = SystemElements(EA=1, EI=2) # EA constant, EI very small

# ----------------------------
# Nodes
# ----------------------------
nodes = {
'A': [0, 0],
'B': [40, 0],
'C': [80, 0],
'D': [120, 0],
'F': [40, 30],
'E': [80, 30]
}

# ----------------------------
# Elements (start, end)
# ----------------------------
elements = [
('A', 'B'), ('B', 'C'), ('C', 'D'), # Bottom chord
('F', 'E'), # Top chord
('B', 'F'), ('C', 'E'), # Verticals
('A', 'F'), ('F', 'C'), ('C', 'D'), ('E', 'D') # Diagonals
]

# Add elements
for start, end in elements:
ss.add_element(location=[nodes[start], nodes[end]], EI=1e-6)

# ----------------------------
# Supports
# ----------------------------
ss.add_support_hinged(node_id=1) # A pinned
ss.add_support_roll(node_id=2) # B roller
ss.add_support_roll(node_id=3) # C roller
ss.add_support_roll(node_id=4) # D roller
# ----------------------------
# Loads
# ----------------------------
ss.point_load(node_id=5, Fy=-20) # F downward
ss.point_load(node_id=6, Fy=-20) # E downward

# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Results
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
How to draw 2D Truss Using Add truss element function:
In [11]: from anastruct import SystemElements

# ----------------------------
# Truss setup
# ----------------------------
ss = SystemElements(EA=1) # EA only (true truss)

# ----------------------------
# Nodes
# ----------------------------
nodes = {
'A': [0, 0],
'B': [40, 0],
'C': [80, 0],
'D': [120, 0],
'F': [40, 30],
'E': [80, 30]
}

# ----------------------------
# Elements (start, end)
# ----------------------------
elements = [
('A', 'B'), ('B', 'C'), ('C', 'D'), # Bottom chord
('F', 'E'), # Top chord
('B', 'F'), ('C', 'E'), # Verticals
('A', 'F'), ('F', 'C'), ('E', 'D') # Diagonals
]

# ----------------------------
# Add TRUSS elements (FORMAT FIXED)
# ----------------------------
for start, end in elements:
ss.add_truss_element(
location=[nodes[start], nodes[end]],
EA=1
)

# ----------------------------
# Supports
# ----------------------------
ss.add_support_hinged(node_id=1) # A pinned
ss.add_support_roll(node_id=2) # B roller
ss.add_support_roll(node_id=3) # C roller
ss.add_support_roll(node_id=4) # D roller

# ----------------------------
# Loads
# ----------------------------
ss.point_load(node_id=5, Fy=-20) # F downward
ss.point_load(node_id=6, Fy=-20) # E downward

# ----------------------------
# Solve
# ----------------------------
[Link]()

# ----------------------------
# Results
# ----------------------------
ss.show_structure()
ss.show_reaction_force()
ss.show_axial_force()
How to Save the Diagrams as an image:
In [14]: import pickle

with open('my_truss.pkl', 'wb') as f:


[Link](ss, f)

print("Truss system saved successfully!")

Truss system saved successfully!

In [16]: with open('my_truss.pkl', 'rb') as f:


ss_loaded = [Link](f)

print("Truss system loaded successfully!")


import [Link] as plt

# Structure
ss_loaded.show_structure(show=False)
[Link]("[Link]", dpi=300, bbox_inches="tight")
[Link]()

# Reactions
ss_loaded.show_reaction_force(show=False)
[Link]("[Link]", dpi=300, bbox_inches="tight")
[Link]()

# Axial forces
ss_loaded.show_axial_force(show=False)
[Link]("axial_forces.png", dpi=300, bbox_inches="tight")
[Link]()

Truss system loaded successfully!

In [10]: from anastruct import SystemElements

ss = SystemElements(EA=2000)
ss.add_truss_element(location=[[0, 0], [2, 0]])
ss.add_truss_element(location=[[2, 0], [4, 0]])
ss.add_truss_element(location=[[0, 0], [2, 2]])
ss.add_truss_element(location=[[2, 2], [4, 0]])

ss.add_support_hinged(node_id=1)
ss.add_support_hinged(node_id=3)
ss.add_support_spring(node_id=4, translation=2, k=0.5)

ss.point_load(Fy=-10, node_id=2)
ss.show_structure()
In [ ]:

You might also like