-
Notifications
You must be signed in to change notification settings - Fork 116
Vector valued basis functions roadmap
Tim Greaves edited this page Jun 18, 2014
·
1 revision
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
Need version of transform elements that computes derivatives of vector-valued basis functions
(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
- 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.
- 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.
- 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.
- Do we create a new field type for div-conforming fields, or add things to existing field types?