abst_element Derived Type

type, public, abstract :: abst_element


Inherits

type~~abst_element~~InheritsGraph type~abst_element abst_element type~type_dp_pointer type_dp_pointer type~abst_element->type~type_dp_pointer x, y, z

Inherited by

type~~abst_element~~InheritedByGraph type~abst_element abst_element type~holder_elements holder_elements type~holder_elements->type~abst_element e type~type_square_first type_square_first type~type_square_first->type~abst_element type~type_square_second type_square_second type~type_square_second->type~abst_element type~type_triangle_first type_triangle_first type~type_triangle_first->type~abst_element type~type_triangle_second type_triangle_second type~type_triangle_second->type~abst_element type~type_domain type_domain type~type_domain->type~holder_elements elements type~type_output_observation type_output_observation type~type_output_observation->type~holder_elements elements type~type_ftdss type_ftdss type~type_ftdss->type~type_domain domain type~type_output type_output type~type_ftdss->type~type_output output type~type_output->type~type_output_observation observations

Components

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

connectivity information

integer(kind=int32), public, allocatable :: connectivity_reordered(:)

reordered connectivity information

integer(kind=int32), private :: dimension
real(kind=real64), public, allocatable :: gauss(:,:)

Gauss Quadrature points Coordinate

procedure(abst_get_connectivity), public, pass(self), pointer :: get_connectivity => null()
integer(kind=int32), private :: group

Element group number

integer(kind=int32), private :: id

Element ID

procedure(abst_interpolate), public, pass(self), pointer :: interpolate => null()
integer(kind=int32), public :: num_gauss

Number of Gauss Quadrature points

integer(kind=int32), private :: num_nodes

Number of nodes in the element

integer(kind=int32), private :: order
integer(kind=int32), private :: type

Element type (5: triangle 1st, 9: square 1st)

real(kind=real64), public, allocatable :: weight(:)

Gauss weight

type(type_dp_pointer), public, allocatable :: x(:)

X coordinate

type(type_dp_pointer), public, allocatable :: y(:)

Y coordinate

type(type_dp_pointer), public, allocatable :: z(:)

Z coordinate


Type-Bound Procedures

procedure(abst_dpsi_deta), public, deferred, pass(self) :: dpsi_deta

  • function abst_dpsi_deta(self, i, xi, eta) result(dpsi) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    integer(kind=int32), intent(in) :: i
    real(kind=real64), intent(in) :: xi
    real(kind=real64), intent(in) :: eta

    Return Value real(kind=real64)

procedure(abst_dpsi_dxi), public, deferred, pass(self) :: dpsi_dxi

  • function abst_dpsi_dxi(self, i, xi, eta) result(dpsi) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    integer(kind=int32), intent(in) :: i
    real(kind=real64), intent(in) :: xi
    real(kind=real64), intent(in) :: eta

    Return Value real(kind=real64)

procedure(abst_get_dimension), public, deferred, pass(self) :: get_dimension

  • function abst_get_dimension(self) result(dimension) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_group), public, deferred, pass(self) :: get_group

  • function abst_get_group(self) result(group) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_id), public, deferred, pass(self) :: get_id

  • function abst_get_id(self) result(id) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_num_gauss), public, deferred, pass(self) :: get_num_gauss

  • function abst_get_num_gauss(self) result(num_gauss) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_num_nodes), public, deferred, pass(self) :: get_num_nodes

  • function abst_get_num_nodes(self) result(num_nodes) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_order), public, deferred, pass(self) :: get_order

  • function abst_get_order(self) result(order) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_get_type), public, deferred, pass(self) :: get_type

  • function abst_get_type(self) result(type) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self

    Return Value integer(kind=int32)

procedure(abst_is_inside), public, deferred, pass(self) :: is_inside

  • subroutine abst_is_inside(self, px, py, pxi, peta, is_in) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    real(kind=real64), intent(in) :: px
    real(kind=real64), intent(in) :: py
    real(kind=real64), intent(inout) :: pxi
    real(kind=real64), intent(inout) :: peta
    logical, intent(inout) :: is_in

procedure(abst_jacobian), public, deferred, pass(self) :: jacobian

  • function abst_jacobian(self, i, j, xi, eta) result(Jval) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    integer(kind=int32), intent(in) :: i
    integer(kind=int32), intent(in) :: j
    real(kind=real64), intent(in) :: xi
    real(kind=real64), intent(in) :: eta

    Return Value real(kind=real64)

procedure(abst_jacobian_det), public, deferred, pass(self) :: jacobian_det

  • function abst_jacobian_det(self, xi, eta) result(J_Det) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    real(kind=real64), intent(in) :: xi
    real(kind=real64), intent(in) :: eta

    Return Value real(kind=real64)

procedure(abst_psi), public, deferred, pass(self) :: psi

  • function abst_psi(self, i, xi, eta) result(psi) Prototype

    Arguments

    Type IntentOptional Attributes Name
    class(abst_element), intent(in) :: self
    integer(kind=int32), intent(in) :: i
    real(kind=real64), intent(in) :: xi
    real(kind=real64), intent(in) :: eta

    Return Value real(kind=real64)

Source Code

    type, abstract :: abst_element
        integer(int32), private :: id !! Element ID
        integer(int32), private :: type !! Element type (5: triangle 1st, 9: square 1st)
        integer(int32), private :: num_nodes !! Number of nodes in the element
        integer(int32), private :: group !! Element group number
        integer(int32), private :: dimension
        integer(int32), private :: order
        integer(int32), allocatable :: connectivity(:) !! connectivity information
        integer(int32), allocatable :: connectivity_reordered(:) !! reordered connectivity information
        type(type_dp_pointer), allocatable :: x(:) !! X coordinate
        type(type_dp_pointer), allocatable :: y(:) !! Y coordinate
        type(type_dp_pointer), allocatable :: z(:) !! Z coordinate
        !----------------------------------------------------------------------------------
        ! Gauss Quadrature points and weights
        !  - Gauss Quadrature points are defined in the local coordinate system
        !  - The number of Gauss points is determined by the element type
        !  - The weights are used for numerical integration over the element
        !  - The Gauss points are used to evaluate the shape functions and their derivatives
        !----------------------------------------------------------------------------------
        integer(int32) :: num_gauss !! Number of Gauss Quadrature points
        real(real64), allocatable :: weight(:) !! Gauss weight
        real(real64), allocatable :: gauss(:, :) !! Gauss Quadrature points Coordinate
        !----------------------------------------------------------------------------------
        ! Interpolation functions
        !----------------------------------------------------------------------------------
        procedure(abst_interpolate),      pass(self), pointer :: interpolate => null() !&
        procedure(abst_get_connectivity), pass(self), pointer :: get_connectivity => null() !&
    contains
        procedure(abst_get_id),        pass(self), deferred :: get_id !&
        procedure(abst_get_type),      pass(self), deferred :: get_type !&
        procedure(abst_get_num_nodes), pass(self), deferred :: get_num_nodes !&
        procedure(abst_get_group),     pass(self), deferred :: get_group !&
        procedure(abst_get_order),     pass(self), deferred :: get_order !&
        procedure(abst_get_dimension), pass(self), deferred :: get_dimension !&
        procedure(abst_get_num_gauss), pass(self), deferred :: get_num_gauss !&
        !----------------------------------------------------------------------------------
        procedure(abst_psi),           pass(self), deferred :: psi !&
        procedure(abst_dpsi_dxi),      pass(self), deferred :: dpsi_dxi !&
        procedure(abst_dpsi_deta),     pass(self), deferred :: dpsi_deta !&
        procedure(abst_jacobian),      pass(self), deferred :: jacobian !&
        procedure(abst_jacobian_det),  pass(self), deferred :: jacobian_det !&
        procedure(abst_is_inside),     pass(self), deferred :: is_inside !&
    end type abst_element