Skip to content

Vector valued basis functions roadmap

Tim Greaves edited this page Jun 18, 2014 · 1 revision

vector_valued_element_data_type

 type vector_valued_element_type
     !!< Type to encode shape and quadrature information for an element.
     integer :: dim !! mesh dimension
     integer :: loc !! Number of nodes.
     integer :: ngi !! Number of gauss points.
     integer :: degree !! Maximum polynomial degree of basis functions.
     !! Polynomials defining shape functions and their derivatives.
     type(polynomial), dimension(:,:), pointer :: spoly=>null(), dspoly=>null()
     !! Shape functions: n is for the primitive function, dn
     !! n is loc x ngi x dim, divn is loc x ngi
     real, pointer :: n(:,:,:)=>null(), dn(:,:)=>null()
     !! Link back to the node numbering used for this element.
     type(ele_numbering_type), pointer :: numbering=>null()
     !! Link back to the quadrature used for this element.
     type(quadrature_type) :: quadrature
     type(refcount_type), pointer :: refcount=>null()
     !! Dummy name to satisfy reference counting
     character(len=0) :: name
 end type vector_valued_element_type

What functions subroutines are needed for vector-valued basis functions?

Transform elements

Need version of transform elements that computes derivatives of vector-valued basis functions

Bilinear forms

(don't need to be exhaustive, just point out the issues)

Here vv_shape is a vector_valued shape function, shape is a scalar.

Remember that divergence maps into pressure space, so shape_divshape is not required.

  • shape_shape(vv_shape,vv_shape)
  • shape_dshape(vv_shape,dm_t) and shape_dshape(shape,du_t) ) du_t is derivative

Coefficient and field values

  • ele_coeff(field, ele) (provides coefficients of basis functions in element)
  • ele_val(field, ele) (possibly not required)
  • ele_val_at_quad(field,ele)
  • ele_div_val_at_quad(field,ele)
  • ele_grad_val_at_quad(field,ele) *face_normal_val_at_quad(field,ele) *face_val_at_quad(field,ele) - note that this requires coefficients from throughout the element. One solution is to first compute the equivalent DG field coefficients in the element, and then call face_val_at_quad on that.

Global numbering

  • Need a function that returns global numbers for the coefficients. Do we abuse ele_nodes(field,ele) or make a new function?
  • face_normal_ele(field,ele) - returns global DOF for normal components on face. Needed for boundary conditions, and setting up the Lagrange multiplier equations for hybridization.

Local numbering

  • What do we need for this? Since the div-conforming elements are always best implemented by having a DG equivalent field and "hybridising/hybridizing", we will only need DG numbering.

Fields

  • Do we create a new field type for div-conforming fields, or add things to existing field types?
Clone this wiki locally