m_MEF90_Elements Module



Variables

Type Visibility Attributes Name Initial
character(kind=c_char, len=MEF90MXSTRLEN), public, parameter, dimension(4) :: MEF90ElementFamily = ["Lagrange           ", "MEF90ElementFamily ", "prefix_            ", c_null_char//"                  "]
character(len=MEF90MXSTRLEN), protected, dimension(4) :: MEF90ElementFamilyList
type(MEF90ElementType), public, parameter :: MEF90P0Lagrange2D = MEF90ElementType("MEF90P0Lagrange2D", [0, 0, 1, 0], 1, 2, 0, 0)

P0 pseudo-elements. These are used for creating sections only

type(MEF90ElementType), public, parameter :: MEF90P0Lagrange2DBoundary = MEF90ElementType("MEF90P0Lagrange2DBoundary", [0, 1, 0, 0], 1, 2, 0, 0)
type(MEF90ElementType), public, parameter :: MEF90P0Lagrange3D = MEF90ElementType("MEF90P0Lagrange3D", [0, 0, 0, 1], 1, 3, 0, 0)
type(MEF90ElementType), public, parameter :: MEF90P0Lagrange3DBoundary = MEF90ElementType("MEF90P0Lagrange3DBoundary", [0, 0, 1, 0], 1, 3, 0, 0)
type(MEF90ElementType), public, parameter :: MEF90P1Lagrange2D = MEF90ElementType("MEF90P1Lagrange2D", [1, 0, 0, 0], 3, 2, 0, 1)

P1 Simplicial Lagrange elements

type(MEF90ElementType), public, parameter :: MEF90P1Lagrange2DBoundary = MEF90ElementType("MEF90P1Lagrange2DBoundary", [1, 0, 0, 0], 2, 2, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90P1Lagrange3D = MEF90ElementType("MEF90P1Lagrange3D", [1, 0, 0, 0], 4, 3, 0, 1)
type(MEF90ElementType), public, parameter :: MEF90P1Lagrange3DBoundary = MEF90ElementType("MEF90P1Lagrange3DBoundary", [1, 0, 0, 0], 3, 3, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90P2Lagrange2D = MEF90ElementType("MEF90P2Lagrange2D", [1, 1, 0, 0], 6, 2, 0, 2)

P2 Simplicial Lagrange elements

type(MEF90ElementType), public, parameter :: MEF90P2Lagrange2DBoundary = MEF90ElementType("MEF90P2Lagrange2DBoundary", [1, 1, 0, 0], 3, 2, 1, 2)
type(MEF90ElementType), public, parameter :: MEF90P2Lagrange3D = MEF90ElementType("MEF90P2Lagrange3D", [1, 1, 0, 0], 10, 3, 0, 2)
type(MEF90ElementType), public, parameter :: MEF90P2Lagrange3DBoundary = MEF90ElementType("MEF90P2Lagrange3DBoundary", [1, 1, 0, 0], 6, 3, 1, 2)
type(MEF90ElementType), public, parameter :: MEF90Q1Lagrange2D = MEF90ElementType("MEF90Q1Lagrange2D", [1, 0, 0, 0], 4, 2, 0, 1)

Q1 tensor product Lagrange elements

type(MEF90ElementType), public, parameter :: MEF90Q1Lagrange2DBoundary = MEF90ElementType("MEF90Q1Lagrange2DBoundary", [1, 0, 0, 0], 2, 2, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90Q1Lagrange3D = MEF90ElementType("MEF90Q1Lagrange3D", [1, 0, 0, 0], 8, 3, 0, 1)
type(MEF90ElementType), public, parameter :: MEF90Q1Lagrange3DBoundary = MEF90ElementType("MEF90Q1Lagrange3DBoundary", [1, 0, 0, 0], 4, 3, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90Q2Lagrange2D = MEF90ElementType("MEF90Q2Lagrange2D", [1, 1, 0, 1], 9, 2, 0, 1)

Q2 tensor product Lagrange elements

type(MEF90ElementType), public, parameter :: MEF90Q2Lagrange2DBoundary = MEF90ElementType("MEF90Q2Lagrange2DBoundary", [1, 1, 0, 0], 3, 2, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90Q2Lagrange3D = MEF90ElementType("MEF90Q2Lagrange3D", [1, 1, 1, 1], 27, 3, 0, 1)
type(MEF90ElementType), public, parameter :: MEF90Q2Lagrange3DBoundary = MEF90ElementType("MEF90Q2Lagrange3DBoundary", [1, 1, 0, 1], 9, 3, 1, 1)
type(MEF90ElementType), public, parameter :: MEF90_NULL_ELEMENT = MEF90ElementType("NULL", [0, 0, 0, 0], 0, 0, 0, 0)

Enumerations

enum, bind(c)

Enumerators

enumerator:: MEF90ElementFamilyLagrange = 0

Interfaces

public interface MEF90ElementCreate

  • public subroutine Element2DScalInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

    Author
    Blaise Bourdin (2014-2022, bourdin@lsu.edu) Blaise Bourdin (2022, bourdin@mcmaster.ca)

    Element2DScalInitSet:

    Arguments

    Type IntentOptional Attributes Name
    type(tDM), intent(in) :: dm
    type(tIS), intent(in) :: cellIS
    type(MEF90Element2DScal), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
    type(MEF90ElementType), intent(in) :: elemType
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element2DVectInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(tDM), intent(in) :: dm
    type(tIS), intent(in) :: cellIS
    type(MEF90Element2DVect), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
    type(MEF90ElementType), intent(in) :: elemType
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DScalInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(tDM), intent(in) :: dm
    type(tIS), intent(in) :: cellIS
    type(MEF90Element3DScal), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
    type(MEF90ElementType), intent(in) :: elemType
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DVectInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(tDM), intent(in) :: dm
    type(tIS), intent(in) :: cellIS
    type(MEF90Element3DVect), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
    type(MEF90ElementType), intent(in) :: elemType
    integer(kind=C_INT32_T), intent(out) :: ierr

public interface MEF90ElementDestroy

  • public subroutine Element2DScalDestroy(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element2DScal), intent(inout) :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element2DVectDestroy(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element2DVect), intent(inout) :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DScalDestroy(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element3DScal), intent(inout) :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DVectDestroy(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element3DVect), intent(inout) :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element2DScalDestroySet(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element2DScal), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element2DVectDestroySet(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element2DVect), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DScalDestroySet(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element3DScal), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr
  • public subroutine Element3DVectDestroySet(dElem, ierr)

    Arguments

    Type IntentOptional Attributes Name
    type(MEF90Element3DVect), dimension(:), pointer :: dElem
    integer(kind=C_INT32_T), intent(out) :: ierr

Derived Types

type, public ::  MEF90Element2DScal

Components

Type Visibility Attributes Name Initial
real(kind=C_DOUBLE), public, dimension(:, :), pointer :: BF => null()
real(kind=C_DOUBLE), public, dimension(:), pointer :: Gauss_C => null()
type(Vect2D), public, dimension(:, :), pointer :: Grad_BF => null()
type(Vect2D), public :: outerNormal

type, public ::  MEF90Element2DVect

Components

Type Visibility Attributes Name Initial
type(Vect2D), public, dimension(:, :), pointer :: BF => null()
real(kind=C_DOUBLE), public, dimension(:), pointer :: Gauss_C => null()
type(MatS2D), public, dimension(:, :), pointer :: GradS_BF => null()
type(Mat2D), public, dimension(:, :), pointer :: Grad_BF => null()
type(Vect2D), public :: outerNormal

type, public ::  MEF90Element3DScal

Components

Type Visibility Attributes Name Initial
real(kind=C_DOUBLE), public, dimension(:, :), pointer :: BF => null()
real(kind=C_DOUBLE), public, dimension(:), pointer :: Gauss_C => null()
type(Vect3D), public, dimension(:, :), pointer :: Grad_BF => null()
type(Vect3D), public :: outerNormal

type, public ::  MEF90Element3DVect

Components

Type Visibility Attributes Name Initial
type(Vect3D), public, dimension(:, :), pointer :: BF => null()
real(kind=C_DOUBLE), public, dimension(:), pointer :: Gauss_C => null()
type(MatS3D), public, dimension(:, :), pointer :: GradS_BF => null()
type(Mat3D), public, dimension(:, :), pointer :: Grad_BF => null()
type(Vect3D), public :: outerNormal

type, public ::  MEF90ElementType

Components

Type Visibility Attributes Name Initial
character(len=MEF90MXSTRLEN), public :: Name
integer(kind=C_INT32_T), public :: coDim

The dimension of the cell associated with the element

integer(kind=C_INT32_T), public :: dim

numDof = numVertexDof * numVertex + numEdgeDof * numEdge + numFaceDof * numFace + numCellDof

integer(kind=C_INT32_T), public :: numDoF
integer(kind=C_INT32_T), public, dimension(4) :: numDofs

Number of dof at each vertex edge face cell in 3D, vertex edge cell in 2D (last value is unused, i.e. always use depth to locate DoF) i.e. point depth -1

integer(kind=C_INT32_T), public :: order

The co-dimension of the cell associated with the element


Subroutines

public subroutine Element2DScalDestroy(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DScal), intent(inout) :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element2DScalDestroySet(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DScal), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element2DScalInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

Author
Blaise Bourdin (2014-2022, bourdin@lsu.edu) Blaise Bourdin (2022, bourdin@mcmaster.ca)

Element2DScalInitSet:

Arguments

Type IntentOptional Attributes Name
type(tDM), intent(in) :: dm
type(tIS), intent(in) :: cellIS
type(MEF90Element2DScal), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
type(MEF90ElementType), intent(in) :: elemType
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element2DVectDestroy(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DVect), intent(inout) :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element2DVectDestroySet(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DVect), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element2DVectInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

Arguments

Type IntentOptional Attributes Name
type(tDM), intent(in) :: dm
type(tIS), intent(in) :: cellIS
type(MEF90Element2DVect), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
type(MEF90ElementType), intent(in) :: elemType
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DScalDestroy(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DScal), intent(inout) :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DScalDestroySet(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DScal), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DScalInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

Arguments

Type IntentOptional Attributes Name
type(tDM), intent(in) :: dm
type(tIS), intent(in) :: cellIS
type(MEF90Element3DScal), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
type(MEF90ElementType), intent(in) :: elemType
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DVectDestroy(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DVect), intent(inout) :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DVectDestroySet(dElem, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DVect), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine Element3DVectInitSet(dm, cellIS, dElem, dQuadratureOrder, elemType, ierr)

Arguments

Type IntentOptional Attributes Name
type(tDM), intent(in) :: dm
type(tIS), intent(in) :: cellIS
type(MEF90Element3DVect), dimension(:), pointer :: dElem
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
type(MEF90ElementType), intent(in) :: elemType
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange2DBoundaryScalInit(dElem, l, outerNormal, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DScal), intent(inout) :: dElem
real(kind=C_DOUBLE), intent(in) :: l
type(Vect2D), intent(in) :: outerNormal
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange2DBoundaryVectInit(dElem, length, outerNormal, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DVect), intent(inout) :: dElem
real(kind=C_DOUBLE), intent(in) :: length
type(Vect2D), intent(in) :: outerNormal
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange2DScalInit(dElem, Bt, DetBinv, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DScal), intent(inout) :: dElem
type(Mat2D), intent(in) :: Bt
real(kind=C_DOUBLE), intent(in) :: DetBinv
integer(kind=C_INT32_T) :: dPolynomialOrder
integer(kind=C_INT32_T) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange2DVectInit(dElem, Bt, DetBinv, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element2DVect), intent(inout) :: dElem
type(Mat2D), intent(in) :: Bt
real(kind=C_DOUBLE), intent(in) :: DetBinv
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange3DBoundaryScalInit(dElem, area, outerNormal, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DScal), intent(inout) :: dElem
real(kind=C_DOUBLE), intent(in) :: area
type(Vect3D), intent(in) :: outerNormal
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange3DBoundaryVectInit(dElem, area, outerNormal, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DVect), intent(inout) :: dElem
real(kind=C_DOUBLE), intent(in) :: area
type(Vect3D), intent(in) :: outerNormal
integer(kind=C_INT32_T) :: dPolynomialOrder
integer(kind=C_INT32_T) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange3DScalInit(dElem, Bt, DetBinv, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DScal), intent(inout) :: dElem
type(Mat3D), intent(in) :: Bt
real(kind=C_DOUBLE), intent(in) :: DetBinv
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine ElementPLagrange3DVectInit(dElem, Bt, detBinv, dPolynomialOrder, dQuadratureOrder, ierr)

Arguments

Type IntentOptional Attributes Name
type(MEF90Element3DVect), intent(inout) :: dElem
type(Mat3D), intent(in) :: Bt
real(kind=C_DOUBLE), intent(in) :: detBinv
integer(kind=C_INT32_T), intent(in) :: dPolynomialOrder
integer(kind=C_INT32_T), intent(in) :: dQuadratureOrder
integer(kind=C_INT32_T), intent(out) :: ierr

public subroutine MEF90ElementGetType(elemFamily, order, cellType, elemType, ierr)

Author
Blaise Bourdin (2022, bourdin@mcmaster.ca)

MEF90ElementGetType: Return an element given a family and order

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT32_T), intent(in) :: elemFamily
integer(kind=C_INT32_T), intent(in) :: order
type(eDMPolytopeType), intent(in) :: cellType
type(MEF90ElementType), intent(out) :: elemType
integer(kind=C_INT32_T), intent(inout) :: ierr

public subroutine MEF90ElementGetTypeBoundary(elemFamily, order, cellType, elemType, ierr)

Author
Blaise Bourdin (2022, bourdin@mcmaster.ca)

MEF90ElementGetTypeBoundary: Return an element given a family and order

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT32_T), intent(in) :: elemFamily
integer(kind=C_INT32_T), intent(in) :: order
type(eDMPolytopeType), intent(in) :: cellType
type(MEF90ElementType), intent(out) :: elemType
integer(kind=C_INT32_T), intent(inout) :: ierr

public subroutine MEF90ElementsInitialize_Private(ierr)

Author
Blaise Bourdin (2022, bourdin@mcmaster.ca)

MEF90ElementsInitialize_Private:

Arguments

Type IntentOptional Attributes Name
integer(kind=C_INT32_T), intent(out) :: ierr