@@ -2615,6 +2615,8 @@ def get_stress(self):
2615
2615
* *'sig_zy'*: *y*-component of the shear stress :math:`\sigma_{zy}` resulting from all
2616
2616
actions
2617
2617
* *'sig_zxy'*: Resultant shear stress :math:`\sigma_{zxy}` resulting from all actions
2618
+ * *'sig_1'*: Major principal stress :math:`\sigma_{1}` resulting from all actions
2619
+ * *'sig_2'*: Minor principal stress :math:`\sigma_{2}` resulting from all actions
2618
2620
* *'sig_vm'*: von Mises stress :math:`\sigma_{vM}` resulting from all actions
2619
2621
2620
2622
The following example returns the normal stress within a 150x90x12 UA section resulting
@@ -2642,32 +2644,36 @@ def get_stress(self):
2642
2644
stress = []
2643
2645
2644
2646
for group in self .material_groups :
2645
- stress .append ({
2646
- 'Material' : group .material .name ,
2647
- 'sig_zz_n' : group .stress_result .sig_zz_n ,
2648
- 'sig_zz_mxx' : group .stress_result .sig_zz_mxx ,
2649
- 'sig_zz_myy' : group .stress_result .sig_zz_myy ,
2650
- 'sig_zz_m11' : group .stress_result .sig_zz_m11 ,
2651
- 'sig_zz_m22' : group .stress_result .sig_zz_m22 ,
2652
- 'sig_zz_m' : group .stress_result .sig_zz_m ,
2653
- 'sig_zx_mzz' : group .stress_result .sig_zx_mzz ,
2654
- 'sig_zy_mzz' : group .stress_result .sig_zy_mzz ,
2655
- 'sig_zxy_mzz' : group .stress_result .sig_zxy_mzz ,
2656
- 'sig_zx_vx' : group .stress_result .sig_zx_vx ,
2657
- 'sig_zy_vx' : group .stress_result .sig_zy_vx ,
2658
- 'sig_zxy_vx' : group .stress_result .sig_zxy_vx ,
2659
- 'sig_zx_vy' : group .stress_result .sig_zx_vy ,
2660
- 'sig_zy_vy' : group .stress_result .sig_zy_vy ,
2661
- 'sig_zxy_vy' : group .stress_result .sig_zxy_vy ,
2662
- 'sig_zx_v' : group .stress_result .sig_zx_v ,
2663
- 'sig_zy_v' : group .stress_result .sig_zy_v ,
2664
- 'sig_zxy_v' : group .stress_result .sig_zxy_v ,
2665
- 'sig_zz' : group .stress_result .sig_zz ,
2666
- 'sig_zx' : group .stress_result .sig_zx ,
2667
- 'sig_zy' : group .stress_result .sig_zy ,
2668
- 'sig_zxy' : group .stress_result .sig_zxy ,
2669
- 'sig_vm' : group .stress_result .sig_vm
2670
- })
2647
+ stress .append (
2648
+ {
2649
+ "Material" : group .material .name ,
2650
+ "sig_zz_n" : group .stress_result .sig_zz_n ,
2651
+ "sig_zz_mxx" : group .stress_result .sig_zz_mxx ,
2652
+ "sig_zz_myy" : group .stress_result .sig_zz_myy ,
2653
+ "sig_zz_m11" : group .stress_result .sig_zz_m11 ,
2654
+ "sig_zz_m22" : group .stress_result .sig_zz_m22 ,
2655
+ "sig_zz_m" : group .stress_result .sig_zz_m ,
2656
+ "sig_zx_mzz" : group .stress_result .sig_zx_mzz ,
2657
+ "sig_zy_mzz" : group .stress_result .sig_zy_mzz ,
2658
+ "sig_zxy_mzz" : group .stress_result .sig_zxy_mzz ,
2659
+ "sig_zx_vx" : group .stress_result .sig_zx_vx ,
2660
+ "sig_zy_vx" : group .stress_result .sig_zy_vx ,
2661
+ "sig_zxy_vx" : group .stress_result .sig_zxy_vx ,
2662
+ "sig_zx_vy" : group .stress_result .sig_zx_vy ,
2663
+ "sig_zy_vy" : group .stress_result .sig_zy_vy ,
2664
+ "sig_zxy_vy" : group .stress_result .sig_zxy_vy ,
2665
+ "sig_zx_v" : group .stress_result .sig_zx_v ,
2666
+ "sig_zy_v" : group .stress_result .sig_zy_v ,
2667
+ "sig_zxy_v" : group .stress_result .sig_zxy_v ,
2668
+ "sig_zz" : group .stress_result .sig_zz ,
2669
+ "sig_zx" : group .stress_result .sig_zx ,
2670
+ "sig_zy" : group .stress_result .sig_zy ,
2671
+ "sig_zxy" : group .stress_result .sig_zxy ,
2672
+ "sig_1" : group .stress_result .sig_1 ,
2673
+ "sig_2" : group .stress_result .sig_2 ,
2674
+ "sig_vm" : group .stress_result .sig_vm ,
2675
+ }
2676
+ )
2671
2677
2672
2678
return stress
2673
2679
@@ -3802,6 +3808,111 @@ def plot_vector_zxy(self, pause=True):
3802
3808
3803
3809
return self .plot_stress_vector (sigxs , sigys , title , pause )
3804
3810
3811
+ def plot_stress_1 (self , pause = True ):
3812
+ """Produces a contour plot of the Major principal stress :math:`\sigma_{1}` resulting from all
3813
+ actions.
3814
+
3815
+ :param bool pause: If set to true, the figure pauses the script until the window is closed.
3816
+ If set to false, the script continues immediately after the window is rendered.
3817
+
3818
+ :return: Matplotlib figure and axes objects (fig, ax)
3819
+ :rtype: (:class:`matplotlib.figure.Figure`, :class:`matplotlib.axes`)
3820
+
3821
+ The following example plots a contour of the Major principal stress within a 150x90x12 UA section
3822
+ resulting from the following actions:
3823
+
3824
+ * :math:`N = 50` kN
3825
+ * :math:`M_{xx} = -5` kN.m
3826
+ * :math:`M_{22} = 2.5` kN.m
3827
+ * :math:`M_{zz} = 1.5` kN.m
3828
+ * :math:`V_{x} = 10` kN
3829
+ * :math:`V_{y} = 5` kN
3830
+
3831
+ ::
3832
+
3833
+ import sectionproperties.pre.sections as sections
3834
+ from sectionproperties.analysis.cross_section import CrossSection
3835
+
3836
+ geometry = sections.AngleSection(d=150, b=90, t=12, r_r=10, r_t=5, n_r=8)
3837
+ mesh = geometry.create_mesh(mesh_sizes=[2.5])
3838
+ section = CrossSection(geometry, mesh)
3839
+
3840
+ section.calculate_geometric_properties()
3841
+ section.calculate_warping_properties()
3842
+ stress_post = section.calculate_stress(
3843
+ N=50e3, Mxx=-5e6, M22=2.5e6, Mzz=0.5e6, Vx=10e3, Vy=5e3
3844
+ )
3845
+
3846
+ stress_post.plot_stress_1()
3847
+
3848
+ .. figure:: ../images/stress/stress_1.png
3849
+ :align: center
3850
+ :scale: 75 %
3851
+
3852
+ Contour plot of the Major Principal stress.
3853
+ """
3854
+
3855
+ title = 'Stress Contour Plot - $\sigma_{1}$'
3856
+ sigs = []
3857
+
3858
+ for group in self .material_groups :
3859
+ sigs .append (group .stress_result .sig_1 )
3860
+
3861
+ return self .plot_stress_contour (sigs , title , pause )
3862
+
3863
+ def plot_stress_2 (self , pause = True ):
3864
+ """Produces a contour plot of the Minor principal stress :math:`\sigma_{2}` resulting from all
3865
+ actions.
3866
+
3867
+ :param bool pause: If set to true, the figure pauses the script until the window is closed.
3868
+ If set to false, the script continues immediately after the window is rendered.
3869
+
3870
+ :return: Matplotlib figure and axes objects (fig, ax)
3871
+ :rtype: (:class:`matplotlib.figure.Figure`, :class:`matplotlib.axes`)
3872
+
3873
+ The following example plots a contour of the Minor principal stress within a 150x90x12 UA section
3874
+ resulting from the following actions:
3875
+
3876
+ * :math:`N = 50` kN
3877
+ * :math:`M_{xx} = -5` kN.m
3878
+ * :math:`M_{22} = 2.5` kN.m
3879
+ * :math:`M_{zz} = 1.5` kN.m
3880
+ * :math:`V_{x} = 10` kN
3881
+ * :math:`V_{y} = 5` kN
3882
+
3883
+ ::
3884
+
3885
+ import sectionproperties.pre.sections as sections
3886
+ from sectionproperties.analysis.cross_section import CrossSection
3887
+
3888
+ geometry = sections.AngleSection(d=150, b=90, t=12, r_r=10, r_t=5, n_r=8)
3889
+ mesh = geometry.create_mesh(mesh_sizes=[2.5])
3890
+ section = CrossSection(geometry, mesh)
3891
+
3892
+ section.calculate_geometric_properties()
3893
+ section.calculate_warping_properties()
3894
+ stress_post = section.calculate_stress(
3895
+ N=50e3, Mxx=-5e6, M22=2.5e6, Mzz=0.5e6, Vx=10e3, Vy=5e3
3896
+ )
3897
+
3898
+ stress_post.plot_stress_2()
3899
+
3900
+ .. figure:: ../images/stress/stress_2.png
3901
+ :align: center
3902
+ :scale: 75 %
3903
+
3904
+ Contour plot of the Minor Principal stress.
3905
+ """
3906
+
3907
+ title = 'Stress Contour Plot - $\sigma_{2}$'
3908
+ sigs = []
3909
+
3910
+ for group in self .material_groups :
3911
+ sigs .append (group .stress_result .sig_2 )
3912
+
3913
+ return self .plot_stress_contour (sigs , title , pause )
3914
+
3915
+
3805
3916
def plot_stress_vm (self , pause = True ):
3806
3917
"""Produces a contour plot of the von Mises stress :math:`\sigma_{vM}` resulting from all
3807
3918
actions.
@@ -3962,6 +4073,10 @@ class StressResult:
3962
4073
:cvar sig_zxy: Combined resultant shear stress (:math:`\sigma_{zxy}`) resulting from all
3963
4074
actions
3964
4075
:vartype sig_zxy: :class:`numpy.ndarray`
4076
+ :cvar sig_1: Major principal stress (:math:`\sigma_{1}`) resulting from all actions
4077
+ :vartype sig_1: :class:`numpy.ndarray`
4078
+ :cvar sig_2: Minor principal stress (:math:`\sigma_{2}`) resulting from all actions
4079
+ :vartype sig_2: :class:`numpy.ndarray`
3965
4080
:cvar sig_vm: von Mises stress (:math:`\sigma_{VM}`) resulting from all actions
3966
4081
:vartype sig_vm: :class:`numpy.ndarray`
3967
4082
"""
@@ -3994,6 +4109,8 @@ def __init__(self, num_nodes):
3994
4109
self .sig_zx = np .zeros (num_nodes )
3995
4110
self .sig_zy = np .zeros (num_nodes )
3996
4111
self .sig_zxy = np .zeros (num_nodes )
4112
+ self .sig_1 = np .zeros (num_nodes )
4113
+ self .sig_2 = np .zeros (num_nodes )
3997
4114
self .sig_vm = np .zeros (num_nodes )
3998
4115
3999
4116
def calculate_combined_stresses (self ):
@@ -4010,6 +4127,8 @@ def calculate_combined_stresses(self):
4010
4127
self .sig_zx = self .sig_zx_mzz + self .sig_zx_v
4011
4128
self .sig_zy = self .sig_zy_mzz + self .sig_zy_v
4012
4129
self .sig_zxy = (self .sig_zx ** 2 + self .sig_zy ** 2 ) ** 0.5
4130
+ self .sig_1 = self .sig_zz / 2 + np .sqrt ( (self .sig_zz / 2 ) ** 2 + self .sig_zxy ** 2 )
4131
+ self .sig_2 = self .sig_zz / 2 - np .sqrt ( (self .sig_zz / 2 ) ** 2 + self .sig_zxy ** 2 )
4013
4132
self .sig_vm = (self .sig_zz ** 2 + 3 * self .sig_zxy ** 2 ) ** 0.5
4014
4133
4015
4134
0 commit comments