@@ -202,6 +202,7 @@ def calculate_geometric_properties(self) -> None:
202
202
- Centroidal section moduli
203
203
- Radii of gyration
204
204
- Principal axis properties
205
+ - Yield moments (composite only)
205
206
"""
206
207
207
208
def calculate_geom (progress : Progress | None = None ) -> None :
@@ -259,11 +260,21 @@ def calculate_geom(progress: Progress | None = None) -> None:
259
260
)
260
261
self .section_props .e_eff = self .section_props .ea / self .section_props .area
261
262
self .section_props .g_eff = self .section_props .ga / self .section_props .area
263
+
264
+ # calculate derived properties
262
265
self .section_props .calculate_elastic_centroid ()
263
266
self .section_props .calculate_centroidal_properties (
264
267
node_list = self .mesh ["vertices" ]
265
268
)
266
269
270
+ # calculate yield moments
271
+ self .section_props .my_xx = 0.0
272
+ self .section_props .my_yy = 0.0
273
+ self .section_props .my_11 = 0.0
274
+ self .section_props .my_22 = 0.0
275
+
276
+ # TODO: calculate yield moments
277
+
267
278
if progress and task is not None :
268
279
msg = "[bold green]:white_check_mark: Geometric analysis complete"
269
280
progress .update (task_id = task , description = msg )
@@ -1120,7 +1131,7 @@ def calculate_plastic_properties(
1120
1131
1121
1132
- Plastic centroids (centroidal and principal axes)
1122
1133
- Plastic section moduli (centroidal and principal axes)
1123
- - Shape factors, non-composite only (centroidal and principal axe )
1134
+ - Shape factors, non-composite only (centroidal and principal axes )
1124
1135
"""
1125
1136
# check that a geometric analysis has been performed
1126
1137
if self .section_props .cx is None :
@@ -2240,6 +2251,32 @@ def get_ez(
2240
2251
self .section_props .zyy_minus / e_ref ,
2241
2252
)
2242
2253
2254
+ def get_my (self ) -> tuple [float , float ]:
2255
+ """Returns the yield moment for bending about the centroidal axis.
2256
+
2257
+ This is a composite only property, as such this can only be returned if material
2258
+ properties have been applied to the cross-section.
2259
+
2260
+ Returns:
2261
+ Yield moment for bending about the centroidal ``x`` and ``y`` axes
2262
+ (``my_xx``, ``my_yy``)
2263
+
2264
+ Raises:
2265
+ RuntimeError: If material properties have *not* been applied
2266
+ RuntimeError: If a geometric analysis has not been performed
2267
+ """
2268
+ if not self .is_composite ():
2269
+ msg = "Attempting to get a composite only property for a geometric analysis"
2270
+ msg += " (material properties have not been applied). Consider using"
2271
+ msg += " get_z()."
2272
+ raise RuntimeError (msg )
2273
+
2274
+ if self .section_props .my_xx is None or self .section_props .my_yy is None :
2275
+ msg = "Conduct a geometric analysis."
2276
+ raise RuntimeError (msg )
2277
+
2278
+ return (self .section_props .my_xx , self .section_props .my_yy )
2279
+
2243
2280
def get_rc (self ) -> tuple [float , float ]:
2244
2281
"""Returns the cross-section centroidal radii of gyration.
2245
2282
@@ -2418,6 +2455,32 @@ def get_ezp(
2418
2455
self .section_props .z22_minus / e_ref ,
2419
2456
)
2420
2457
2458
+ def get_my_p (self ) -> tuple [float , float ]:
2459
+ """Returns the yield moment for bending about the principal axis.
2460
+
2461
+ This is a composite only property, as such this can only be returned if material
2462
+ properties have been applied to the cross-section.
2463
+
2464
+ Returns:
2465
+ Yield moment for bending about the principal ``11`` and ``22`` axes
2466
+ (``my_11``, ``my_22``)
2467
+
2468
+ Raises:
2469
+ RuntimeError: If material properties have *not* been applied
2470
+ RuntimeError: If a geometric analysis has not been performed
2471
+ """
2472
+ if not self .is_composite ():
2473
+ msg = "Attempting to get a composite only property for a geometric analysis"
2474
+ msg += " (material properties have not been applied). Consider using"
2475
+ msg += " get_zp()."
2476
+ raise RuntimeError (msg )
2477
+
2478
+ if self .section_props .my_11 is None or self .section_props .my_22 is None :
2479
+ msg = "Conduct a geometric analysis."
2480
+ raise RuntimeError (msg )
2481
+
2482
+ return (self .section_props .my_11 , self .section_props .my_22 )
2483
+
2421
2484
def get_rp (self ) -> tuple [float , float ]:
2422
2485
"""Returns the cross-section principal radii of gyration.
2423
2486
0 commit comments