Source code for seapy.components.beam

"""
Beam
----

.. autoclass:: seapy.components.beam.Component1DBeam

Subsystems
++++++++++

.. autoclass:: seapy.components.beam.SubsystemLong
.. autoclass:: seapy.components.beam.SubsystemBend
.. autoclass:: seapy.components.beam.SubsystemShear


Classes describing a one-dimensional beam.
"""

import numpy as np
from .structural import ComponentStructural
from ..subsystems import SubsystemStructural

   
[docs]class SubsystemLong(SubsystemStructural): """Subsystem for longitudinal waves in a 1D system. """ @property
[docs] def wavenumber(self, N, delta): """Wavenumber in radians per unit length. :param N: mode :param delta: boundary condition dependent constant :rtype: :class:`numpy.ndarray` .. math:: k = (N + \\delta_{BC} ) \\frac{\\pi}{L} See Lyon, equation 8.1.2 """ return (N + delta) * np.pi / self.component.length
@property
[docs] def soundspeed_phase(self): """Phase velocity for longitudinal wave. :rtype: :class:`numpy.ndarray` .. math:: c_{L,\\phi}^{1D} = \\frac{E}{\\rho} """ return np.repeat(self.component.material.young / self.component.material.density, self.frequency.amount)
@property
[docs] def soundspeed_group(self): """Group velocity for longitudinal wave. :rtype: :class:`numpy.ndarray` .. math:: c_{L,g}^{1D} = c_{L,\\phi}^{1D} """ return self.soundspeed_phase
@property
[docs] def average_frequency_spacing(self): """Average frequency spacing for longitudinal waves. :rtype: :class:`numpy.ndarray` .. math:: \\overline{\\delta f}_L^{1D} = \\frac{c_{L, \\phi}^{1D}}{2L} See Lyon, eq. 8.1.7 """ return self.soundspeed_group / (2.0 * self.component.length)
@property
[docs] def impedance_point_force(self): """Impedance for longitudinal waves in a bar when excited at a point by a force. :rtype: :class:`numpy.ndarray` .. math:: Z_{L}^{F, 1D} = 2 \\rho S c_L See Lyon, table 10.1, first row. """ return 2.0 * self.component.material.density * self.component.cross_section * self.soundspeed_group
[docs]class SubsystemBend(SubsystemStructural): """Subsystem for bending waves in a 1D system. """ @property
[docs] def soundspeed_phase(self): """Phase velocity for bending wave. :rtype: :class:`numpy.ndarray` .. math:: c_{B,\\phi}^{2D} = \\sqrt{\\omega \\kappa c_{L, \\phi}^{1D} } See Lyon, above eq. 8.1.10 """ return np.sqrt(self.frequency.angular * self.component.radius_of_gyration * self.component.subsystem_long.soundspeed_phase)
@property
[docs] def soundspeed_group(self): """Group velocity for bending wave. :rtype: :class:`numpy.ndarray` .. math:: c_{B,g}^{1D} = 2 c_{B,\\phi}^{1D} """ return 2.0 * self.soundspeed_phase
@property
[docs] def average_frequency_spacing(self): """Average frequency spacing for bending waves. Valid when :math:`f << c_{L,\\phi} / 4 \\pi \\kappa`. :rtype: :class:`numpy.ndarray` .. math:: \\overline{\\delta f}_B^{1D} = \\frac{c_{B, \\phi}^{1D}}{L} See Lyon, eq. 8.1.10 """ return self.soundspeed_group / (self.component.length)
@property
[docs] def impedance_point_force(self): """Impedance for bending waves in a thin beam excited far way from the edges. :rtype: :class:`numpy.ndarray` .. math:: Z_B^{F,1D} = 2 \\rho S c_{L, \\phi}^{1D} (1 + j) See Lyon, table 10.1, second row. """ return 2.0 * self.component.material.density * self.component.cross_section * self.soundspeed_group * (1.0 + 1.0j)
@property
[docs] def flexural_rigidity(self): """Flexural rigidity or bending stiffness of a beam. .. math:: B = \\frac{E h^3 b}{12} with * Young's modulus :math:`E` * Beam height :math:`h` * Beam width :math:`b`: See Craik, equation 3.3, page 48. """ return self.component.material.young * self.component.height*3.0 * self.component.width / 12.0 #@property #def impedance_force_point_edge(self): #"""Impedance for bending waves in a thin beam excited on the side. #:rtype: :class:`numpy.ndarray` #.. math:: Z_B^{F,1D} = \\frac{1}{2} \\rho S c_{L, \\phi}^{1D} (1 + j) #See Hynna, table 1, second equation. #!!!!!!!!!!!! #This is a quarter of the expression above and this is #simply do to different position of excitation as explained by Lyon! #!!!!!!!!!!! #""" #return 0.5 * self.component.material.density * self.component.cross_section * self.soundspeed_group * (1.0 + 1.0j)
@property
[docs] def impedance_point_moment(self): """Moment impedance for bending waves excited in the center of the beam. :rtype: :class:`numpy.ndarray` .. math:: W = 2 \\rho S c_B \\frac{(1-j)}{k_B^2} See Lyon, table 10.2, second row. """ return 2.0 * self.component.material.density * self.component.cross_section * self.soundspeed_group * (1.0 - 1.0j) / self.wavenumber**2.0 #@property #def impedance_moment_edge(self): #"""Moment impedance for bending waves excited at the edge of the beam. #:rtype: :class:`numpy.ndarray` #.. math:: W = \\frac{1}{2} \\rho S c_B \\frac{(1-j)}{k_B^2} #See Hynna, table 1. #!!!!!!!!!!!! #This is a quarter of the expression above and this is #simply do to different position of excitation as explained by Lyon! #!!!!!!!!!!! #""" #return 0.5 * self.component.material.density * self.component.cross_section * self.soundspeed_group * (1.0 - 1.0j) / self.wavenumber**2.0
[docs]class SubsystemShear(SubsystemStructural): """Subsystem for shear waves in a 1D isotropic system. """ @property
[docs] def soundspeed_phase(self): """Phase velocity for shear wave. :rtype: :class:`numpy.ndarray` .. math:: c_{T,g}^{1D} = \\sqrt{\\frac{G J }{\\rho I_p}} """ return np.sqrt(self.component.material.shear * self.component.torsional_rigidity / (self.component.material.density * self.component.area_moment_of_inertia))
@property
[docs] def soundspeed_group(self): """Group velocity for shear wave. :rtype: :class:`numpy.ndarray` .. math:: c_{T,g}^{1D} = c_{T,\\phi}^{1D} """ return self.soundspeed_phase
@property
[docs] def average_frequency_spacing(self): """Average frequency spacing for bending waves. :rtype: :class:`numpy.ndarray` .. math:: \\overline{\\delta f}_T^{1D} = \\frac{c_T}{2L} See Lyon, eq. 8.1.8 """ return self.soundspeed_group / (2.0 * self.component.length)
@property
[docs] def impedance(self): """Impedance :rtype: :class:`numpy.ndarray` """ raise NotImplementedError
[docs]class Component1DBeam(ComponentStructural): """One-dimensional beam component. The following subsystems are implemented for this component: * :class:`seapy.components.beam.SubsystemLong` * :class:`seapy.components.beam.SubsystemBend` * :class:`seapy.components.beam.SubsystemShear` """ SUBSYSTEMS = {'Long': SubsystemLong, 'Bend': SubsystemBend, 'Shear': SubsystemShear} @property
[docs] def mass_per_area(self): """Mass per unit area. :rtype: :func:`float` """ return self.material.density * self.height #*self.width
@property
[docs] def area_moment_of_inertia(self): """Area moment of inertia. :rtype: :func:`float` """ return np.sqrt(self.cross_section) * np.power(np.sqrt(self.cross_section),3.0) / 12.0
@property
[docs] def radius_of_gyration(self): """Radius of gyration :math:`\\kappa` is given by dividing the height of the beam by 12. :rtype: :func:`float` .. math:: \\kappa = \\frac{h}{12} See Lyon, above eq. 8.1.10 """ return self.height / 12.0
@property
[docs] def torsional_rigidity(self): """Torsional rigidity of beam.""" raise NotImplementedError