3 namespace basix::docstring
 
    6 const std::string topology = R
"( 
   13     List of topology (vertex indices) for each dimension (0..tdim) 
   16 const std::string geometry = R
"( 
   23     (0) Vertex point data of the cell and (1) the shape of the 
   24     data array. The points are stored in row-major format and the shape 
   28 const std::string sub_entity_connectivity = R
"( 
   29 Get the numbers of entities connected to each subentity of the cell. 
   31 Returns a vector of the form: output[dim][entity_n][connected_dim] = 
   32 [connected_entity_n0, connected_entity_n1, ...] This indicates that 
   33 the entity of dimension `dim` and number `entity_n` is connected to 
   34 the entities of dimension `connected_dim` and numbers 
   35 `connected_entity_n0`, `connected_entity_n1`, ... 
   41     List of topology (vertex indices) for each dimension (0..tdim) 
   44 const std::string sub_entity_geometry = R
"( 
   45 Sub-entity of a cell, given by topological dimension and index 
   48     celltype: The cell::type 
   49     dim: Dimension of sub-entity 
   50     index: Local index of sub-entity 
   53     Set of vertex points of the sub-entity. Shape is (npoints, gdim) 
   56 const std::string create_lattice__celltype_n_type_exterior = R
"( 
   57 Create a lattice of points on a reference cell optionally 
   58 including the outer surface points. 
   60 For a given `celltype`, this creates a set of points on a regular 
   61 grid which covers the cell, eg for a quadrilateral, with n=2, the 
   62 points are: `[0,0], [0.5,0], [1,0], [0,0.5], [0.5,0.5], [1,0.5], 
   63 [0,1], [0.5,1], [1,1]`. If the parameter exterior is set to false, 
   64 the points lying on the external boundary are omitted, in this case 
   65 for a quadrilateral with `n == 2`, the points are: `[0.5, 0.5]`. The 
   66 lattice type can be chosen as type::equispaced or type::gll. The 
   67 type::gll lattice has points spaced along each edge at the 
   68 Gauss-Lobatto-Legendre quadrature points. These are the same as 
   69 type::equispaced when `n < 3`. 
   72     celltype: The cell type 
   73     n: Size in each direction. There are `n + 1` points along each edge of the cell 
   75     exterior: If set, includes outer boundaries 
   78     Set of points. Shape is `(npoints, tdim)` and storage is 
   82 const std::string create_lattice__celltype_n_type_exterior_method = R
"( 
   83 Create a lattice of points on a reference cell optionally 
   84 including the outer surface points. 
   86 For a given `celltype`, this creates a set of points on a regular 
   87 grid which covers the cell, eg for a quadrilateral, with n=2, the 
   88 points are: `[0,0], [0.5,0], [1,0], [0,0.5], [0.5,0.5], [1,0.5], 
   89 [0,1], [0.5,1], [1,1]`. If the parameter exterior is set to false, 
   90 the points lying on the external boundary are omitted, in this case 
   91 for a quadrilateral with `n == 2`, the points are: `[0.5, 0.5]`. The 
   92 lattice type can be chosen as type::equispaced or type::gll. The 
   93 type::gll lattice has points spaced along each edge at the 
   94 Gauss-Lobatto-Legendre quadrature points. These are the same as 
   95 type::equispaced when `n < 3`. 
   98     celltype: The cell type 
   99     n: Size in each direction. There are `n + 1` points along each edge of the cell 
  101     exterior: If set, includes outer boundaries 
  102     simplex_method: The method used to generate points on simplices 
  105     Set of points. Shape is `(npoints, tdim)` and storage is 
  109 const std::string cell_volume = R
"( 
  110 Get the volume of a reference cell 
  113     cell_type: Type of cell 
  116     The volume of the cell 
  119 const std::string cell_facet_normals = R
"( 
  120 Get the normals to the facets of a reference cell oriented using the 
  121 low-to-high ordering of the facet 
  124     cell_type: Type of cell 
  127     The normals. Shape is (nfacets, gdim) 
  130 const std::string cell_facet_reference_volumes = R
"( 
  131 Get the reference volumes of the facets of a reference cell 
  134     cell_type: Type of cell 
  137     The volumes of the references associated with each facet 
  140 const std::string cell_facet_outward_normals = R
"( 
  141 Get the (outward) normals to the facets of a reference cell 
  144     cell_type: Type of cell 
  147     The outward normals. Shape is (nfacets, gdim) 
  150 const std::string cell_facet_orientations = R
"( 
  151 Get an array of bools indicating whether or not the facet normals are 
  155     cell_type: Type of cell 
  161 const std::string cell_facet_jacobians = R
"( 
  162 Get the jacobians of the facets of a reference cell 
  165     cell_type: Type of cell 
  168     The jacobians of the facets. Shape is (nfacets, gdim, gdim - 1) 
  171 const std::string FiniteElement__tabulate = R
"( 
  172 Compute basis values and derivatives at set of points. 
  174 NOTE: The version of `FiniteElement::tabulate` with the basis data 
  175 as an out argument should be preferred for repeated call where 
  176 performance is critical 
  179     nd: The order of derivatives, up to and including, to compute. Use 0 for the basis functions only. 
  180     x: The points at which to compute the basis functions. The shape of x is (number of points, geometric dimension). 
  183     The basis functions (and derivatives). The shape is 
  184     (derivative, point, basis fn index, value index). 
  185     - The first index is the derivative, with higher derivatives are 
  186     stored in triangular (2D) or tetrahedral (3D) ordering, ie for 
  187     the (x,y) derivatives in 2D: (0,0), (1,0), (0,1), (2,0), (1,1), 
  188     (0,2), (3,0)... The function basix::indexing::idx can be used to find the 
  189     appropriate derivative. 
  190     - The second index is the point index 
  191     - The third index is the basis function index 
  192     - The fourth index is the basis function component. Its has size 
  193     one for scalar basis functions. 
  196 const std::string FiniteElement__push_forward = R
"( 
  197 Map function values from the reference to a physical cell. This 
  198 function can perform the mapping for multiple points, grouped by 
  199 points that share a common Jacobian. 
  202     U: The function values on the reference. The indices are [Jacobian index, point index, components]. 
  203     J: The Jacobian of the mapping. The indices are [Jacobian index, J_i, J_j]. 
  204     detJ: The determinant of the Jacobian of the mapping. It has length `J.shape(0)` 
  205     K: The inverse of the Jacobian of the mapping. The indices are [Jacobian index, K_i, K_j]. 
  208     The function values on the cell. The indices are [Jacobian 
  209     index, point index, components]. 
  212 const std::string FiniteElement__pull_back = R
"( 
  213 Map function values from a physical cell to the reference 
  216     u: The function values on the cell 
  217     J: The Jacobian of the mapping 
  218     detJ: The determinant of the Jacobian of the mapping 
  219     K: The inverse of the Jacobian of the mapping 
  222     The function values on the reference. The indices are 
  223     [Jacobian index, point index, components]. 
  226 const std::string FiniteElement__apply_dof_transformation = R
"( 
  227 Apply DOF transformations to some data 
  229 NOTE: This function is designed to be called at runtime, so its 
  230 performance is critical. 
  234     block_size: The number of data points per DOF 
  235     cell_info: The permutation info for the cell 
  241 const std::string FiniteElement__apply_dof_transformation_to_transpose = R
"( 
  242 Apply DOF transformations to some transposed data 
  244 NOTE: This function is designed to be called at runtime, so its 
  245 performance is critical. 
  249     block_size: The number of data points per DOF 
  250     cell_info: The permutation info for the cell 
  256 const std::string FiniteElement__apply_inverse_transpose_dof_transformation
 
  258 Apply inverse transpose DOF transformations to some data 
  260 NOTE: This function is designed to be called at runtime, so its 
  261 performance is critical. 
  265     block_size: The number of data points per DOF 
  266     cell_info: The permutation info for the cell 
  272 const std::string FiniteElement__base_transformations = R
"( 
  273 Get the base transformations. 
  275 The base transformations represent the effect of rotating or reflecting 
  276 a subentity of the cell on the numbering and orientation of the DOFs. 
  277 This returns a list of matrices with one matrix for each subentity 
  278 permutation in the following order: 
  279 Reversing edge 0, reversing edge 1, ... 
  280 Rotate face 0, reflect face 0, rotate face 1, reflect face 1, ... 
  282 *Example: Order 3 Lagrange on a triangle* 
  284 This space has 10 dofs arranged like: 
  297 For this element, the base transformations are: 
  298 [Matrix swapping 3 and 4, 
  299 Matrix swapping 5 and 6, 
  300 Matrix swapping 7 and 8] 
  301 The first row shows the effect of reversing the diagonal edge. The 
  302 second row shows the effect of reversing the vertical edge. The third 
  303 row shows the effect of reversing the horizontal edge. 
  305 *Example: Order 1 Raviart-Thomas on a triangle* 
  307 This space has 3 dofs arranged like: 
  321 These DOFs are integrals of normal components over the edges: DOFs 0 and 2 
  322 are oriented inward, DOF 1 is oriented outwards. 
  323 For this element, the base transformation matrices are: 
  338 The first matrix reverses DOF 0 (as this is on the first edge). The second 
  339 matrix reverses DOF 1 (as this is on the second edge). The third matrix 
  340 reverses DOF 2 (as this is on the third edge). 
  342 *Example: DOFs on the face of Order 2 Nedelec first kind on a tetrahedron* 
  344 On a face of this tetrahedron, this space has two face tangent DOFs: 
  357 For these DOFs, the subblocks of the base transformation matrices are: 
  369     The base transformations for this element. The shape is 
  370     (ntranformations, ndofs, ndofs) 
  373 const std::string FiniteElement__entity_transformations = R
"( 
  374 Return the entity dof transformation matrices 
  377     The base transformations for this element. The shape is 
  378     (ntranformations, ndofs, ndofs) 
  381 const std::string FiniteElement__get_tensor_product_representation = R
"( 
  382 Get the tensor product representation of this element, or throw an 
  383 error if no such factorisation exists. 
  385 The tensor product representation will be a vector of tuples. Each 
  386 tuple contains a vector of finite elements, and a vector of 
  387 integers. The vector of finite elements gives the elements on an 
  388 interval that appear in the tensor product representation. The 
  389 vector of integers gives the permutation between the numbering of 
  390 the tensor product DOFs and the number of the DOFs of this Basix 
  394     The tensor product representation 
  398 Create a custom finite element 
  401     cell_type: The cell type 
  402     value_shape: The value shape of the element 
  403     wcoeffs: Matrices for the kth value index containing the expansion coefficients defining a polynomial basis spanning the polynomial space for this element. Shape is (dim(finite element polyset), dim(Legendre polynomials)) 
  404     x: Interpolation points. Indices are (tdim, entity index, point index, dim) 
  405     M: The interpolation matrices. Indices are (tdim, entity index, dof, vs, point_index, derivative) 
  406     interpolation_nderivs: The number of derivatives that need to be used during interpolation 
  407     map_type: The type of map to be used to map values from the reference to a cell 
  408     sobolev_space: The underlying Sobolev space for the element 
  409     discontinuous: Indicates whether or not this is the discontinuous version of the element 
  410     highest_complete_degree: The highest degree n such that a Lagrange (or vector Lagrange) element of degree n is a subspace of this element 
  411     highest_degree: The degree of a polynomial in this element's polyset 
  412     poly_type: The type of polyset to use for this element 
  415     A custom finite element 
  419     create_element__family_cell_degree_lvariant_dvariant_discontinuous_dof_ordering
 
  421 Create an element using a given Lagrange variant and a given DPC variant 
  424     family: The element family 
  425     cell: The reference cell type that the element is defined on 
  426     degree: The degree of the element 
  427     lvariant: The variant of Lagrange to use 
  428     dvariant: The variant of DPC to use 
  429     discontinuous: Indicates whether the element is discontinuous between cells points of the element. The discontinuous element will have the same DOFs, but they will all be associated with the interior of the cell. 
  430     dof_ordering: Ordering of dofs for ElementDofLayout 
  437 Compute a matrix that represents the interpolation between 
  440 If the two elements have the same value size, this function returns 
  441 the interpolation between them. 
  443 If element_from has value size 1 and element_to has value size > 1, 
  444 then this function returns a matrix to interpolate from a blocked 
  445 element_from (ie multiple copies of element_from) into element_to. 
  447 If element_to has value size 1 and element_from has value size > 1, 
  448 then this function returns a matrix that interpolates the components 
  449 of element_from into copies of element_to. 
  451 NOTE: If the elements have different value sizes and both are 
  452 greater than 1, this function throws a runtime error 
  454 In order to interpolate functions between finite element spaces on 
  455 arbitrary cells, the functions must be pulled back to the reference 
  456 element (this pull back includes applying DOF transformations). The 
  457 matrix that this function returns can then be applied, then the 
  458 result pushed forward to the cell. If element_from and element_to 
  459 have the same map type, then only the DOF transformations need to be 
  460 applied, as the pull back and push forward cancel each other out. 
  463     element_from: The element to interpolate from 
  464     element_to: The element to interpolate to 
  467     Matrix operator that maps the 'from' degrees-of-freedom to 
  468     the 'to' degrees-of-freedom. Shape is (ndofs(element_to), 
  472 const std::string tabulate_polynomial_set = R
"( 
  473 Tabulate the orthonormal polynomial basis, and derivatives, 
  474 at points on the reference cell. 
  476 All derivatives up to the given order are computed. If derivatives 
  477 are not required, use `n = 0`. For example, order `n = 2` for a 2D 
  478 cell, will compute the basis \f$\psi, d\psi/dx, d\psi/dy, d^2 
  479 \psi/dx^2, d^2\psi/dxdy, d^2\psi/dy^2\f$ in that order (0, 0), (1, 
  480 0), (0, 1), (2, 0), (1, 1), (0 ,2). 
  482 For an interval cell there are `nderiv + 1` derivatives, for a 2D 
  483 cell, there are `(nderiv + 1)(nderiv + 2)/2` derivatives, and in 3D, 
  484 there are `(nderiv + 1)(nderiv + 2)(nderiv + 3)/6`. The ordering is 
  485 'triangular' with the lower derivatives appearing first. 
  489     ptype: The polynomial type 
  491     n: Maximum derivative order. Use n = 0 for the basis only. 
  492     x: Points at which to evaluate the basis. The shape is (number of points, geometric dimension). 
  495     Polynomial sets, for each derivative, tabulated at points. 
  496     The shape is `(number of derivatives computed, number of points, 
  499     - The first index is the derivative. The first entry is the basis 
  500     itself. Derivatives are stored in triangular (2D) or tetrahedral 
  501     (3D) ordering, eg if `(p, q)` denotes `p` order derivative with 
  502     respect to `x` and `q` order derivative with respect to `y`, [0] -> 
  503     (0, 0), [1] -> (1, 0), [2] -> (0, 1), [3] -> (2, 0), [4] -> (1, 1), 
  504     [5] -> (0, 2), [6] -> (3, 0),... 
  505     The function basix::indexing::idx maps tuples `(p, q, r)` to the 
  508     - The second index is the point, with index `i` corresponding to the 
  509     point in row `i` of @p x. 
  511     - The third index is the basis function index. 
  512     TODO: Does the order for the third index need to be documented? 
  515 const std::string tabulate_polynomials = R
"( 
  516 Tabulate a set of polynomials. 
  519     polytype: Polynomial type 
  522     x: Points at which to evaluate the basis. The shape is (number of points, geometric dimension). 
  525     Polynomial sets, for each derivative, tabulated at points. 
  526     The shape is `(basis index, number of points)`. 
  529 const std::string polynomials_dim = R
"( 
  530 Dimension of a polynomial space. 
  533     polytype: The polynomial type 
  535     d: The polynomial degree 
  538     The number terms in the basis spanning a space of 
  539     polynomial degree @p d 
  542 const std::string make_quadrature__rule_celltype_polytype_m = R
"( 
  543 Make a quadrature rule on a reference cell 
  546     rule: Type of quadrature rule (or use quadrature::Default) 
  547     celltype: The cell type 
  548     polytype: The polyset type 
  549     m: Maximum degree of polynomial that this quadrature rule will integrate exactly 
  552     List of points and list of weights. The number of points 
  553     arrays has shape (num points, gdim) 
  556 const std::string index__p = R
"( 
  557 Compute trivial indexing in a 1D array (for completeness) 
  566 const std::string index__p_q = R
"( 
  567 Compute indexing in a 2D triangular array compressed into a 1D 
  568 array. This can be used to find the index of a derivative returned 
  569 by `FiniteElement::tabulate`. For instance to find d2N/dx2, use 
  570 `FiniteElement::tabulate(2, points)[idx(2, 0)];` 
  580 const std::string index__p_q_r = R
"( 
  581 Compute indexing in a 3D tetrahedral array compressed into a 1D 
  593 const std::string space_intersection = R
"( 
  594 Get the intersection of two Sobolev spaces. 
  601     Intersection of the spaces 
  604 const std::string superset = R
"( 
  605 Get the polyset types that is a superset of two types on the given 
  610     type1: The first polyset type 
  611     type2: The second polyset type 
  617 const std::string restriction = R
"( 
  618 Get the polyset type that represents the restrictions of a type on a 
  622     ptype: The polyset type 
  624     restriction_cell: The cell type of the subentity 
  627     The restricted polyset type 
FiniteElement< T > create_custom_element(cell::type cell_type, const std::vector< std::size_t > &value_shape, impl::mdspan_t< const T, 2 > wcoeffs, const std::array< std::vector< impl::mdspan_t< const T, 2 >>, 4 > &x, const std::array< std::vector< impl::mdspan_t< const T, 4 >>, 4 > &M, int interpolation_nderivs, maps::type map_type, sobolev::space sobolev_space, bool discontinuous, int highest_complete_degree, int highest_degree, polyset::type poly_type)
Definition: finite-element.cpp:418
std::pair< std::vector< T >, std::array< std::size_t, 2 > > compute_interpolation_operator(const FiniteElement< T > &element_from, const FiniteElement< T > &element_to)
Compute a matrix that represents the interpolation between two elements.
Definition: interpolation.cpp:21