type, abstract :: abst_side
integer(int32), private :: id
integer(int32), private :: type ! Edge type
integer(int32), private :: num_nodes ! Number of nodes in the Edge
integer(int32), private :: group ! Group ID
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
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 !&
end type abst_side