dynamics_shell_elements Module

Flat, three-dimensional shell elements with six degrees of freedom per node.

Each element is formulated in a local, planar coordinate system by superposing a membrane (plane-stress) element, a plate-bending element, and a drilling-rotation stabilization term. The resulting local matrices are then transformed into the global coordinate system.

The nodal degrees of freedom are ordered as where the rotations follow the right-hand rule about each axis. The element displacement vector stacks the nodal vectors in local node order.

Local Coordinate System

The local -axis is the unit normal of the element plane computed from the node ordering (right-hand rule). The local -axis is the projection of the vector from node 1 to node 2 onto the element plane, and the local -axis completes the right-handed system. Nodes are assumed to lie in a common plane; warped quadrilaterals are projected onto their mean plane.

Kinematics

Within the local system, the displacement through the thickness is and . The generalized strain vector is with

The corresponding stress-resultant vector is where are membrane forces per unit length, are moments per unit length, and are transverse shear forces per unit length.

Drilling Rotation

The in-plane rotation is not part of classical shell theory. It is stabilized with the Hughes-Brezzi penalty which vanishes for rigid-body motion and prevents a singular stiffness matrix for co-planar meshes. The factor is the element's drilling_factor.

Mass Matrix

The consistent mass matrix is computed from the linear (triangle) or bilinear (quadrilateral) interpolation of all six nodal quantities with translational inertia and rotary inertia . The rotary inertia is also assigned to the drilling rotation to keep the mass matrix positive definite.



Contents


Interfaces

public interface rectangular_shell_element

  • private pure function quad_init(mat, thickness, nd1, nd2, nd3, nd4) result(rst)

    Constructs a new [[rectangular_shell_element]].

    Arguments

    Type IntentOptional Attributes Name
    class(material), intent(in) :: mat

    The material.

    real(kind=real64), intent(in) :: thickness

    The shell thickness. This value must be positive.

    class(node), intent(in) :: nd1

    The first node.

    class(node), intent(in) :: nd2

    The second node.

    class(node), intent(in) :: nd3

    The third node.

    class(node), intent(in) :: nd4

    The fourth node.

    Return Value type(rectangular_shell_element)

    The new [[rectangular_shell_element]].

public interface triangular_shell_element

  • private pure function tri_init(mat, thickness, nd1, nd2, nd3) result(rst)

    Constructs a new [[triangular_shell_element]].

    Arguments

    Type IntentOptional Attributes Name
    class(material), intent(in) :: mat

    The material.

    real(kind=real64), intent(in) :: thickness

    The shell thickness. This value must be positive.

    class(node), intent(in) :: nd1

    The first node.

    class(node), intent(in) :: nd2

    The second node.

    class(node), intent(in) :: nd3

    The third node.

    Return Value type(triangular_shell_element)

    The new [[triangular_shell_element]].


Derived Types

type, public, extends(shell_element) ::  rectangular_shell_element

Defines a four-node flat shell element.

Read more…

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: drilling_factor = 1.0d-3

The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus.

type(material), public :: material

The material.

type(node), public, dimension(4) :: nodes

The element nodes.

real(kind=real64), public :: shear_correction = 5.0d0/6.0d0

The transverse shear correction factor. This value is only used by elements that include transverse shear deformation.

real(kind=real64), public :: thickness

The shell thickness.

Constructor

private pure function quad_init (mat, thickness, nd1, nd2, nd3, nd4)

Constructs a new [[rectangular_shell_element]].

Type-Bound Procedures

procedure , public :: area => shl_area Function
procedure , public :: constitutive_matrix => shl_constitutive_matrix Function
procedure , public :: evaluate_shape_function => quad_shape_function Function
procedure , public :: external_force_vector => shl_ext_force_vector Function
procedure , public :: get_dimensionality => shl_dimensionality Function
procedure , public :: get_dof_per_node => shl_dof_per_node Function
procedure , public :: get_node => quad_get_node Function
procedure , public :: get_node_count => quad_get_node_count Function
procedure , public :: get_node_natural_coordinates => quad_get_node_natural_coordinates Function
procedure , public :: integration_rule => quad_integration_rule Subroutine
procedure , public :: jacobian => shl_jacobian Function
procedure , public :: local_coordinates => shl_local_coordinates Function
procedure , public :: local_frame => shl_local_frame Function
procedure , public :: mass_matrix => shl_mass_matrix Function
procedure , public :: rotation_matrix => shl_rotation_matrix Function
procedure , public :: shape_function_gradient => shl_shape_function_gradient Function
procedure , public :: shape_function_matrix => shl_shape_function_matrix Function
procedure , public :: shape_function_natural_gradient => quad_shape_function_natural_gradient Function
procedure , public :: stiffness_matrix => shl_stiffness_matrix Function
procedure , public :: strain => shl_strain Function
procedure , public :: strain_displacement_matrix => quad_strain_disp_matrix Function
procedure , public :: stress => shl_stress Function

type, public, extends(element) ::  shell_element

Defines a flat shell element with six degrees of freedom per node (three translations and three rotations).

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: drilling_factor = 1.0d-3

The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus.

type(material), public :: material

The material.

real(kind=real64), public :: shear_correction = 5.0d0/6.0d0

The transverse shear correction factor. This value is only used by elements that include transverse shear deformation.

real(kind=real64), public :: thickness

The shell thickness.

Type-Bound Procedures

procedure , public :: area => shl_area Function
procedure , public :: constitutive_matrix => shl_constitutive_matrix Function
procedure (element_shape_function) , public , pass :: evaluate_shape_function
procedure , public :: external_force_vector => shl_ext_force_vector Function
procedure , public :: get_dimensionality => shl_dimensionality Function
procedure , public :: get_dof_per_node => shl_dof_per_node Function
procedure (element_get_node) , public , pass :: get_node
procedure (element_query) , public , pass :: get_node_count
procedure (element_get_node_natural_coordinates) , public , pass :: get_node_natural_coordinates
procedure (shell_integration_rule) , public , pass :: integration_rule
procedure , public :: jacobian => shl_jacobian Function
procedure , public :: local_coordinates => shl_local_coordinates Function
procedure , public :: local_frame => shl_local_frame Function
procedure , public :: mass_matrix => shl_mass_matrix Function
procedure , public :: rotation_matrix => shl_rotation_matrix Function
procedure , public :: shape_function_gradient => shl_shape_function_gradient Function
procedure , public :: shape_function_matrix => shl_shape_function_matrix Function
procedure (shell_natural_gradient) , public , pass :: shape_function_natural_gradient
procedure , public :: stiffness_matrix => shl_stiffness_matrix Function
procedure , public :: strain => shl_strain Function
procedure (element_matrix_function) , public , pass :: strain_displacement_matrix
procedure , public :: stress => shl_stress Function

type, public, extends(shell_element) ::  triangular_shell_element

Defines a three-node flat shell element.

Read more…

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: drilling_factor = 1.0d-3

The nondimensional drilling-rotation penalty factor . The drilling stiffness is , where is the shear modulus.

type(material), public :: material

The material.

type(node), public, dimension(3) :: nodes

The element nodes.

real(kind=real64), public :: shear_correction = 5.0d0/6.0d0

The transverse shear correction factor. This value is only used by elements that include transverse shear deformation.

real(kind=real64), public :: thickness

The shell thickness.

Constructor

private pure function tri_init (mat, thickness, nd1, nd2, nd3)

Constructs a new [[triangular_shell_element]].

Type-Bound Procedures

procedure , public :: area => shl_area Function
procedure , public :: constitutive_matrix => shl_constitutive_matrix Function
procedure , public :: evaluate_shape_function => tri_shape_function Function
procedure , public :: external_force_vector => shl_ext_force_vector Function
procedure , public :: get_dimensionality => shl_dimensionality Function
procedure , public :: get_dof_per_node => shl_dof_per_node Function
procedure , public :: get_node => tri_get_node Function
procedure , public :: get_node_count => tri_get_node_count Function
procedure , public :: get_node_natural_coordinates => tri_get_node_natural_coordinates Function
procedure , public :: integration_rule => tri_integration_rule Subroutine
procedure , public :: jacobian => shl_jacobian Function
procedure , public :: local_coordinates => shl_local_coordinates Function
procedure , public :: local_frame => shl_local_frame Function
procedure , public :: mass_matrix => shl_mass_matrix Function
procedure , public :: rotation_matrix => shl_rotation_matrix Function
procedure , public :: shape_function_gradient => shl_shape_function_gradient Function
procedure , public :: shape_function_matrix => shl_shape_function_matrix Function
procedure , public :: shape_function_natural_gradient => tri_shape_function_natural_gradient Function
procedure , public :: stiffness_matrix => shl_stiffness_matrix Function
procedure , public :: strain => shl_strain Function
procedure , public :: strain_displacement_matrix => tri_strain_disp_matrix Function
procedure , public :: stress => shl_stress Function