shell_element Derived Type

type, public, abstract, extends(element) :: shell_element

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


Contents


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

  • private pure function shl_area(this) result(rst)

    Computes the area of the element.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value real(kind=real64)

    The element area.

procedure, public :: constitutive_matrix => shl_constitutive_matrix

  • private pure function shl_constitutive_matrix(this) result(rst)

    Computes the 8-by-8 constitutive matrix relating the generalized strains to the stress resultants. where is the shear correction factor and .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 8-by-8 constitutive matrix.

procedure(element_shape_function), public, deferred, pass :: evaluate_shape_function

  • pure function element_shape_function(this, i, s) result(rst) Prototype

    Defines the signature of a routine for computing the value of the i-th element shape function at natural coordinate.

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    integer(kind=int32), intent(in) :: i

    The index of the shape function to evaluate.

    real(kind=real64), intent(in), dimension(:) :: s

    The value of the natural coordinates at which to evaluate the shape function.

    Return Value real(kind=real64)

    The value of the i-th shape function at s.

procedure, public :: external_force_vector => shl_ext_force_vector

  • private pure function shl_ext_force_vector(this, q, rule) result(rst)

    Computes the consistent nodal force vector, in the global coordinate system, resulting from a uniform surface traction. Only the translational degrees of freedom receive load.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: q

    The 3-element surface traction vector (force per unit area) expressed in the global coordinate system. For a pressure acting along the local -axis, supply , where is the third row of the local_frame matrix.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine.

    Return Value real(kind=real64), allocatable, dimension(:)

    The 6N-element force vector, where N is the number of nodes.

procedure, public :: get_dimensionality => shl_dimensionality

  • private pure function shl_dimensionality(this) result(rst)

    Gets the dimensionality of the element.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value integer(kind=int32)

    The dimensionality (always 3).

procedure, public :: get_dof_per_node => shl_dof_per_node

  • private pure function shl_dof_per_node(this) result(rst)

    Gets the number of degrees of freedom per node.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value integer(kind=int32)

    The number of degrees of freedom per node (always 6).

procedure(element_get_node), public, deferred, pass :: get_node

  • pure function element_get_node(this, i) result(rst) Prototype

    Defines the signature of a function for retrieving the requested node from the element.

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    integer(kind=int32), intent(in) :: i

    The local index of the node to retrieve.

    Return Value type(node)

    The node.

procedure(element_query), public, deferred, pass :: get_node_count

  • pure function element_query(this) result(rst) Prototype

    Defines the signature of a function performing a query on an integer-valued property of a element type.

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    Return Value integer(kind=int32)

    The resulting value.

procedure(element_get_node_natural_coordinates), public, deferred, pass :: get_node_natural_coordinates

  • pure function element_get_node_natural_coordinates(this, i) result(rst) Prototype

    Defines the signature of a function returning the natural coordinates of an element node.

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    integer(kind=int32), intent(in) :: i

    The local index of the node.

    Return Value real(kind=real64), allocatable, dimension(:)

    The natural coordinates of the node.

procedure(shell_integration_rule), public, deferred, pass :: integration_rule

  • pure subroutine shell_integration_rule(this, pts, wts) Prototype

    Defines the signature of a routine returning the numerical integration rule used by the element. An integral over the element is evaluated as .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(out), allocatable, dimension(:,:) :: pts

    A 2-by-M matrix containing the natural coordinates of the M integration points.

    real(kind=real64), intent(out), allocatable, dimension(:) :: wts

    The M integration weights.

procedure, public :: jacobian => shl_jacobian

  • private pure function shl_jacobian(this, s) result(rst)

    Computes the 2-by-2 Jacobian matrix of the mapping from natural to local coordinates.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the Jacobian.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 2-by-2 Jacobian matrix.

procedure, public :: local_coordinates => shl_local_coordinates

  • private pure function shl_local_coordinates(this) result(rst)

    Computes the in-plane nodal coordinates in the element's local coordinate system. Node 1 is located at the local origin.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    An N-by-2 matrix, where N is the number of nodes, containing the local and coordinates of each node.

procedure, public :: local_frame => shl_local_frame

  • private pure function shl_local_frame(this) result(rst)

    Computes the direction cosine matrix of the element's local coordinate system. The rows of the matrix are the local , , and unit vectors expressed in global coordinates; therefore, .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 3-by-3 direction cosine matrix.

procedure, public :: mass_matrix => shl_mass_matrix

  • private pure function shl_mass_matrix(this, rule) result(rst)

    Computes the consistent element mass matrix in the global coordinate system.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 6N-by-6N mass matrix, where N is the number of nodes.

procedure, public :: rotation_matrix => shl_rotation_matrix

  • private pure function shl_rotation_matrix(this) result(rst)

    Computes the transformation matrix relating the global element displacement vector to the local element displacement vector such that . The matrix is block diagonal with the 3-by-3 direction cosine matrix repeated for the translations and rotations of each node.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 6N-by-6N transformation matrix, where N is the number of nodes.

procedure, public :: shape_function_gradient => shl_shape_function_gradient

  • private pure function shl_shape_function_gradient(this, s) result(rst)

    Computes the derivatives of the shape functions with respect to the local and coordinates, .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the derivatives.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    A 2-by-N matrix, where N is the number of nodes, containing in the first row and in the second row.

procedure, public :: shape_function_matrix => shl_shape_function_matrix

  • private pure function shl_shape_function_matrix(this, s) result(rst)

    Computes the 6-by-6N shape function matrix interpolating the local nodal quantities with the element's linear (triangle) or bilinear (quadrilateral) shape functions. This interpolation is used to form the mass matrix and the external force vector.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the matrix.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 6-by-6N shape function matrix, where N is the number of nodes.

procedure(shell_natural_gradient), public, deferred, pass :: shape_function_natural_gradient

  • pure function shell_natural_gradient(this, s) result(rst) Prototype

    Defines the signature of a routine returning the derivatives of the element shape functions with respect to the natural coordinates.

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the derivatives.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    A 2-by-N matrix, where N is the number of nodes, whose first row contains the derivatives with respect to the first natural coordinate and whose second row contains the derivatives with respect to the second natural coordinate.

procedure, public :: stiffness_matrix => shl_stiffness_matrix

  • private pure function shl_stiffness_matrix(this, rule) result(rst)

    Computes the element stiffness matrix in the global coordinate system. The local stiffness matrix is where is the drilling-rotation operator. The global matrix is .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    integer(kind=int32), intent(in), optional :: rule

    The integration rule. This argument is unused and is present for interface compatibility; the element uses the quadrature defined by its integration_rule routine.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The 6N-by-6N stiffness matrix, where N is the number of nodes.

procedure, public :: strain => shl_strain

  • private pure function shl_strain(this, displacement, s) result(rst)

    Computes the generalized strain vector, in the local coordinate system, at the specified natural coordinate. The components are ordered as .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: displacement

    The 6N-element displacement vector in the global coordinate system, where N is the number of nodes.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the strain.

    Return Value real(kind=real64), allocatable, dimension(:)

    The 8-element generalized strain vector.

procedure(element_matrix_function), public, deferred, pass :: strain_displacement_matrix

  • pure function element_matrix_function(this, s) result(rst) Prototype

    Defines the signature of a routine for returning a matrix associated with the element.

    Arguments

    Type IntentOptional Attributes Name
    class(element), intent(in) :: this

    The element object.

    real(kind=real64), intent(in), dimension(:) :: s

    The value of the natural coordinates at which the matrix should be evaluated.

    Return Value real(kind=real64), allocatable, dimension(:,:)

    The resulting matrix.

procedure, public :: stress => shl_stress

  • private pure function shl_stress(this, displacement, s) result(rst)

    Computes the stress-resultant vector, in the local coordinate system, at the specified natural coordinate. The components are ordered as . The surface stresses may be recovered as .

    Arguments

    Type IntentOptional Attributes Name
    class(shell_element), intent(in) :: this

    The shell_element object.

    real(kind=real64), intent(in), dimension(:) :: displacement

    The 6N-element displacement vector in the global coordinate system, where N is the number of nodes.

    real(kind=real64), intent(in), dimension(:) :: s

    The natural coordinates at which to evaluate the stress resultants.

    Return Value real(kind=real64), allocatable, dimension(:)

    The 8-element stress-resultant vector.