t8
UNKNOWN
t8code is a C library to manage a forest of adaptive space-trees of general element classes in parallel.
|
Mapping with Lagrange basis functions. More...
#include <t8_geometry_lagrange.hxx>
Public Member Functions | |
t8_geometry_lagrange (int dim) | |
Constructor of the Lagrange geometry with a given dimension. More... | |
t8_geometry_type_t | t8_geom_get_type () const |
Get the type of this geometry. More... | |
void | t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_points, double *out_coords) const |
Maps points from the reference space to the physical space \( \mathbb{R}^3 \). More... | |
virtual void | t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_points, double *jacobian) const |
Compute the Jacobian of the t8_geom_evaluate map at a point in the reference space. More... | |
virtual void | t8_geom_load_tree_data (t8_cmesh_t cmesh, t8_gloidx_t gtreeid) |
Update a possible internal data buffer for per tree data. More... | |
![]() | |
t8_geometry_with_vertices (int dimension, std::string name) | |
virtual | ~t8_geometry_with_vertices () |
The destructor. More... | |
virtual bool | t8_geom_tree_negative_volume () const |
Check if the currently active tree has a negative volume. More... | |
t8_geometry_type_t | t8_geom_get_type () const |
Get the type of this geometry. More... | |
![]() | |
t8_geometry (int dim, std::string name) | |
virtual | ~t8_geometry () |
The destructor. More... | |
virtual void | t8_geom_point_batch_inside_element (t8_forest_t forest, t8_locidx_t ltreeid, const t8_element_t *element, const double *points, const int num_points, int *is_inside, const double tolerance) const |
Query whether a batch of points lies inside an element. More... | |
int | t8_geom_get_dimension () const |
Get the dimension of this geometry. More... | |
const std::string | t8_geom_get_name () const |
Get the name of this geometry. More... | |
const size_t | t8_geom_get_hash () const |
Additional Inherited Members | |
![]() | |
t8_gloidx_t | active_tree |
t8_eclass_t | active_tree_class |
const double * | active_tree_vertices |
![]() | |
int | dimension |
The dimension of reference space for which this is a geometry. | |
std::string | name |
The name of this geometry. | |
size_t | hash |
The hash of the name of this geometry. | |
Mapping with Lagrange basis functions.
The enumeration of the nodal basis functions depends on the node numbering scheme. While this is a convention, we came up with the following rules to guide us when constructing new mappings:
You can verify these rules by checking the documentation of the t8_geom_xxx_basis methods of this class (e.g. t8_geometry_lagrange::t8_geom_t6_basis).
t8_geometry_lagrange::t8_geometry_lagrange | ( | int | dim | ) |
Constructor of the Lagrange geometry with a given dimension.
The geometry is compatible with all tree types and uses as many vertices as the number of Lagrange basis functions used for the mapping. The vertices are saved via the t8_cmesh_set_tree_vertices function.
[in] | dim | 0 <= dim <= 3. Element dimension in the parametric space. E.g. dim = 2 for a T8_ECLASS_QUAD element. |
|
virtual |
Maps points from the reference space to the physical space \( \mathbb{R}^3 \).
For linear elements, it gives the same result as t8_geom_compute_linear_geometry.
The mapping is performed via Lagrange interpolation according to
\( \mathbf{x}(\vec{\xi}) = \sum\limits_{i=1}^{N_{\mathrm{vertex}}} \psi_i(\vec{\xi}) \mathbf{x}_i \)
where \( \vec{\xi} \) is the point in the reference space to be mapped, \( \mathbf{x} \) is the mapped point we search, \( \psi_i(\vec{\xi}) \) are the basis functions associated with the vertices, and \( \mathbf{x}_i \) are the vertices of the current tree in the physical space. The basis functions are specific to the tree type, see e.g. t8_geom_t6_basis. The vertices of the current tree were set with t8_cmesh_set_tree_vertices.
[in] | cmesh | The cmesh in which the point lies. |
[in] | gtreeid | The global tree (of the cmesh) in which the reference point is. |
[in] | ref_coords | Array of dimension x num_points entries, specifying points in the reference space. |
[in] | num_points | Number of points to map. Currently, only one point is supported. |
[out] | out_coords | Coordinates of the mapped points in physical space of ref_coords. The length is num_points * 3. |
Implements t8_geometry.
|
virtual |
Compute the Jacobian of the t8_geom_evaluate map at a point in the reference space.
[in] | cmesh | The cmesh in which the point lies. |
[in] | gtreeid | The global tree (of the cmesh) in which the reference point is. |
[in] | ref_coords | Array of dimension x num_points entries, specifying points in the reference space. |
[in] | num_points | Number of points to map. |
[out] | jacobian | The Jacobian at ref_coords. Array of size num_points x dimension x 3. Indices \( 3 \cdot i\) , \( 3 \cdot i+1 \) , \( 3 \cdot i+2 \) correspond to the \( i \)-th column of the Jacobian (Entry \( 3 \cdot i + j \) is \( \frac{\partial f_j}{\partial x_i} \)). |
Implements t8_geometry.
|
inlinevirtual |
|
inlinevirtual |
Update a possible internal data buffer for per tree data.
This function is called before the first coordinates in a new tree are evaluated. You can use it for example to load the polynomial degree of the Lagrange basis into an internal buffer (as is done in the Lagrange geometry).
[in] | cmesh | The cmesh. |
[in] | gtreeid | The global tree. |
Reimplemented from t8_geometry_with_vertices.