dynamics_structural Module



Contents


Variables

Type Visibility Attributes Name Initial
integer(kind=int32), public, parameter :: DYN_FOUR_POINT_INTEGRATION_RULE = 4

Defines a four-point integration rule.

integer(kind=int32), public, parameter :: DYN_ONE_POINT_INTEGRATION_RULE = 1

Defines a single-point integration rule.

integer(kind=int32), public, parameter :: DYN_THREE_POINT_INTEGRATION_RULE = 3

Defines a three-point integration rule.

integer(kind=int32), public, parameter :: DYN_TWO_POINT_INTEGRATION_RULE = 2

Defines a two-point integration rule.


Interfaces

public interface apply_boundary_conditions

  • private function apply_boundary_conditions_mtx(gdof, x) result(rst)

    Applies boundary conditions to a matrix by removal of the appropriate rows and columns.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(inout), dimension(:) :: gdof

    An array of the global degrees of freedom to restrain. The array is sorted into ascending order on output.

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

    The matrix to constrain.

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

    The altered matrix.

  • private function apply_boundary_conditions_vec(gdof, x) result(rst)

    Applies boundary conditions to a vector by removal of the appropriate items.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(inout), dimension(:) :: gdof

    An array of the global degrees of freedom to restrain. The array is sorted into ascending order on output.

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

    The vector to constrain.

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

    The altered vector.

  • private function apply_boundary_conditions_csr(gdof, x) result(rst)

    Applies boundary conditions to a CSR-format sparse matrix by removal of the appropriate rows and columns.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(inout), dimension(:) :: gdof

    An array of the global degrees of freedom to restrain. The array is sorted into ascending order on output.

    type(csr_matrix), intent(in) :: x

    The matrix to constrain.

    Return Value type(csr_matrix)

    The altered matrix.

  • private subroutine apply_displacement_constraint_dense(dof, val, k, f)

    Applies a displacement constraint to the specified degree of freedom.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: dof

    The global degree-of-freedom to which the constraint should be applied.

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

    The value of the displacement constraint.

    real(kind=real64), intent(inout), dimension(:,:) :: k

    The stiffness matrix to which the constraint should be applied.

    real(kind=real64), intent(inout), dimension(:) :: f

    The external force vector to which the constraint should be applied.

  • private subroutine apply_displacement_constraint_csr(dof, val, k, f)

    Applies a displacement constraint to a CSR-format sparse matrix.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: dof

    The global degree-of-freedom to which the constraint should be applied.

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

    The value of the displacement constraint.

    type(csr_matrix), intent(inout) :: k

    The stiffness matrix to which the constraint should be applied.

    real(kind=real64), intent(inout), dimension(:) :: f

    The external force vector to which the constraint should be applied.

public interface assemble_dynamic_system

  • private subroutine assemble_dynamic_system_dense(gdof, elements, nodes, m, k, rule)

    Assembles dense global mass and stiffness matrices.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(element), intent(in) :: elements(:)

    The finite elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    real(kind=real64), intent(out), allocatable :: m(:,:)

    The assembled global mass matrix.

    real(kind=real64), intent(out), allocatable :: k(:,:)

    The assembled global stiffness matrix.

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

    The numerical integration rule.

  • private subroutine assemble_dynamic_system_csr(gdof, elements, nodes, m, k, rule)

    Assembles global mass and stiffness matrices in CSR format.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(element), intent(in) :: elements(:)

    The finite elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    type(csr_matrix), intent(out) :: m

    The assembled global mass matrix in CSR format.

    type(csr_matrix), intent(out) :: k

    The assembled global stiffness matrix in CSR format.

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

    The numerical integration rule.

public interface assemble_static_system

  • private subroutine assemble_static_system_dense(gdof, elements, nodes, k, rule)

    Assembles a dense global stiffness matrix.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(element), intent(in) :: elements(:)

    The finite elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    real(kind=real64), intent(out), allocatable :: k(:,:)

    The assembled global stiffness matrix.

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

    The numerical integration rule.

  • private subroutine assemble_static_system_csr(gdof, elements, nodes, k, rule)

    Assembles the global stiffness matrix in CSR format.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: gdof

    The total number of global degrees of freedom.

    class(element), intent(in) :: elements(:)

    The finite elements to assemble.

    class(node), intent(in), dimension(:) :: nodes

    The global node list.

    type(csr_matrix), intent(out) :: k

    The assembled global stiffness matrix in CSR format.

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

    The numerical integration rule.

public interface material

  • private pure function mat_init(modulus, pratio, density) result(rst)

    Constructs a new [[material]].

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in) :: modulus

    The modulus of elasticity.

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

    The Poisson's ratio.

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

    The density.

    Return Value type(material)

    The new [[material]].

public interface node

  • private pure function nd_init_1(index, dof, x, y, z) result(rst)

    Constructs a new [[node]].

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: index

    The global index of the node.

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

    The number of degrees of freedom of the node.

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

    The x-coordinate.

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

    The y-coordinate.

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

    The z-coordinate.

    Return Value type(node)

    The new [[node]].

  • private pure function nd_init_2(index, dof, pt) result(rst)

    Constructs a new [[node]].

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: index

    The global index of the node.

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

    The number of degrees of freedom of the node.

    class(point), intent(in) :: pt

    The location of the node.

    Return Value type(node)

    The new [[node]].

public interface restore_constrained_values

  • private function restore_constrained_values_dense(gdof, x) result(rst)

    Restores the constrained degrees-of-freedom from the boundary conditions applied by apply_boundary_conditions.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(inout), dimension(:) :: gdof

    An array of the global degrees of freedom to restrain. The array is sorted into ascending order on output.

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

    The constrained vector.

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

    The altered vector.

  • private function restore_constrained_values_csr(gdof, x) result(rst)

    Restores constrained rows and columns to a reduced CSR matrix.

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(inout), dimension(:) :: gdof

    An array of the global degrees of freedom to restrain. The array is sorted into ascending order on output.

    type(csr_matrix), intent(in) :: x

    The reduced CSR matrix.

    Return Value type(csr_matrix)

    The expanded CSR matrix with zero constrained rows and columns.

public interface solve_static_system

  • private pure function solve_static_system_dense(K, F) result(rst)

    Solves the static system .

    Arguments

    Type IntentOptional Attributes Name
    real(kind=real64), intent(in), dimension(:,:) :: K

    The N-by-N stiffness matrix.

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

    The N-element external forcing vector.

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

    The N-element solution vector.

  • private pure function solve_static_system_csr(K, F) result(rst)

    Solves the static system .

    Arguments

    Type IntentOptional Attributes Name
    type(csr_matrix), intent(in) :: K

    The N-by-N stiffness matrix.

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

    The N-element external forcing vector.

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

    The N-element solution vector.


Derived Types

type, public ::  element

Defines an element.

Components

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

The material.

Type-Bound Procedures

procedure (element_const_matrix_function) , public , pass :: constitutive_matrix
procedure (element_shape_function) , public , pass :: evaluate_shape_function
procedure , public :: external_force_vector => e_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure (element_query) , public , pass :: get_dof_per_node
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 (element_matrix_function) , public , pass :: jacobian
procedure , public :: mass_matrix => e_mass_matrix Function
procedure (element_matrix_function) , public , pass :: shape_function_matrix
procedure , public :: stiffness_matrix => e_stiffness_matrix Function
procedure , public :: strain => e_strain Function
procedure (element_matrix_function) , public , pass :: strain_displacement_matrix
procedure , public :: stress => e_stress Function

type, public, extends(element) ::  line_element

Defines a line element type.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: area

The element cross-sectional area.

type(material), public :: material

The material.

Type-Bound Procedures

procedure (element_const_matrix_function) , public , pass :: constitutive_matrix
procedure (element_shape_function) , public , pass :: evaluate_shape_function
procedure , public :: external_force_vector => le_ext_force_vector Function
procedure (element_query) , public , pass :: get_dimensionality
procedure (element_query) , public , pass :: get_dof_per_node
procedure (element_get_node) , public , pass :: get_node
procedure (element_query) , public , pass :: get_node_count
procedure , public :: get_node_natural_coordinates => le_get_node_natural_coordinates Function
procedure (line_element_get_terminal) , public , pass :: get_terminal_nodes
procedure (element_matrix_function) , public , pass :: jacobian
procedure , public :: length => le_length Function
procedure , public :: mass_matrix => le_mass_matrix Function
procedure (line_element_const_matrix_function) , public , pass :: rotation_matrix
procedure (element_matrix_function) , public , pass :: shape_function_matrix
procedure , public :: stiffness_matrix => le_stiffness_matrix Function
procedure , public :: strain => le_strain Function
procedure (element_matrix_function) , public , pass :: strain_displacement_matrix
procedure , public :: stress => le_stress Function

type, public ::  material

Defines a linear-elastic-isotropic material.

Components

Type Visibility Attributes Name Initial
real(kind=real64), public :: density

The density of the material.

real(kind=real64), public :: modulus

The modulus of elasticity of the material.

real(kind=real64), public :: poissons_ratio

The Poisson's ratio of the material.

Constructor

private pure function mat_init (modulus, pratio, density)

Constructs a new [[material]].

type, public, extends(point) ::  node

Defines a node.

Components

Type Visibility Attributes Name Initial
integer(kind=int32), public :: dof

The number of degrees of freeedom associated with this node.

integer(kind=int32), public :: index

The global index of the node.

real(kind=real64), public :: x

The x-coordinate.

real(kind=real64), public :: y

The y-coordinate.

real(kind=real64), public :: z

The z-coordinate.

Constructor

private pure function nd_init_1 (index, dof, x, y, z)

Constructs a new [[node]].

private pure function nd_init_2 (index, dof, pt)

Constructs a new [[node]].


Functions

public function create_connectivity_matrix(gdof, e, nodes) result(rst)

Creates a connectivity matrix for the element, stored in CSR format. The matrix contains exactly one non-zero (unity) entry per row; therefore, it is well-suited to a sparse representation.

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: gdof

The number of global degrees of freedom.

class(element), intent(in) :: e

The element.

class(node), intent(in), dimension(:) :: nodes

The global node list.

Return Value type(csr_matrix)

The resulting matrix.

public function nodally_averaged_strain(elements, nodes, displacement) result(rst)

Computes nodal strain results by averaging the strain contributions from each element incident upon a node.

Arguments

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

The finite elements in the model.

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

The global node list defining the displacement-vector ordering.

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

The global displacement vector.

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

The strain results. Each column corresponds to a node in NODES, and each row corresponds to one strain component.

public function nodally_averaged_stress(elements, nodes, displacement) result(rst)

Computes nodal stress results by averaging the stress contributions from each element incident upon a node.

Arguments

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

The finite elements in the model.

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

The global node list defining the displacement-vector ordering.

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

The global displacement vector.

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

The stress results. Each column corresponds to a node in NODES, and each row corresponds to one stress component.

public pure function shape_function_derivative(index, elem, s, i) result(rst)

Computes the derivative of the shape function with respect to the natural coordinate specified. The derivative is approximated centrally as The second derivative uses the centered finite difference

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: index

The index of the shape function to evaluate.

class(element), intent(in) :: elem

The element object.

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

The natural coordinate at which to evaluate the derivative.

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

The index of the natural coordinate to with which the derivative is to be computed.

Return Value real(kind=real64)

The result.

public pure function shape_function_second_derivative(index, elem, s, i) result(rst)

Computes the second derivative of the shape function with respect to the natural coordinate specified.

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: index

The index of the shape function to evaluate.

class(element), intent(in) :: elem

The element object.

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

The natural coordinate at which to evaluate the derivative.

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

The index of the natural coordinate to with which the derivative is to be computed.

Return Value real(kind=real64)

The result.