Orienting Frames#
In order to cover a wide range of cases, the strong axis of the first column, element 1,
is oriented so as to resist bending outside the plane of the portal, but the strong axis of the second column, element 3, will resist bending inside the portal plane.

Preliminaries#
import xara
from xara.units.iks import foot, inch
import veux
from xsection.library import from_aisc
def create_portal(vertical = 2):
height = 6*foot
width = 8*foot
model = xara.Model(ndm=3, ndf=6)
# 2. Material
# 2.1 Create a steel material
steel = xara.MultiaxialMaterial("ElasticIsotropic", E=29e3, nu=0.3)
# 2.2 add the material to the model
model.material(steel)
# 3. Section
# 3.1 Create a shape
shape = from_aisc("W8X10", material=steel)
# 3.2 create a section with the shape
section = xara.Section("Elastic", shape)
# 3.3 add the section to the model
model.section(section)
if vertical == 2:
model.node(1, ( 0, 0, 0))
model.node(2, (width, 0, 0))
model.node(3, (width, height, 0))
model.node(4, ( 0, height, 0))
model.geomTransf("Linear", 1, (1, 0, 0))
model.geomTransf("Linear", 2, (0, 1, 0))
model.geomTransf("Linear", 3, (0, 0, 1))
else:
model.node(1, ( 0, 0, 0))
model.node(2, (width, 0, 0))
model.node(3, (width, 0, height))
model.node(4, ( 0, 0, height))
model.geomTransf("Linear", 1, (1, 0, 0))
model.geomTransf("Linear", 2, (0, 0, 1))
model.geomTransf("Linear", 3, (0,-1, 0))
model.element("ForceFrame", 2, (2,3), section=1, transform=1) # column
model.element("ForceFrame", 3, (3,4), section=1, transform=2) # girder
model.element("ForceFrame", 4, (4,1), section=1, transform=3) # column
return model
def render_portal(model, vertical):
# Render the model
artist = veux.create_artist(model, vertical=vertical)
artist.draw_origin()
artist.draw_sections()
artist.draw_axes(extrude=True)
return artist
Vertical \(Z\)#
model = create_portal(vertical=3)
# Render the model
artist = render_portal(model, vertical=3)
artist
Vertical \(Y\)#
model = create_portal(vertical=2)
# Render the model
artist = render_portal(model, vertical=2)
artist