Skip to content

Conversation

@ole-alb
Copy link
Contributor

@ole-alb ole-alb commented Feb 28, 2025

Describe your changes here:
Closes #1574

Add support for the remaining eclasses (tri, tet, prism & pyramid) to the standalone scheme.

All these boxes must be checked by the reviewers before merging the pull request:

As a reviewer please read through all the code lines and make sure that the code is fully understood, bug free, well-documented and well-structured.

General

  • The reviewer executed the new code features at least once and checked the results manually

  • The code follows the t8code coding guidelines

  • New source/header files are properly added to the Makefiles

  • The code is well documented

  • All function declarations, structs/classes and their members have a proper doxygen documentation

  • All new algorithms and data structures are sufficiently optimal in terms of memory and runtime (If this should be merged, but there is still potential for optimization, create a new issue)

Tests

  • The code is covered in an existing or new test case using Google Test

Github action

  • The code compiles without warning in debugging and release mode, with and without MPI (this should be executed automatically in a github action)

  • All tests pass (in various configurations, this should be executed automatically in a github action)

    If the Pull request introduces code that is not covered by the github action (for example coupling with a new library):

    • Should this use case be added to the github action?
    • If not, does the specific use case compile and all tests pass (check manually)

Scripts and Wiki

  • If a new directory with source-files is added, it must be covered by the script/find_all_source_files.scp to check the indentation of these files.
  • If this PR introduces a new feature, it must be covered in an example/tutorial and a Wiki article.

License

  • The author added a BSD statement to doc/ (or already has one)

Tag Label

  • The author added the patch/minor/major label in accordance to semantic versioning.

@ole-alb ole-alb changed the base branch from main to standalone-scheme-faces February 28, 2025 10:44
Base automatically changed from standalone-scheme-faces to main March 20, 2025 16:56
@ole-alb ole-alb marked this pull request as ready for review May 9, 2025 14:31
@ole-alb ole-alb requested a review from Davknapp May 15, 2025 15:46
Copy link
Collaborator

@Davknapp Davknapp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a first batch of review comments.

A general comment / question:
A lot of functions have an if/else block with
if(!T8_ELEMENT_NUM_EQUATIONS) or if(T8_ELEMENT_NUM_EQUATIONS)
to implement line/quad/hex specific stuff.

Wouldn't it be faster to provide the LUT for these eclasses, too? We could avoid if/else blocks slowing down the computation. Or does the compiler optimize it out?


constexpr uint8_t T8_ELEMENT_NUM_EQUATIONS[T8_ECLASS_COUNT] = { 0, 0, 0, 1, 0, 3, 1, 2 };

/**PARENT CHILD BIJECTION*/
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All of the following look up tables are basically undocumented. Please improve that.

else {
compare_value *= 1 << t8_eclass_to_dimension[eclass];
forest = t8_forest_new_adapt (forest, adapt_all, 0, 0, NULL);
t8_gloidx_t num_leaves = t8_forest_get_local_num_elements (forest);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
t8_gloidx_t num_leaves = t8_forest_get_local_num_elements (forest);
const t8_gloidx_t num_leaves = t8_forest_get_local_num_elements (forest);

forest = t8_forest_new_adapt (forest, adapt_all, 0, 0, NULL);
t8_gloidx_t num_leaves = t8_forest_get_local_num_elements (forest);

compare_value = num_leaves;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
compare_value = num_leaves;

@ole-alb
Copy link
Contributor Author

ole-alb commented May 21, 2025

This is a first batch of review comments.

A general comment / question: A lot of functions have an if/else block with if(!T8_ELEMENT_NUM_EQUATIONS) or if(T8_ELEMENT_NUM_EQUATIONS) to implement line/quad/hex specific stuff.

Wouldn't it be faster to provide the LUT for these eclasses, too? We could avoid if/else blocks slowing down the computation. Or does the compiler optimize it out?

To my understanding the if/else should not have an impact on the runtime as we use if constexpr and as you suggested the compiler optimizes it out.

/* Get the cmesh */
const t8_cmesh_t cmesh = t8_forest_get_cmesh (forest);
#if T8_ENABLE_DEBUG
if (tree_class == T8_ECLASS_TET) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we Assert for something fo rthe other tree_classes, too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure if we need that


const t8_scheme *scheme;
scheme = t8_scheme_new_default ();
t8_eclass_t eclass = T8_ECLASS_PYRAMID;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
t8_eclass_t eclass = T8_ECLASS_PYRAMID;
const t8_eclass_t eclass = T8_ECLASS_PYRAMID;

@Davknapp Davknapp assigned ole-alb and unassigned Davknapp Jul 11, 2025
{
T8_ASSERT (element_is_valid (elem));

if constexpr (TEclass == T8_ECLASS_PYRAMID) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we avoid these magic numbers?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe @lukasdreyer can help here?

@ole-alb ole-alb assigned Davknapp and unassigned ole-alb Aug 19, 2025
@codecov
Copy link

codecov bot commented Aug 19, 2025

Codecov Report

❌ Patch coverage is 95.48872% with 12 lines in your changes missing coverage. Please review.
✅ Project coverage is 76.15%. Comparing base (8d06ad1) to head (1aff0a3).

Files with missing lines Patch % Lines
...mes/t8_standalone/t8_standalone_implementation.hxx 95.33% 12 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1443      +/-   ##
==========================================
+ Coverage   75.86%   76.15%   +0.28%     
==========================================
  Files         103      103              
  Lines       19200    19423     +223     
==========================================
+ Hits        14566    14791     +225     
+ Misses       4634     4632       -2     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Standalone Scheme Types

3 participants