Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature puma patches [8/x] Batch processing of tree ref_coords [1/x] Interface #662

Merged
merged 29 commits into from
Sep 13, 2023
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
7105040
performance optimization
sandro-elsweijer Aug 2, 2023
576bd6b
add batch interface
sandro-elsweijer Aug 2, 2023
9c272f3
add batch interface for geom zero
sandro-elsweijer Aug 2, 2023
6e494f7
add abort statements for not yet implemented batch functionality
sandro-elsweijer Aug 2, 2023
f64a40a
add interface to example
sandro-elsweijer Aug 2, 2023
ae9dd49
add interface to some other files
sandro-elsweijer Aug 2, 2023
4005565
use size_t instead of int for array size
sandro-elsweijer Aug 18, 2023
a76b9fe
use size_t instead of int for array size
sandro-elsweijer Aug 18, 2023
dc39e66
Merge branch 'feature-puma_patches_batch_processing' into feature-pum…
sandro-elsweijer Aug 18, 2023
eecce66
use size_t instead of int for geom_zero
sandro-elsweijer Aug 18, 2023
8d8c7cd
use size_t instead of int for t8_forest_element_from_ref_coords
sandro-elsweijer Aug 18, 2023
92b790e
use size_t instead of int in geometry
sandro-elsweijer Aug 18, 2023
ae84cd0
use size_t instead of int in geometry analytic
sandro-elsweijer Aug 18, 2023
5957b44
remove array length limitation
sandro-elsweijer Aug 18, 2023
f0ef130
add missing size_t
sandro-elsweijer Aug 18, 2023
9d00c7e
Merge branch 'feature-puma_patches_batch_processing' into feature-pum…
sandro-elsweijer Aug 29, 2023
3053119
indent
sandro-elsweijer Aug 29, 2023
c977cc4
Merge branch 'main' into feature-puma_patches_batch_processing_geometry
sandro-elsweijer Sep 11, 2023
3ed5afc
Updated public API of squared-disk geometry.
Sep 11, 2023
f9062a0
Apply suggestions from code review
sandro-elsweijer Sep 13, 2023
2dbeca9
adapt docstring
sandro-elsweijer Sep 13, 2023
4b42073
remove array length limitations
sandro-elsweijer Sep 13, 2023
d29db85
adapt docstrings
sandro-elsweijer Sep 13, 2023
b19203e
remove unnecessary occ_geometry_fn
sandro-elsweijer Sep 13, 2023
61b1b00
remove indent off
sandro-elsweijer Sep 13, 2023
a102294
adapt docstrings and remove array limitation
sandro-elsweijer Sep 13, 2023
cc70bc7
adapt some docstrings
sandro-elsweijer Sep 13, 2023
70cc8a1
add argument
sandro-elsweijer Sep 13, 2023
2f71920
replace int with size_t
sandro-elsweijer Sep 13, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 48 additions & 18 deletions example/geometry/t8_example_geometries.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,16 @@ class t8_geometry_sincos: public t8_geometry {
* models the rectangle [0,2] x [0,1].
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
double x = ref_coords[0];
if (gtreeid == 1) {
/* Translate ref coordinates by +1 in x direction for the second tree. */
Expand All @@ -108,7 +112,8 @@ class t8_geometry_sincos: public t8_geometry {

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand Down Expand Up @@ -139,12 +144,16 @@ class t8_geometry_moebius: public t8_geometry_with_vertices {
* Map a point in a point in \f$ [0,1]^2 \f$ to the moebius band.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
double t;
double phi;

Expand All @@ -165,7 +174,8 @@ class t8_geometry_moebius: public t8_geometry_with_vertices {

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand All @@ -189,20 +199,25 @@ class t8_geometry_cylinder: public t8_geometry {
* Map a reference point in the unit square to a cylinder.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^\mathrm{dim} \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
out_coords[0] = cos (ref_coords[0] * 2 * M_PI);
out_coords[1] = ref_coords[1];
out_coords[2] = sin (ref_coords[0] * 2 * M_PI);
}

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand Down Expand Up @@ -235,12 +250,16 @@ class t8_geometry_circle: public t8_geometry_with_vertices {
* Map a reference point in the unit square to a circle.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
double x;
double y;

Expand All @@ -261,7 +280,8 @@ class t8_geometry_circle: public t8_geometry_with_vertices {

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand Down Expand Up @@ -290,12 +310,16 @@ class t8_geometry_moving: public t8_geometry {
* Map a reference point in the unit square to a square distorted with time.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
double x = ref_coords[0] - .5;
double y = ref_coords[1] - .5;
const double time = *ptime;
Expand All @@ -319,7 +343,8 @@ class t8_geometry_moving: public t8_geometry {

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand Down Expand Up @@ -350,20 +375,25 @@ class t8_geometry_cube_zdistorted: public t8_geometry {
* Map a reference point in the unit cube to a cube distorted in the z axis.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^3 \f$.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying a point in \f$ [0,1]^2 \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
{
if (num_coords != 1)
SC_ABORT ("Error: Batch computation of geometry not yet supported.");
out_coords[0] = ref_coords[0];
out_coords[1] = ref_coords[1];
out_coords[2] = ref_coords[2] * (0.8 + 0.2 * sin (ref_coords[0] * 2 * M_PI) * cos (ref_coords[1] * 2 * M_PI));
}

/* Jacobian, not implemented. */
void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
{
SC_ABORT_NOT_REACHED ();
}
Expand Down
11 changes: 6 additions & 5 deletions src/t8_forest/t8_forest_cxx.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -388,20 +388,21 @@ t8_forest_element_coordinate (t8_forest_t forest, t8_locidx_t ltree_id, const t8
/* Get the cmesh */
cmesh = t8_forest_get_cmesh (forest);
/* Evaluate the geometry */
t8_geometry_evaluate (cmesh, gtreeid, vertex_coords, coordinates);
t8_geometry_evaluate (cmesh, gtreeid, vertex_coords, 1, coordinates);
}

void
t8_forest_element_from_ref_coords (t8_forest_t forest, t8_locidx_t ltreeid, const t8_element_t *element,
const double *ref_coords, double *coords_out, sc_array_t *stretch_factors)
const double *ref_coords, const size_t num_coords, double *coords_out,
sc_array_t *stretch_factors)
{
double tree_ref_coords[3] = { 0 };
const t8_eclass_t tree_class = t8_forest_get_tree_class (forest, ltreeid);
const t8_eclass_scheme_c *scheme = t8_forest_get_eclass_scheme (forest, tree_class);
scheme->t8_element_reference_coords (element, ref_coords, 1, tree_ref_coords);
scheme->t8_element_reference_coords (element, ref_coords, num_coords, tree_ref_coords);
const t8_cmesh_t cmesh = t8_forest_get_cmesh (forest);
const t8_gloidx_t gtreeid = t8_forest_global_tree_id (forest, ltreeid);
t8_geometry_evaluate (cmesh, gtreeid, tree_ref_coords, coords_out);
t8_geometry_evaluate (cmesh, gtreeid, tree_ref_coords, num_coords, coords_out);
}

/* Compute the diameter of an element. */
Expand Down Expand Up @@ -459,7 +460,7 @@ t8_forest_element_centroid (t8_forest_t forest, t8_locidx_t ltreeid, const t8_el
/* Get the element class and calculate the centroid using its element
* reference coordinates */
element_shape = t8_element_shape (ts, element);
t8_forest_element_from_ref_coords (forest, ltreeid, element, t8_element_centroid_ref_coords[element_shape],
t8_forest_element_from_ref_coords (forest, ltreeid, element, t8_element_centroid_ref_coords[element_shape], 1,
coordinates, NULL);
}

Expand Down
4 changes: 3 additions & 1 deletion src/t8_forest/t8_forest_geometrical.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ t8_forest_element_coordinate (t8_forest_t forest, t8_locidx_t ltree_id, const t8
* \param [in] ltreeid The forest local id of the tree in which the element is.
* \param [in] element The element.
* \param [in] ref_coord The reference coordinates of the point inside the element.
* \param [in] num_coords The number of coordinate sets in ref_coord (dimension x double).
* \param [out] coords_out On input an allocated array to store 3 doubles, on output
* the x, y and z coordinates of the point inside the domain.
* \param [in] stretch_factors An element-wise array with d (dimension) doubles per element,
Expand All @@ -66,7 +67,8 @@ t8_forest_element_coordinate (t8_forest_t forest, t8_locidx_t ltree_id, const t8
*/
void
t8_forest_element_from_ref_coords (t8_forest_t forest, t8_locidx_t ltreeid, const t8_element_t *element,
const double *ref_coord, double *coords_out, sc_array_t *stretch_factors);
const double *ref_coord, const size_t num_coords, double *coords_out,
sc_array_t *stretch_factors);

/** Compute the coordinates of the centroid of an element if a geometry
* for this tree is registered in the forest's cmesh.
Expand Down
2 changes: 1 addition & 1 deletion src/t8_forest/t8_forest_vtk.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ t8_forest_vtk_get_element_nodes (t8_forest_t forest, t8_locidx_t ltreeid, const
const t8_eclass_scheme_c *scheme = t8_forest_get_eclass_scheme (forest, tree_class);
const t8_element_shape_t element_shape = scheme->t8_element_shape (element);
const double *ref_coords = t8_forest_vtk_point_to_element_ref_coords[element_shape][vertex];
t8_forest_element_from_ref_coords (forest, ltreeid, element, ref_coords, out_coords, stretch_factors);
t8_forest_element_from_ref_coords (forest, ltreeid, element, ref_coords, 1, out_coords, stretch_factors);
}

/**
Expand Down
14 changes: 10 additions & 4 deletions src/t8_geometry/t8_geometry.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,8 @@ t8_geom_handler_update_tree (t8_geometry_handler_t *geom_handler, t8_cmesh_t cme
}

void
t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *out_coords)
t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *out_coords)
{
double start_wtime = 0; /* Used for profiling. */
/* The cmesh must be committed */
Expand All @@ -310,7 +311,8 @@ t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_c
T8_ASSERT (geom_handler->active_geometry != NULL);

/* Evaluate the geometry. */
geom_handler->active_geometry->t8_geom_evaluate (cmesh, geom_handler->active_tree, ref_coords, out_coords);
geom_handler->active_geometry->t8_geom_evaluate (cmesh, geom_handler->active_tree, ref_coords, num_coords,
out_coords);

if (cmesh->profile != NULL) {
/* If profiling is enabled, add the runtime to the profiling
Expand All @@ -321,7 +323,8 @@ t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_c
}

void
t8_geometry_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian)
t8_geometry_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const int num_coords,
double *jacobian)
{
/* The cmesh must be committed */
T8_ASSERT (t8_cmesh_is_committed (cmesh));
Expand All @@ -335,5 +338,8 @@ t8_geometry_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_c
t8_geom_handler_update_tree (geom_handler, cmesh, gtreeid);

/* Evaluate the jacobian. */
geom_handler->active_geometry->t8_geom_evaluate_jacobian (cmesh, geom_handler->active_tree, ref_coords, jacobian);
/* *INDENT-OFF* */
geom_handler->active_geometry->t8_geom_evaluate_jacobian (cmesh, geom_handler->active_tree, ref_coords, num_coords,
jacobian);
/* *INDENT-ON* */
}
6 changes: 4 additions & 2 deletions src/t8_geometry/t8_geometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,12 @@ t8_geometry_c *
t8_geom_handler_find_geometry (const t8_geometry_handler_t *geom_handler, const char *name);

void
t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *out_coords);
t8_geometry_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *out_coords);

void
t8_geometry_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian);
t8_geometry_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian);

T8_EXTERN_C_END ();

Expand Down
20 changes: 12 additions & 8 deletions src/t8_geometry/t8_geometry_base.hxx
Original file line number Diff line number Diff line change
Expand Up @@ -59,25 +59,29 @@ struct t8_geometry

/**
* Map a point in the reference space \f$ [0,1]^\mathrm{dim} \to \mathbb{R}^3 \f$.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^\mathrm{dim} \f$.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] gtreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying points in \f$ [0,1]^\mathrm{dim} \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] out_coords The mapped coordinates in physical space of \a ref_coords.
*/
virtual void
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double out_coords[3]) const
t8_geom_evaluate (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double out_coords[3]) const
= 0;

/**
* Compute the jacobian of the \a t8_geom_evaluate map at a point in the reference space \f$ [0,1]^\mathrm{dim} \f$.
* \param [in] cmesh The cmesh in which the point lies.
* \param [in] glreeid The global tree (of the cmesh) in which the reference point is.
* \param [in] ref_coords Array of \a dimension many entries, specifying a point in \f$ [0,1]^\mathrm{dim} \f$.
* \param [out] jacobian The jacobian at \a ref_coords. Array of size \f$ \mathrm{dim} \cdot 3 \f$. Indices \f$ 3 \cdot i\f$ , \f$ 3 \cdot i+1 \f$ , \f$ 3 \cdot i+2 \f$
* correspond to the \f$ i \f$-th column of the jacobian (Entry \f$ 3 \cdot i + j \f$ is \f$ \frac{\partial f_j}{\partial x_i} \f$).
* \param [in] ref_coords Array of \a dimension x \a num_coords many entries, specifying points in \f$ [0,1]^\mathrm{dim} \f$.
* \param [in] num_coords Amount of points of /f$ \mathrm{dim} /f$ to map.
* \param [out] jacobian The jacobian at \a ref_coords. Array of size \a num_coords x dimension x 3. Indices \f$ 3 \cdot i\f$ , \f$ 3 \cdot i+1 \f$ , \f$ 3 \cdot i+2 \f$
* correspond to the \f$ i \f$-th column of the jacobian (Entry \f$ 3 \cdot i + j \f$ is \f$ \frac{\partial f_j}{\partial x_i} \f$).
*/
virtual void
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, double *jacobian) const
t8_geom_evaluate_jacobian (t8_cmesh_t cmesh, t8_gloidx_t gtreeid, const double *ref_coords, const size_t num_coords,
double *jacobian) const
= 0;

/** Update a possible internal data buffer for per tree data.
Expand Down
Loading