.. _section-material-layup: Materials and layups ==================== PreVABS uses the keyword ``material`` for the physical properties attached to any materials, while ``lamina`` for material plus thickness, which in a sense is fixed by manufacturers. This can be thought as the basic commercially available "material", such as a composite preprag. A layer is a stack of laminae with the same fiber orientation. The thickness of a layer can only be a multiplier of the lamina thickness. Layup is several layers stacked together in a specific order. This relationship is illustrated in :numref:`Fig. %s `. More details can be found below. .. figure:: /figures/layup.png :name: fig_layup :width: 6in :align: center Relationship between material, lamina, layer and layup. .. contents:: Material --------- Both materials and laminae are stored in one XML file, under the single root element ````. A template of this file is shown in :numref:`Listing %s `. Each material must have a name and type. Under each ```` element, there are a ```` element and an ```` element. If failure analysis is wanted, users need to provide extra data including ```` and ````. .. code-block:: xml :linenos: :name: code_material_layout :caption: Input syntax for materials. ... ... ... ... ... ... **Specification** - **** - Root element for each material. - *name* - Name of the material. - *type* - Type of the material. Choose one from 'isotropic', 'orthotropic', 'anisotropic' and 'lamina'. - **** - Density of the material. Defualt is 1.0. - **** - Elastic properties of the material. Specifications are different for different types. - **** - Strength properties of the material. Specifications are different for different types and different failure criterion. - **** - Failure criterion of the material. Options are different for different types. Elastic properties ^^^^^^^^^^^^^^^^^^ .. code-block:: xml :linenos: :name: code_material_temp :caption: Input syntax for materials. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... For the ``lamina`` type material, the code will internally convert it to the ``orthotropic`` type, by assigning the rest five constants in the following way: - e3 = e2 - nu13 = nu12 - nu23 = 0.3 - g13 = g12 - g23 = e2 / ( 2 * (1 + nu23) ) **Specification** - If *type="isotropic"* - 2 constants: 'e' and 'nu'. - If *type="lamina"* - 4 constants: 'e1', 'e2', 'nu12' and 'g12'. - If *type="orthotropic"* - 9 constants: 'e1', 'e2', 'e3', 'g12', 'g13', 'g23', 'nu12', 'nu13' and 'nu23'. - If *type="anisotropic"* - 21 constants: 'c11', 'c12', 'c13', 'c14', 'c15', 'c16', 'c22', 'c23', 'c24', 'c25', 'c26', 'c33', 'c34', 'c35', 'c36', 'c44', 'c45', 'c46', 'c55', 'c56' and 'c66'. These constants are defined in Equation :eq:`hookeslaw`. - If *type="lamina"* - 4 constants: 'e1', 'e2', 'g12' and 'nu12'. Internally, this type of material will be converted to the 'orthotropic' material. The default values for the rest components are: 'e3=e2', 'nu13=nu12', 'nu23=0.3', 'g13=g12' and 'g23=e3/(2*(1+nu23))'. These default values can be overwritten by custom values. .. math:: :label: hookeslaw \begin{Bmatrix} \sigma_{11} \\ \sigma_{12} \\ \sigma_{13} \\ \sigma_{22} \\ \sigma_{23} \\ \sigma_{33} \end{Bmatrix} = \begin{bmatrix} c_{11} & c_{12} & c_{13} & c_{14} & c_{15} & c_{16} \\ c_{12} & c_{22} & c_{23} & c_{24} & c_{25} & c_{26} \\ c_{13} & c_{23} & c_{33} & c_{34} & c_{35} & c_{36} \\ c_{14} & c_{24} & c_{34} & c_{44} & c_{45} & c_{46} \\ c_{15} & c_{25} & c_{35} & c_{45} & c_{55} & c_{56} \\ c_{16} & c_{26} & c_{36} & c_{46} & c_{56} & c_{66} \end{bmatrix} \begin{Bmatrix} \epsilon_{11} \\ 2\epsilon_{12} \\ 2\epsilon_{13} \\ \epsilon_{22} \\ 2\epsilon_{23} \\ \epsilon_{33} \end{Bmatrix} Strength properties ^^^^^^^^^^^^^^^^^^^ Inputs for strength properties for all types of materials have the same syntax. For each material, users can input at least one or at most nine properties. The overall syntax for each material is shown in :numref:`Listing %s `. .. code-block:: xml :linenos: :name: code_material_strength_overall :caption: Overall input syntax for strength properties. ... ... ... ... ... ... ... ... ... ... Although all properties will be stored internally, only some of them will be used in analysis depending on the failure criterion. **Specification** - **** - Tensile strength in |x1| direction. Alternative tags: or . (Required) - **** - Tensile strength in |x2| direction. Alternative tags: or . (Optional. Default = .) - **** - Tensile strength in |x3| direction. Alternative tags: or . (Optional. Default = .) - **** - Compressive strength in |x1| direction. Alternative tag: . (Optional. Default = .) - **** - Compressive strength in |x2| direction. Alternative tag: . (Optional. Default = .) - **** - Compressive strength in |x3| direction. Alternative tag: . (Optional. Default = .) - **** - Shear strength in |x1|-|x2| plane. Alternative tag: . (Required for specific failure criteria.) - **** - Shear strength in |x1|-|x3| plane. Alternative tag: . (Optional. Default = ) - **** - Shear strength in |x2|-|x3| plane. Alternative tag: . (Optional. Default = ( + ) / 4) Failure criteria ^^^^^^^^^^^^^^^^ For isotropic materials, the following five failure criteria are available, followed by the strength constants needed: 1. **Max principal stress**. Strength constants (2): - 1 tensile strength (:math:`X`) - 1 compressive strength (:math:`X'`). 2. **Max principal strain**. Strength constants (2): - 1 tensile strength (:math:`X_{\varepsilon}`) - 1 compressive strength (:math:`X'_{\varepsilon}`). 3. **Max shear stress** or **Tresca**. Strength constant (1): - 1 shear strength (:math:`S`). 4. **Max shear strain**. Strength constant (1): - 1 shear strength (:math:`S_{\varepsilon}`) 5. **Mises**. Strength constant (1): - 1 strength (:math:`X`). For other type materials (lamina, orthotropic, anisotropic), the following five failure criteria are available: 1. **Max stress**. Strength constants (9): - 3 tensile strengths in three directions (:math:`X, Y, Z`) - 3 compressive strengths in three directions (:math:`X', Y', Z'`) - 3 shear strengths in three principal planes (:math:`S, T, R`) 2. **Max strain**. Strength constants (9): - 3 tensile strengths in three directions (:math:`X_{\varepsilon}, Y_{\varepsilon}, Z_{\varepsilon}`) - 3 compressive strengths in three directions (:math:`X'_{\varepsilon}, Y'_{\varepsilon}, Z'_{\varepsilon}`) - 3 shear strengths in three principal planes (:math:`S_{\varepsilon}, T_{\varepsilon}, R_{\varepsilon}`) 3. **Tsai-Hill**. Strength constants (6): - 3 normal strengths in three directions (:math:`X, Y, Z`) - 3 shear shear strengths in three principal planes (:math:`S, T, R`). 4. **Tsai-Wu**. Strength constants (9): - 3 tensile strengths in three directions (:math:`X, Y, Z`) - 3 compressive strengths in three directions (:math:`X', Y', Z'`) - 3 shear strengths in three principal planes (:math:`S, T, R`) 5. **Hashin**. Strength constants (6): - 2 tensile strengths in two directions (:math:`X, Y`) - 2 compressive strengths in two directions (:math:`X', Y'`) - 2 shear strengths in two principal planes (:math:`S, R`) Different failure criterion will use different strength properties. This is summarized in the table below. .. csv-table:: Strength properties used by different failure criteria. :header-rows: 1 :align: center Failure criterion,x/xt/t1,y/yt/t2,z/zt/t3,xc/c1,yc/c2,zc/c3,s/s12,t/s13,r/s23 **Isotropic** Max principal stress, :math:`X`,,, :math:`X'`,,, ,, Max principal strain, :math:`X_{\varepsilon}`,,, :math:`X'_{\varepsilon}`,,, ,, Max shear stress, ,,, ,,, :math:`S`,, Max shear strain, ,,, ,,, :math:`S_{\varepsilon}`,, Mises, :math:`X`,,, ,,, ,, **Not isotropic** Max stress, :math:`X`, :math:`Y`, :math:`Z`, :math:`X'`, :math:`Y'`, :math:`Z'`, :math:`S`, :math:`T`, :math:`R` Max strain, :math:`X_{\varepsilon}`, :math:`Y_{\varepsilon}`, :math:`Z_{\varepsilon}`, :math:`X'_{\varepsilon}`, :math:`Y'_{\varepsilon}`, :math:`Z'_{\varepsilon}`, :math:`S_{\varepsilon}`, :math:`T_{\varepsilon}`, :math:`R_{\varepsilon}` Tsai-Hill, :math:`X`, :math:`Y`, :math:`Z`, ,,, :math:`S`, :math:`T`, :math:`R` Tsai-Wu, :math:`X`, :math:`Y`, :math:`Z`, :math:`X'`, :math:`Y'`, :math:`Z'`, :math:`S`, :math:`T`, :math:`R` Hashin, :math:`X`, :math:`Y`,, :math:`X'`, :math:`Y'`,, :math:`S`,, :math:`R` More details can be found in the VABS users manual. **Specification** - **** - Name or ID of the failure criterion used. - If *type="isotropic"*, choose one of the following: - ``1`` or ``max principal stress`` - ``2`` or ``max principal strain`` - ``3`` or ``max shear stress`` or ``tresca`` - ``4`` or ``max shear strain`` - ``5`` or ``mises`` - If *type="lamina"* or *type="orthotropic"* or *type="anisotropic"*, choose one of the following: - ``1`` or ``max stress`` - ``2`` or ``max strain`` - ``3`` or ``tsai-hill`` - ``4`` or ``tsai-wu`` - ``5`` or ``hashin`` Lamina ------ Each lamina element has a name, and contains a material name and a value for thickness. The input syntax is shown in :numref:`Listing %s `. .. code-block:: xml :linenos: :name: code_lamina_temp :caption: Input syntax for lamina. ... orth1 ... ... **Specification** - **** - Root element for the definition of each lamina. - *name* - Name of the lamina. - **** - Name of the material of the lamina. - **** - Thickness of the lamina. Layups ------ In general, there are two ways to define a layup, explicit list and stacking sequence code. For the explicit list, a laminate is laid onto the base line from the first layer in the list to the last one, in the direction given by the user. For the stacking sequence, the layup starts from left to the right. User should pay attention to the relations among the base line direction, elemental frame **y** and fiber orientation :math:`\theta_3` of each layer, as shown in :numref:`Fig. %s `. Change of direction of the base line will change the elemental frame **y** as defined, which will further require the user to change the fiber orientations accordingly, even though nothing changes physically. All layup information are included in one XML file. A template of this file can be found in :numref:`Listing %s `. .. figure:: /figures/elementalframe.png :name: fig_elementalframe :width: 6in :align: center Relations among the base line direction, elemental frame **y** and fiber orientation (Note $y_2$ is parallel to the base line direction). .. code-block:: xml :linenos: :name: code_layup_temp :caption: Input syntax for layups. ... ... ... ... ... **Specification** - **** - Root element for the definition of each layup. - *name* - Name of the layup. - *method* - Method of defining the layup. Choose one from 'layer list' (or 'll') and 'stack sequence' (or 'ss'). Default is 'layer list'. Explicit list ^^^^^^^^^^^^^ This method requires user to write down the lamina name, fiber orientation and number of successive laminas with the same fiber orientation, layer by layer. Alternatively, a layer can also be defined by the name of a sublayup. A sublayup must appear before the layup where it is referenced. A template for one layer is shown below. .. code-block:: xml :linenos: :name: code_layup_ll_temp :caption: A template for the layup layer list input. ... angle:stack angle:stack angle:stack ... ... **Specification** - **** - Material orientation and number of plies separated by a colon 'angle:stack'. Default values are 0 for 'angle' and 1 for 'stack'. If there is only one number presented in this element, then it is read in as 'angle', not 'stack', which is 1 by default. - *lamina* - Optional. Name of the lamina used in the current layer. - *layup* - Optional. Name of the sublayup used in the current layer. One and only one of *lamina* and *layup* should be used. 'angle' and 'stack' are not needed when *layup* is used. An example for the layup shown in :numref:`Fig. %s ` is given in :numref:`Listing %s ` and :numref:`Listing %s `. Stacking sequence code ^^^^^^^^^^^^^^^^^^^^^^ This method requires users to provide one lamina name and the stacking sequence code. A template is shown below. .. code-block:: xml :linenos: :name: code_layup_ss_temp :caption: A template for the layup stacking sequence input. ... ... ... ... **Specification** - **** - Name of the lamina used. - **** - Stacking sequency code. Explained below. **Rules of writing the stacking sequence code** - All fiber orientations should be put between a pair of square brackets ``[]``; - Different fiber orientations are separated by slash ``/``; - After the right bracket, user can add ``ns`` to indicate symmetry of the layup, where ``n`` is the number of the symmetry operations needed to generate the complete layup; - Successive laminae with the same fiber orientation can be expressed using colon like ``angle:stack``, where ``angle`` is the fiber orientation and ``stack`` is the number of plies; - If a group of fiber orientations is repeated, user needs to close them in a pair of round brackets ``()``. Examples .. csv-table:: Examples of stacking sequence code :header-rows: 1 :align: center Code, Complete sequence ``[0/90]2s``, "0, 90, 90, 0, 0, 90, 90, 0" ``[(45/-45):2/0:2]s``, "45, -45, 45, -45, 0, 0, 0, 0, -45, 45, -45, 45" .. Ply/Lamina percentage code .. ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. (Will be available in a future version) .. code-block:: xml :linenos: :name: code_material :caption: Example material and lamina input file for the layup shown in :numref:`Fig. %s `. ... ... ... ... square 1.5 hexagon 1.0 .. code-block:: xml :linenos: :name: code_layup :caption: Example layup input file for the layup shown in :numref:`Fig. %s `. 45:2 90 -45:2 0:2 -45:2 90 45:2 la_square_15 [(45/-45):2/0:4/90]2s