Skip to content

Commit 66931c4

Browse files
authored
Merge pull request #219 from ritchie46/cleanUpYvsZ
Clean up all y and z coordinates
2 parents d50c5d4 + be8fb17 commit 66931c4

File tree

21 files changed

+284
-262
lines changed

21 files changed

+284
-262
lines changed

anastruct/cython/basic.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@ def converge(lhs: float, rhs: float) -> float:
1818
return (rhs / lhs - 1) / div + 1
1919

2020

21-
def angle_x_axis(delta_x: float, delta_z: float) -> float:
21+
def angle_x_axis(delta_x: float, delta_y: float) -> float:
2222
"""Determine the angle of the element with the global x-axis
2323
2424
Args:
2525
delta_x (float): Element length in the x-direction
26-
delta_z (float): Element length in the z-direction
26+
delta_y (float): Element length in the y-direction
2727
2828
Returns:
2929
float: Angle of the element with the global x-axis
3030
"""
31-
# dot product v_x = [1, 0] ; v = [delta_x, delta_z]
32-
# dot product = 1 * delta_x + 0 * delta_z -> delta_x
33-
ai = math.acos(delta_x / math.sqrt(delta_x**2 + delta_z**2))
34-
if delta_z < 0:
31+
# dot product v_x = [1, 0] ; v = [delta_x, delta_y]
32+
# dot product = 1 * delta_x + 0 * delta_y -> delta_x
33+
ai = math.acos(delta_x / math.sqrt(delta_x**2 + delta_y**2))
34+
if delta_y < 0:
3535
ai = 2 * math.pi - ai
3636

3737
return ai

anastruct/cython/cbasic.pyx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ cpdef converge(double lhs, double rhs):
1616
div = max(lhs, rhs) / min(lhs, rhs) * 2.0
1717
return (abs(rhs) / abs(lhs) - 1.0) / div + 1.0
1818

19-
cpdef angle_x_axis(double delta_x, double delta_z):
19+
cpdef angle_x_axis(double delta_x, double delta_y):
2020
cdef double ai
21-
# dot product v_x = [1, 0] ; v = [delta_x, delta_z]
22-
# dot product = 1 * delta_x + 0 * delta_z -> delta_x
23-
ai = acos(delta_x / sqrt(delta_x**2 + delta_z**2))
24-
if delta_z < 0:
21+
# dot product v_x = [1, 0] ; v = [delta_x, delta_y]
22+
# dot product = 1 * delta_x + 0 * delta_y -> delta_x
23+
ai = acos(delta_x / sqrt(delta_x**2 + delta_y**2))
24+
if delta_y < 0:
2525
ai = 2 * pi - ai
2626

2727
return ai

anastruct/fem/elements.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -284,11 +284,11 @@ def __add__(self, other: Element) -> Element:
284284
el.node_map[self.node_id1] = el.node_1 + other.node_1
285285
el.node_map[self.node_id2] = el.node_2 + other.node_2
286286
el.node_map[self.node_id1].ux = el.node_1.ux + other.node_1.ux
287-
el.node_map[self.node_id1].uz = el.node_1.uz + other.node_1.uz
288-
el.node_map[self.node_id1].phi_y = el.node_1.phi_y + other.node_1.phi_y
287+
el.node_map[self.node_id1].uy = el.node_1.uy + other.node_1.uy
288+
el.node_map[self.node_id1].phi_z = el.node_1.phi_z + other.node_1.phi_z
289289
el.node_map[self.node_id2].ux = el.node_2.ux + other.node_2.ux
290-
el.node_map[self.node_id2].uz = el.node_2.uz + other.node_2.uz
291-
el.node_map[self.node_id2].phi_y = el.node_2.phi_y + other.node_2.phi_y
290+
el.node_map[self.node_id2].uy = el.node_2.uy + other.node_2.uy
291+
el.node_map[self.node_id2].phi_z = el.node_2.phi_z + other.node_2.phi_z
292292
return el
293293

294294

anastruct/fem/examples/ex_4.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
ss = SystemElements()
44
ss.add_element(location=[[0, 0], [5, 0]], EA=5e9, EI=8000, spring={2: 0})
55
ss.add_element(location=[[5, 0], [5, 5]], EA=5e9, EI=4000)
6-
ss.moment_load(Ty=10, node_id=3)
6+
ss.moment_load(Tz=10, node_id=3)
77
ss.add_support_hinged(node_id=1)
88
ss.add_support_hinged(node_id=3)
99

anastruct/fem/examples/ex_5.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
ss = SystemElements()
44
ss.add_element(location=[[0, 0], [5, 0]], EA=5e9, EI=8000)
55
ss.add_element(location=[[5, 0], [5, 5]], EA=5e9, EI=4000)
6-
ss.moment_load(Ty=10, node_id=3)
6+
ss.moment_load(Tz=10, node_id=3)
77
ss.add_support_hinged(node_id=1)
88
ss.add_support_hinged(node_id=3)
99

anastruct/fem/examples/water_acc.ipynb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@
196196
" deflection = np.zeros(len(ss.node_map))\n",
197197
"\n",
198198
" # Height of the nodes\n",
199-
" y = np.array(ss.nodes_range(\"y\"))\n",
199+
" y = np.array(ss.nodes_range(\"y_neg\"))\n",
200200
"\n",
201201
" # An array with point loads.\n",
202202
" # cubic meters * weight water\n",
@@ -210,7 +210,7 @@
210210
" point_load = force_water[k - 1]\n",
211211
"\n",
212212
" if point_load > 0:\n",
213-
" ss.point_load(k, Fx=0, Fz=-point_load)\n",
213+
" ss.point_load(k, Fx=0, Fy=-point_load)\n",
214214
" cubics += point_load / q_water\n",
215215
"\n",
216216
" return cubics"
@@ -397,12 +397,14 @@
397397
"source": [
398398
"plt.figure(figsize=(10, 6))\n",
399399
"\n",
400-
"plt.plot(ss.nodes_range(\"x\")[:-2], ss.nodes_range(\"y\")[:-2])\n",
400+
"plt.plot(ss.nodes_range(\"x\")[:-2], ss.nodes_range(\"y_neg\")[:-2])\n",
401401
"plt.plot(\n",
402402
" ss.nodes_range(\"x\")[:-2],\n",
403403
" [\n",
404404
" a + b\n",
405-
" for a, b in zip(ss.nodes_range(\"y\")[:-2], ss.get_node_result_range(\"uy\")[:-2])\n",
405+
" for a, b in zip(\n",
406+
" ss.nodes_range(\"y_neg\")[:-2], ss.get_node_result_range(\"uy\")[:-2]\n",
407+
" )\n",
406408
" ],\n",
407409
")\n",
408410
"\n",

anastruct/fem/node.py

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ def __init__(
1313
self,
1414
id: int, # pylint: disable=redefined-builtin
1515
Fx: float = 0.0,
16-
Fz: float = 0.0,
17-
Ty: float = 0.0,
16+
Fy: float = 0.0,
17+
Tz: float = 0.0,
1818
ux: float = 0.0,
19-
uz: float = 0.0,
20-
phi_y: float = 0.0,
19+
uy: float = 0.0,
20+
phi_z: float = 0.0,
2121
vertex: Vertex = Vertex(0, 0),
2222
hinge: bool = False,
2323
):
@@ -26,35 +26,35 @@ def __init__(
2626
Args:
2727
id (int): ID of the node
2828
Fx (float, optional): Value of Fx force. Defaults to 0.0.
29-
Fz (float, optional): Value of Fz force. Defaults to 0.0.
30-
Ty (float, optional): Value of Ty moment. Defaults to 0.0.
29+
Fy (float, optional): Value of Fy force. Defaults to 0.0.
30+
Tz (float, optional): Value of Tz moment. Defaults to 0.0.
3131
ux (float, optional): Value of ux displacement. Defaults to 0.0.
32-
uz (float, optional): Value of uz displacement. Defaults to 0.0.
33-
phi_y (float, optional): Value of phi_y rotation. Defaults to 0.0.
32+
uy (float, optional): Value of uy displacement. Defaults to 0.0.
33+
phi_z (float, optional): Value of phi_z rotation. Defaults to 0.0.
3434
vertex (Vertex, optional): Point object coordinate. Defaults to Vertex(0, 0).
3535
hinge (bool, optional): Is this node a hinge. Defaults to False.
3636
"""
3737
self.id = id
3838
# forces
3939
self.Fx = Fx
40-
self.Fz = Fz
41-
self.Ty = Ty
40+
self.Fy = Fy
41+
self.Tz = Tz
4242
# displacements
4343
self.ux = ux
44-
self.uz = uz
45-
self.phi_y = phi_y
44+
self.uy = uy
45+
self.phi_z = phi_z
4646
self.vertex = vertex
4747
self.hinge = hinge
4848
self.elements: Dict[int, Element] = {}
4949

5050
@property
51-
def Fy(self) -> float:
52-
"""Fy is the vertical force, and the negative of Fz
51+
def Fy_neg(self) -> float:
52+
"""Fy is the vertical force, and the negative of Fy
5353
5454
Returns:
55-
float: negative of Fz
55+
float: negative of Fy
5656
"""
57-
return -self.Fz
57+
return -self.Fy
5858

5959
def __str__(self) -> str:
6060
"""String representation of the node
@@ -64,12 +64,12 @@ def __str__(self) -> str:
6464
"""
6565
if self.vertex:
6666
return (
67-
f"[id = {self.id}, Fx = {self.Fx}, Fz = {self.Fz}, Ty = {self.Ty}, ux = {self.ux}, "
68-
f"uz = {self.uz}, phi_y = {self.phi_y}, x = {self.vertex.x}, y = {self.vertex.y}]"
67+
f"[id = {self.id}, Fx = {self.Fx}, Fy = {self.Fy}, Tz = {self.Tz}, ux = {self.ux}, "
68+
f"uy = {self.uy}, phi_z = {self.phi_z}, x = {self.vertex.x}, y = {self.vertex.y}]"
6969
)
7070
return (
71-
f"[id = {self.id}, Fx = {self.Fx}, Fz = {self.Fz}, Ty = {self.Ty}, ux = {self.ux}, "
72-
f"uz = {self.uz}, phi_y = {self.phi_y}]"
71+
f"[id = {self.id}, Fx = {self.Fx}, Fy = {self.Fy}, Tz = {self.Tz}, ux = {self.ux}, "
72+
f"uy = {self.uy}, phi_z = {self.phi_z}]"
7373
)
7474

7575
def __add__(self, other: Node) -> Node:
@@ -85,17 +85,17 @@ def __add__(self, other: Node) -> Node:
8585
self.id == other.id
8686
), "Cannot add nodes as the ID's don't match. The nodes positions don't match."
8787
Fx = self.Fx + other.Fx
88-
Fz = self.Fz + other.Fz
89-
Ty = self.Ty + other.Ty
88+
Fy = self.Fy + other.Fy
89+
Tz = self.Tz + other.Tz
9090

9191
return Node(
9292
id=self.id,
9393
Fx=Fx,
94-
Fz=Fz,
95-
Ty=Ty,
94+
Fy=Fy,
95+
Tz=Tz,
9696
ux=self.ux,
97-
uz=self.uz,
98-
phi_y=self.phi_y,
97+
uy=self.uy,
98+
phi_z=self.phi_z,
9999
vertex=self.vertex,
100100
hinge=self.hinge,
101101
)
@@ -113,24 +113,24 @@ def __sub__(self, other: Node) -> Node:
113113
self.id == other.id
114114
), "Cannot subtract nodes as the ID's don't match. The nodes positions don't match."
115115
Fx = self.Fx - other.Fx
116-
Fz = self.Fz - other.Fz
117-
Ty = self.Ty - other.Ty
116+
Fy = self.Fy - other.Fy
117+
Tz = self.Tz - other.Tz
118118

119119
return Node(
120120
self.id,
121121
Fx,
122-
Fz,
123-
Ty,
122+
Fy,
123+
Tz,
124124
self.ux,
125-
self.uz,
126-
self.phi_y,
125+
self.uy,
126+
self.phi_z,
127127
self.vertex,
128128
hinge=self.hinge,
129129
)
130130

131131
def reset(self) -> None:
132132
"""Reset the node to zero forces and displacements"""
133-
self.Fx = self.Fz = self.Ty = self.ux = self.uz = self.phi_y = 0
133+
self.Fx = self.Fy = self.Tz = self.ux = self.uy = self.phi_z = 0
134134
self.hinge = False
135135

136136
def add_results(self, other: Node) -> None:
@@ -142,15 +142,15 @@ def add_results(self, other: Node) -> None:
142142
assert (
143143
self.id == other.id
144144
), "Cannot add nodes as the ID's don't match. The nodes positions don't match."
145-
assert self.phi_y is not None
145+
assert self.phi_z is not None
146146
assert self.ux is not None
147-
assert self.uz is not None
148-
assert other.phi_y is not None
147+
assert self.uy is not None
148+
assert other.phi_z is not None
149149
assert other.ux is not None
150-
assert other.uz is not None
150+
assert other.uy is not None
151151
self.Fx = self.Fx + other.Fx
152-
self.Fz = self.Fz + other.Fz
153-
self.Ty = self.Ty + other.Ty
152+
self.Fy = self.Fy + other.Fy
153+
self.Tz = self.Tz + other.Tz
154154
self.ux = self.ux + other.ux
155-
self.uz = self.uz + other.uz
156-
self.phi_y = self.phi_y + other.phi_y
155+
self.uy = self.uy + other.uy
156+
self.phi_z = self.phi_z + other.phi_z

anastruct/fem/plotter/element.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ def plot_values_deflection(
2121
Tuple[np.ndarray, np.ndarray]: x and y values
2222
"""
2323
ux1 = element.node_1.ux * factor
24-
uz1 = -element.node_1.uz * factor
24+
uy1 = -element.node_1.uy * factor
2525
ux2 = element.node_2.ux * factor
26-
uz2 = -element.node_2.uz * factor
26+
uy2 = -element.node_2.uy * factor
2727

2828
x1 = element.vertex_1.x + ux1
29-
y1 = -element.vertex_1.z + uz1
29+
y1 = element.vertex_1.y + uy1
3030
x2 = element.vertex_2.x + ux2
31-
y2 = -element.vertex_2.z + uz2
31+
y2 = element.vertex_2.y + uy2
3232

3333
if element.type == "general" and not linear:
3434
assert element.deflection is not None
@@ -61,17 +61,17 @@ def plot_values_bending_moment(
6161
"""
6262

6363
# Determine forces for horizontal element.angle = 0
64-
T_left = element.node_1.Ty
65-
T_right = -element.node_2.Ty
64+
T_left = element.node_1.Tz
65+
T_right = -element.node_2.Tz
6666

6767
sin = math.sin(-element.angle)
6868
cos = math.cos(-element.angle)
6969

7070
# apply angle ai
7171
x1 = element.vertex_1.x + T_left * sin * factor
72-
y1 = -element.vertex_1.z + T_left * cos * factor
72+
y1 = element.vertex_1.y + T_left * cos * factor
7373
x2 = element.vertex_2.x + T_right * sin * factor
74-
y2 = -element.vertex_2.z + T_right * cos * factor
74+
y2 = element.vertex_2.y + T_right * cos * factor
7575

7676
interpolate = np.linspace(0, 1, n)
7777
dx = x2 - x1
@@ -94,9 +94,9 @@ def plot_values_bending_moment(
9494
y_val += cos * q_part * factor
9595

9696
x_val = np.append(x_val, element.vertex_2.x)
97-
y_val = np.append(y_val, -element.vertex_2.z)
97+
y_val = np.append(y_val, element.vertex_2.y)
9898
x_val = np.insert(x_val, 0, element.vertex_1.x)
99-
y_val = np.insert(y_val, 0, -element.vertex_1.z)
99+
y_val = np.insert(y_val, 0, element.vertex_1.y)
100100

101101
return x_val, y_val
102102

@@ -126,9 +126,9 @@ def plot_values_axial_force(
126126

127127
# apply angle ai
128128
x1 = element.vertex_1.x + N1 * cos * factor
129-
y1 = -element.vertex_1.z + N1 * sin * factor
129+
y1 = element.vertex_1.y + N1 * sin * factor
130130
x2 = element.vertex_2.x + N2 * cos * factor
131-
y2 = -element.vertex_2.z + N2 * sin * factor
131+
y2 = element.vertex_2.y + N2 * sin * factor
132132

133133
interpolate = np.linspace(0, 1, n)
134134
dx = x2 - x1
@@ -147,9 +147,9 @@ def plot_values_axial_force(
147147
y_val += sin * qn_part * factor
148148

149149
x_val = np.append(x_val, element.vertex_2.x)
150-
y_val = np.append(y_val, -element.vertex_2.z)
150+
y_val = np.append(y_val, element.vertex_2.y)
151151
x_val = np.insert(x_val, 0, element.vertex_1.x)
152-
y_val = np.insert(y_val, 0, -element.vertex_1.z)
152+
y_val = np.insert(y_val, 0, element.vertex_1.y)
153153

154154
return x_val, y_val
155155

@@ -167,9 +167,9 @@ def plot_values_shear_force(
167167
Tuple[np.ndarray, np.ndarray]: x and y values
168168
"""
169169
x1 = element.vertex_1.x
170-
y1 = -element.vertex_1.z
170+
y1 = element.vertex_1.y
171171
x2 = element.vertex_2.x
172-
y2 = -element.vertex_2.z
172+
y2 = element.vertex_2.y
173173

174174
assert element.shear_force is not None
175175
n = len(element.shear_force)
@@ -189,9 +189,9 @@ def plot_values_shear_force(
189189
y_val += cos * element.shear_force * factor
190190

191191
x_val = np.append(x_val, element.vertex_2.x)
192-
y_val = np.append(y_val, -element.vertex_2.z)
192+
y_val = np.append(y_val, element.vertex_2.y)
193193
x_val = np.insert(x_val, 0, element.vertex_1.x)
194-
y_val = np.insert(y_val, 0, -element.vertex_1.z)
194+
y_val = np.insert(y_val, 0, element.vertex_1.y)
195195

196196
return x_val, y_val
197197

@@ -206,5 +206,5 @@ def plot_values_element(element: "Element") -> Tuple[np.ndarray, np.ndarray]:
206206
Tuple[np.ndarray, np.ndarray]: x and y values
207207
"""
208208
x_val = np.array([element.vertex_1.x, element.vertex_2.x])
209-
y_val = np.array([-element.vertex_1.z, -element.vertex_2.z])
209+
y_val = np.array([element.vertex_1.y, element.vertex_2.y])
210210
return x_val, y_val

0 commit comments

Comments
 (0)