Defines a 2D linear, axial spring element with x and y translations at each node.
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=real64), | public, | dimension(3) | :: | direction | = | 0.0d0 |
The unit vector defining the user-supplied element axis. Only the leading components corresponding to the element dimensionality are used. This value is used only if use_direction is true. |
| type(material), | public | :: | material |
The material. |
|||
| type(node), | public | :: | node_1 |
The first node of the element (s = -1). |
|||
| type(node), | public | :: | node_2 |
The second node of the element (s = 1). |
|||
| real(kind=real64), | public | :: | stiffness |
The spring stiffness. |
|||
| logical, | public | :: | use_direction | = | .false. |
True if the element axis is defined by direction; else, false if the axis is defined by the vector from node 1 to node 2. |
Initializes a new [[spring_element_2d]].
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| real(kind=real64), | intent(in) | :: | k |
The spring stiffness. |
||
| class(node), | intent(in) | :: | nd1 |
The first node of the element. |
||
| class(node), | intent(in) | :: | nd2 |
The second node of the element. |
||
| real(kind=real64), | intent(in), | optional, | dimension(:) | :: | direction |
An optional 2-element vector defining the spring axis. The vector must be non-zero and is normalized internally. If not supplied, the axis is defined by the vector from node 1 to node 2, in which case the nodes must not be coincident. |
The new [[spring_element_2d]].
Gets the unit vector defining the element axis in the global coordinate system.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
The D-element unit vector, where D is the element dimensionality.
Returns the matrix relating spring elongation to spring force.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(spring_element), | intent(in) | :: | this |
The spring_element object. |
The 1-by-1 matrix containing the spring stiffness.
Returns the element damping matrix. The default implementation returns a zero-valued matrix.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(discrete_element), | intent(in) | :: | this |
The discrete_element object. |
The N-by-N damping matrix, where N is the total number of element degrees of freedom.
Evaluates the i-th linear shape function
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The index of the shape function to evaluate. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinate at which to evaluate the shape function. |
The value of the i-th shape function at s.
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.
| Type | Intent | Optional | 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. |
The N-element force vector, where N is the total number of element degrees of freedom.
Gets the dimensionality of the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(spring_element_2d), | intent(in) | :: | this |
The spring_element_2d object. |
The dimensionality.
Gets the number of degrees of freedom per node. This is equal to the element dimensionality as only translations are considered.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
The number of DOF per node.
Gets the requested node from the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The local index of the node to retrieve. This value must be either 1 or 2. |
The requested node.
Gets the number of nodes for the element.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
The number of nodes.
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.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(discrete_element), | intent(in) | :: | this |
The discrete_element object. |
||
| integer(kind=int32), | intent(in) | :: | i |
The local index of the node. |
The natural coordinate of the node.
Returns the element Jacobian. Discrete elements have no spatial extent; therefore, a unit 1-by-1 Jacobian is returned.
| Type | Intent | Optional | 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. |
The 1-by-1 Jacobian matrix.
Returns the element mass matrix. The default implementation returns a zero-valued matrix.
| Type | Intent | Optional | 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. |
The N-by-N mass matrix, where N is the total number of element degrees of freedom.
Computes the translational displacement interpolation matrix
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinate at which to evaluate the matrix. |
The D-by-2D shape function matrix, where D is the element dimensionality.
Computes the global spring stiffness matrix
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(spring_element), | intent(in) | :: | this |
The spring_element object. |
||
| integer(kind=int32), | intent(in), | optional | :: | rule |
The integration rule. This argument is unused as the stiffness matrix is exact. |
The 2D-by-2D global stiffness matrix, where D is the element dimensionality.
Computes the element strain at the specified natural coordinate. The strain is
| Type | Intent | Optional | 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. |
The resulting strain vector.
Computes the matrix relating global nodal displacements to the axial elongation of the element where is the unit element axis.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(two_node_discrete_element), | intent(in) | :: | this |
The two_node_discrete_element object. |
||
| real(kind=real64), | intent(in), | dimension(:) | :: | s |
The natural coordinate at which to evaluate the matrix. This argument is unused as the elongation is constant along the element. |
The 1-by-2D matrix, where D is the element dimensionality.
Computes the element stress result at the specified natural coordinate. The stress result is
| Type | Intent | Optional | 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. |
The resulting stress vector.