discrete_element Derived Type

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

Defines a discrete (lumped-parameter) element. Discrete elements have no spatial extent; therefore, the stiffness, mass, and damping matrices default to zero and are overridden only where the element contributes to the system. The inherited material is unused.


Contents


Components

Type Visibility Attributes Name Initial
type(material), public :: material

The material.


Type-Bound Procedures

procedure(element_const_matrix_function), public, deferred, pass :: constitutive_matrix

  • pure function element_const_matrix_function(this) 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.

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

    The resulting matrix.

procedure, public :: damping_matrix => de_damping_matrix

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

    Returns the element damping matrix. The default implementation returns a zero-valued matrix.

    Arguments

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

    The discrete_element object.

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

    The N-by-N damping matrix, where N is the total number of element degrees of freedom.

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 => de_ext_force_vector

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

    Returns the element external force vector. Discrete elements do not support distributed loads; therefore, a zero-valued vector is returned. Concentrated loads should be applied directly to the global force vector.

    Arguments

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

    The discrete_element object.

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

    The distributed load vector. This argument is unused and is present for interface compatibility.

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

    The integration rule. This argument is unused and is present for interface compatibility.

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

    The N-element force vector, where N is the total number of element degrees of freedom.

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

  • 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_query), public, deferred, pass :: get_dof_per_node

  • 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), 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, public :: get_node_natural_coordinates => de_get_node_natural_coordinates

  • private pure function de_get_node_natural_coordinates(this, i) result(rst)

    Returns the natural coordinate of the requested node. A single-node element has its node at s = 0; a two-node element has its nodes at s = -1 and s = 1, respectively.

    Arguments

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

    The discrete_element object.

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

    The local index of the node.

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

    The natural coordinate of the node.

procedure, public :: jacobian => de_jacobian

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

    Returns the element Jacobian. Discrete elements have no spatial extent; therefore, a unit 1-by-1 Jacobian is returned.

    Arguments

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

    The discrete_element object.

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

    The natural coordinates at which to evaluate the Jacobian. This argument is unused and is present for interface compatibility.

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

    The 1-by-1 Jacobian matrix.

procedure, public :: mass_matrix => de_mass_matrix

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

    Returns the element mass matrix. The default implementation returns a zero-valued matrix.

    Arguments

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

    The discrete_element object.

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

    The integration rule. This argument is unused and is present for interface compatibility.

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

    The N-by-N mass matrix, where N is the total number of element degrees of freedom.

procedure(element_matrix_function), public, deferred, pass :: shape_function_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 :: stiffness_matrix => de_stiffness_matrix

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

    Returns the element stiffness matrix. The default implementation returns a zero-valued matrix.

    Arguments

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

    The discrete_element object.

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

    The integration rule. This argument is unused and is present for interface compatibility.

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

    The N-by-N stiffness matrix, where N is the total number of element degrees of freedom.

procedure, public :: strain => e_strain

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

    Computes the element strain at the specified natural coordinate. The strain is

    Arguments

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

    The element object.

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

    The element displacement vector in the element coordinate system.

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

    The natural coordinates at which to evaluate the strain.

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

    The resulting 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 => e_stress

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

    Computes the element stress result at the specified natural coordinate. The stress result is

    Arguments

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

    The element object.

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

    The element displacement vector in the element coordinate system.

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

    The natural coordinates at which to evaluate the stress.

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

    The resulting stress vector.