U
    L?hak                     @   s  d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZ d d
lmZmZmZmZmZ d dlmZ d dlm Z m!Z!m"Z"m#Z# d dl$m%Z% edZ&edZ'e	d\Z(Z)dd Z*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd  Z1d!d" Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9d1d2 Z:d3d4 Z;d5d6 Z<d7d8 Z=d9S ):    )expand)Rationalpi)S)Symbolsymbols)Interval)simplify)Beam)SingularityFunction	PiecewisemeijergAbslog)raises)meternewtonkilogigamilli)Beam3D)CirclePolygonPoint2DTriangle)sympifyxyR1, R2c               	      s
  t d} t d}t d}t d}t d}td| |}|jdksBt|j| ksPt|j|ks^t|jtksltd|_|jdkst||_|j|kst||_|j|kstt|_|jtkstdg|_	d	g|_
|jdgd	gd
kst|j
ddg |j
}|d	ddgkst|j	ddg |j	}|dddgks8t|j}|dddgd	ddgd
ks^ttd| |}	|	ddd |	tdd |	tdd |	ddd ddg|	_	|	tt |	j}
tdtdi}|
|kst|	j}
dttdd dttdd  dttdd  dttdd  }|
|ks,t|	 }
dttdd dttdd  dttdd  dttdd  }|
|kst|	 }
dttdd dttdd  dttdd  dttdd  | }|
|kst|	 }
dttdd dttdd  dttdd  dttdd  }|
|ks2t|	 }
dttdd dttdd  dttdd  ttdd tdd }|
|| |  kst|	 }
ttdd dttdd d  ttdd dttdd  ttddd  d }|
|| |  kstt d}t d}t d }t d!}t d"}t d#}t d$}t d%}t d&}t|| |}|||d |||d ||fg|_	||fg|_
|j}
|tt|d |tt|d  }|
|kst| }
| tt|d d |tt|d  }|
|kst| }
| tt|d d |tt|d  | }|
|ks>t| }
| tt|d d |tt|d  }|
|kszt| }
|tt|d d' |tt|d d  | |  | | | |t||d d'  |t||d d  | |   }t|
t|kst| }
t| | | |t||d d'  |t||d d   | |  |tt|d( d |tt|d d  | |   | | | | |  || t||d d'  || t||d d  |t||d( d  |t||d d  | |   }t|
| dksttd)| |d}|jddddd* |j
d td+}td,}|j}
dttdd dttdd  dttdd  dttdd  }|
|kst| }
dttdd d dttdd  dttdd  dttdd d  }|
|kst| }
ttddd dttdd  dttdd  dttdd d  }|
|ksPt| }
dttdd(d ttddd  ttddd  ttdd(d  | |   }|
|kst| }
dt ttddd- ttddd.  ttdd(d  ttddd-  | |   }|
|| k	sttd| |d  jd/dddd0  j}
d/ttdd dttdd  }|
|k	spt  }
dttdd dttdd  }|
|k	st  }
ttddttdd }|
|k	st  }
d/ttdd d dttdd d  }|
|| |  | k
st  }
d/ttdd d' dttdd d'  }|
|| |  |t  | k
spttt fd1d2 tt  d _W 5 Q R X d S )3NEE_1II_1A      )r      )r   r$   )
deflectionslope)r%      )   r      r   
   x   )r.   r   )r+   r      r&      r)     <   .  lw0w2a1cc1def   r*   	   )valuestartorderendC3C4      rE   c                      s    j dddddS )NrJ   r   r-   r)   rK   )
apply_load Zb4rM   c/var/www/html/venv/lib/python3.8/site-packages/sympy/physics/continuum_mechanics/tests/test_beam.py<lambda>       ztest_Beam.<locals>.<lambda>)!r   r
   lengthAssertionErrorZelastic_modulussecond_momentvariabler   r   bc_deflectionbc_slopeZboundary_conditionsextendrL   R1R2solve_for_reaction_loadsreaction_loadsloadr   shear_forceshear_stressbending_momentr(   r   r'   r   r	   appendr   r   
ValueError	TypeError)r   r    r!   r"   r#   bZs_bcsZd_bcsZbcs_newb1pqr7   r8   r9   r:   r;   r<   r=   r>   r?   b2b3rF   rG   rM   rN   rO   	test_Beam   s   

 
 &l ,"  (("
rj   c            	      C   s(  t ddd} t d\}}}}}t| ||dd}|t| d |tdd || | d	 d |tt | }|ttdd	 d
 |tt| d	 d	 d	  |tt| d	 d
  }||||  | kst	|
 }|ttdd d |tt| d	 d d  |tt| d d  }||||  |t  | ks4t	dg|_|
 }|t |ttdd d  |tt| d	 d d  |tt| d d  }||||  kst	d| dfg|_|
 }| d	  | t d |ttdd d  |tt| d	 d d  |tt| d d  }||||  ks$t	d S )NLTpositivezE I P a3 a4a)Z	base_charr-   r   r&   r%   r)   rI   r1   r   r      )r   r
   rL   rZ   rY   r[   r(   r   r   rS   r'   rV   )	rk   r   r!   Pa3Za4rd   rf   rg   rM   rM   rO   test_insufficient_bconditions   s*    @@"HVrs   c            	   	   C   s   t d} t d}td\}}t d}t ddd}t|| |}d|d	fg|_d|d	fg|_|td	d
 ||d	d |t|d
 |||d || |d d
 |tt|| |j	}t|d t|d || | d ||| d i}||kst
d S )Nr   r!   zM1, M2Fr7   Trl   ro   r   r-   r0   r&   r2   )r   r   r
   rV   rW   rL   rY   rZ   r[   r\   rS   )	r   r!   M1ZM2rt   r7   Zb5rf   rg   rM   rM   rO   test_statically_indeterminate  s"    .rv   c                  C   s   t d} t d}td\}}tt }tt }tdt d| td  dtt d  }|d	| dt d
 ||dt d
 ||dt d
 |jd| t dt ddt d dt dt fdt dt fg|_	|
|| |j|dt |dt iksttdt | t td  |td  }|d| dt d
 ||dt d
 ||dt d
 |d| t dt d dt dt fdt dt fg|_	|
|| |j|ttdd |ttdd ikst| tdt dt d|  |  kstd S )Nr   r!   r   r2      r&   i r%   r*   r-   r   r.   rK   iJir)   r$   rI   r0   ir4   i0  rA   )r   r   r   r   r   r
   r   r   rL   rV   r[   r\   rS   r   r'   subsr   )r   r!   rY   rZ   ZkNZgNrd   rM   rM   rO   test_beam_units(  s,    (""$",ry   c                  C   s~  t d} t d}td| ddt  }|ddd td\}}||dd ||dd	 d
g|_d
g|_||| | 	 dt t
tdd dtd  t
tdd  |  	 kst| 	 dtd  t
tdd dtdttd dk ftd tddtd  df  dt
tdd  |  	 ks2ttd| t |}|ddd td\}}||dd ||dd	 d
g|_d
g|_||| | 	 dt|   t|  t   t
tdd dt|  d  t|  t   t
tdd  d|  t|   | t|  t   t  t
tdd  d|  t|  d  | t|  t   t d  t
tdd  | 	 ksztd S )Nr   r!   r%   r&      r-   R, Mr   r0   ro   r.   r*   r$   ))r-   r$   rM   )rM   )r0   r   T(   iP   )r   r
   r   rL   r   rV   rW   r[   r(   r   r   rS   r'   r   r   r   r   )r   r!   rd   RMrM   rM   rO   test_variable_momentD  sf     42,
&
r   c                  C   s  t d} t d}td| d| }td| |}||d}|ddd |d	dd
 |ddd dg|_dg|_|jdkst|jt	d| t
dkf|t
dkfkst| t
dd| |  kst| t
dd| |  kstt| t
djd dksttddd}td\}}}}	}
td| | |}td| | |}||d}||dd
 ||dd |||d ||	d| d ||
d| d dg|_d|dfd| dfg|_|||||	 |j|	|
 d ||
tdd ||
 | d ||
tdd ikst| t
d| d|
 |d  d|  |  ksNt| t
d| d|
 |d  d|  |  kst| t
d| d|
 |d  d|  |  ksttddd}tddd}||d}||dd
 ||dd ||d d ||	dd |ddd dg|_dd!d"g|_|||||	 | d
tt
dd  d# tt
ddd$  d%tt
d d d&  tt
ddd'  d(tt
dd d)  kst| tt
dd d# tt
ddd#  d%tt
d d d*  tt
ddd+  d(tt
dd d,  kstd S )-Nr   r!   r&   g      ?fixedir   r-   r}   r0   rz   r%   ro   g      ^@g      T@ir7   Trl   zR1 M1 R2 R3 PZhinger)   i0      r@   r*   rp   i  r.   r$   )r$   r   )r%   r   i  S     iX i  %   i i.   i )r   r
   joinrL   rW   rV   rR   rS   rT   r   r   r(   rx   intr'   argsr   r[   r\   r   r   )r   r!   re   rh   rd   r7   rY   ru   rZ   R3rq   rM   rM   rO   test_composite_beamd  sr    (  $D666(&r   c                  C   s~   t d} t d}td| |}|ddd |ddd |dd	d |d
dd |ddd | tddgksztd S )Nr   r!   r.   r3   r   r-   ir1   r&   rz   r%   r)   )r   r
   rL   Zpoint_cflexurer   rS   r   r!   rd   rM   rM   rO   test_point_cflexure  s    r   c                  C   sJ  t d} t d}td| |}z|ddd W n tk
rJ   dsFtY n
X dsTt|d	d
d |ddd |jddddd |jddddd |jd	ttd
d dttdd  kst|j	ddgkstz|ddd W n tk
r   dstY nX ds
t|d	d
d |ddd |jd
ks6t|j	g ksFtd S )Nr   r!   r%   r&   r$   r-   TFrJ   r   r0   r)   rK   )rJ   r   r0   N)r%   r&   r-   N)
r   r
   Zremove_loadrb   rS   rL   r]   r   r   Zapplied_loadsr   rM   rM   rO   test_remove_load  s.    *
r   c               
   C   s  t d} t d}td| |}|dd |ddd td\}}||| t| td	tt	dd
 dtt	dd  dtt	dd  | |  kst
t| tdtt	dd dtt	dd d  dtt	dd d  | |  kst
td| |}|dd}|dd}|ddd |ddd ||| | dtt	dd dtt	dd  dtt	dd
  tt	dd tdd | |  kst
| t	tdd dtt	dd d  tt	dd dtt	dd  tt	ddd  d | |  kst
t d}t d}||kst
|j|d|diks4t
|j| dksHt
td| |}|dd\}}	|dd}|dddd |||	| t d}t d }t d!}
||kst
|	|kst
||
kst
|j|d"|d#|
d$ikst
|j|	 d#ks t
t d%d&d'}t d(d&d'}t|| |}|jddd) |j|dd) || |d d td*\}}}}||||| |j||d ||d || | d ||| d ikst
d S )+Nr   r!   r%   r   Z
cantileverrz   r-   zM_0, R_0r}   r$   r.   r&   r|   r)   r+   ZpinZrollerr,   r/   r0   r3   r4   r5   r6   R_10R_30r1   r2   r   r   R_0M_0R_8   i   rq   Trl   rk   )typezR_0, R_L, M_0, M_L)r   r
   Zapply_supportrL   r   r[   r	   r(   r   r   rS   r'   r   r\   )r   r!   rd   r   r   p0p1r   r   Zm0r   rq   rk   ZR_LZM_LrM   rM   rO   test_apply_support  s    *.$
2r   c            
      C   sB  t d} t d}td| |}td\}}||dd ||dd |ddd |d	dd |jddddd
 ||| | tdddfksttddd}t d}t|| |}td\}}||dd |||d |j|dd|d
 ||| | }	|	d dkstt|	d |t	| d  dks>td S )Nr   r!   r)   r{   r   r-   r0   r&   r%   rK   r2   r7   Trl   rq   r   r$   )
r   r
   r   rL   r[   max_shear_forcer   rS   r	   r   )
r   r!   rd   r~   r   r7   rq   rY   rZ   Z	max_shearrM   rM   rO   test_max_shear_force  s,    r   c                  C   s  t d} t d}tddd\}}t|| |}td\}}||dd |||d |||d	 d ||| |j | |d	 || d
 fkstt|| |}td\}}||dd |||d |j|dd|d ||| | |d	 ||d	  d fkstd S )Nr   r!   zl, PTrl   r   r   r-   r&   r%   rK   r2   )r   r   r
   rL   r[   r\   max_bmomentrS   )r   r!   r7   rq   rd   rY   rZ   rM   rM   rO   test_max_bmoment  s$     r   c                  C   s   t ddd\} }}}t|| |}d|dfg|_d|dfg|_||d dd || | d dd	 ||d |d ||| d |d	 || |d d | |d ||d
  d|  |  fkstd S )Nz
E, I, l, FTrl   ro   r   r&   r-   r2   r0   r)      )r   r
   rV   rW   rL   max_deflectionrS   )r   r!   r7   rt   rd   rM   rM   rO   test_max_deflection3  s    r   c               	   C   sD  t d\} }}}}t d\}}}}t| ||||}	t d\}
}|	j|dddd |	j|
dddd ddddgf| dddgfg|	_ddddgf| dddgfg|	_|	  |	 d| kst|		 d| t
 dgkst|	 d| t
 | dgkst|	 dkst|	 dd|
 t
 |t
d  d  gks6tt
|| | t
d	  d
 || t
d  |  || |  | | d|
   d| | |   || | d  d| |   d |
   d	| | |  || |  | | d|
   d| | |   || | d  d| |    t
| | | d  | d d	| | | d  || |  | | d|
   d| | |   || | d  d| |   d
  || |  |
 td	d  d	| | |     d| | | |  }|	 \}}}||  krdksn tt|| dksttd||||t
}|jddddd ddddgfddddgfg|_|j|dddd |j|dddd ||| |j|d|dikst|  | dddt
d	  d	| |  dt
d  ||   dt
 ||   gkstdt
d
  d| |  dt
d	  ||   dt
d  ||   dt
d  ||   dt
 ||   }| \}}}||  krzdksn t||ksttd||||t
}|jddddd |jdt
 dddd |j|dddd |j|dddd |j|dddd |j|dddd ||||| |j|d|d|d|diks@td S )Nzl, E, G, I, AzR1, R2, R3, R4zm, qr   r   dirzr&   r)   r%   rI   r1   r+   2   rC   rD   r   r-   ir   iw  i  }   r   i  r2   rA   iiit)r   r   rL   apply_moment_loadrW   rV   solve_slope_deflectionpolar_momentrS   r^   r   r_   Zaxial_stressr`   r   r'   r	   r[   r\   r(   )r7   r   Gr!   r#   rY   rZ   r   ZR4rd   mrg   Zexpected_deflectionZdxZdyZdzrh   ri   rM   rM   rO   test_Beam3D@  s     .D(^P>r   c                  C   sD   t d\} }}}}}||g}t| ||||}| || ks@td S )Nzl, E, G, A, I1, I2)r   r   r   rS   )r7   r   r   r#   ZI1ZI2r!   rd   rM   rM   rO   test_polar_moment_Beam3Dv  s    r   c               
   C   s^  t dddd\} }}t ddd\}}}t|| |}|jd |jd ||dd ||dd	 |d
dd ||| |j| |d  d ksttd| | |}|jd |jd ||dd ||dd	 |jd
dd|d ||| |j| |d  d ksttd| | |}|j|dd|d |j	
|d| d|d|di}|
tdidksrt|
tdidksttd| | |}|j|dd
|d |j	|ttdd
 |tt|d
  || tt|d  ksttd| | |}|j|dd|d |j	
|d| d|d|di}|
tdidksBt|
tdidksZtd S )NzE, I, LT)rm   realzR, M, P)r   ro   r   r-   r0   r$   r&   r)   rK   r.   rz   r+   r|   r*   r   r2   i(k )r   r
   rV   ra   rW   rL   r[   r\   rS   r]   Zxreplacer   r   )r   r!   rk   r~   r   rq   ZbeamZloadingrM   rM   rO   test_parabolic_loads~  sF    r   c               	   C   sL  t d} t d}t d}td\}}td\}}}}}	}
t||| }|j| ksRt|jd ks`ttdd|_|jttdd	 kst|jtddkstd
|
 d |_|jd
|
 d kst|jd kstt	t
 tdd|_W 5 Q R X td|td|	}|jtd|	kst|jt|	 t|	d  d	 ks6t|ddd |tdd |tdd |ddd |tt |jdttdd dttdd td  dttdd  dttdd d  kst| dttdd dttdd d  dttdd  dttdd d  ks(tdttdd
 dttdd
 td  dttdd  d	ttdd
 td  t| |	 t|	d   }| |d	|  kstdttdd d dttdd d  dttdd
  d	ttdd d  t| |	 t|	d   }| |t | d	|  ks0ttd|td|df||fd|f}|jtd|df||fd|fksxt|j||d  d ksttd|td|df|d
 |f}|jttddt|dt|d
 |kst|j||d  d kst||d }|d!dd |d"dd |d#dd dg|_dg|_|jt||d  d tdkf||d  d td$kfkst|jd kst|jd$kst| td%d&|| |d   kst| td'd(|| |d   d)|| |d    ks
t| td*d+|| |d   d,|| |d    ksHtd S )-Nr!   r7   r   zC3, C4za, c, g, h, r, nro   r*   iq  r%   r&   r1   r   r)   ir   r-   Z   -   r0   R   rA   r2   r.   r$   r   )      rz   rI   r   $   r   iA   r|   #   r   i   r   i  i  r+   iXi@
 ) r   r   r
   rT   rS   Zcross_sectionr   r   r   r   rb   r   rL   rY   rZ   r[   r]   r   r   r   r`   r(   r'   r   r   r   r   rW   rV   r   rR   rx   )r!   r7   r   rF   rG   rn   r;   ghrnZb0re   rg   rh   ri   rd   rM   rM   rO   test_cross_section  s    
$*(&6""& .>*>r   c                  C   sx   t d} tddddd}|jdddd	d
 |jd|  dddd
 ddddgfddddgfg|_| dddgksttd S )Nr   rz   r|      d   r   r   r   r   r   rI   r   ro   )rz   i`	  )rz   i,  )r   r   rL   rV   r   rS   r   rd   rM   rM   rO   test_max_shear_force_Beam3D  s    r   c                  C   sx   t d} tddddd}|jdddd	d
 |jd|  dddd
 ddddgfddddgfg|_| dddgksttd S )Nr   rz   r|   r   r   r   r   r   r   r   rI   r   ro   )rz   r   )rz   i>  )r   r   rL   rV   r   rS   r   rM   rM   rO   test_max_bending_moment_Beam3D  s    r   c                  C   s   t d} tddddd}|jdddd	d
 |jd|  dddd
 ddddgfddddgfg|_|  td}td}td}| dd|f||fgkstd S )Nr   rz   r|   r   r   r   r   r   r   r   rI   r   z495/14z-10 + 10*sqrt(10793)/43z(10 - 10*sqrt(10793)/43)**3/160 - 20/7 + (10 - 10*sqrt(10793)/43)**4/6400 + 20*sqrt(10793)/301 + 27*(10 - 10*sqrt(10793)/43)**2/560ro   r.   )r   r   rL   rV   r   r   r   rS   )r   rd   r;   rf   rg   rM   rM   rO   test_max_deflection_Beam3D  s    r   c                  C   s   t d} tddddd}|jddd	dd
 |jddd	dd
 |jddd	dd
 |  | | dtdksrt| | dtdkst| | dtdkst| | dtdkst| | dtdkstd S )Nr   rz   r|   r   r   r   r   r*   r0   r   r.   r   r)   z1/40rA   z17/280rI   z53/840   z2/35z3/56)r   r   r   Zsolve_for_torsionZangular_deflectionrx   r   rS   r   rM   rM   rO   test_torsion_Beam3D  s    r   N)>Zsympy.core.functionr   Zsympy.core.numbersr   r   Zsympy.core.singletonr   Zsympy.core.symbolr   r   Zsympy.sets.setsr   Zsympy.simplify.simplifyr	   Z&sympy.physics.continuum_mechanics.beamr
   Zsympy.functionsr   r   r   r   r   Zsympy.testing.pytestr   Zsympy.physics.unitsr   r   r   r   r   r   Zsympy.geometryr   r   r   r   Zsympy.core.sympifyr   r   r   rY   rZ   rj   rs   rv   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rM   rM   rM   rO   <module>   sH    _ 7#76<A