-
Notifications
You must be signed in to change notification settings - Fork 52
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
Enhancement ghost query functions #1248
base: feature-ghost_interface
Are you sure you want to change the base?
Enhancement ghost query functions #1248
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
Only minor changes needed.
However, i suggest to take some part of the code and make a genera t8_element_array function out of it: Finding the index of an element in an element array.
t8_element_array_find (const t8_element_array_t *, const t8_element_t *)
Since we need this in other code places as well and should not duplicate the code.
*loc_ghost_id = t8_forest_bin_search_lower (ghost_elements, linear_id, element_level); | ||
if (*loc_ghost_id >= 0) { | ||
/* The element was found */ | ||
return (const t8_element_t *) t8_sc_array_index_locidx (&(ghost_elements->array), *loc_ghost_id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
return (const t8_element_t *) t8_sc_array_index_locidx (&(ghost_elements->array), *loc_ghost_id); | |
return t8_element_array_index_locidx (ghost_elements, *loc_ghost_id); |
* | ||
* \param [in] forest The forest object. | ||
* \param [in] lghost_tree The local index of the ghost tree. | ||
* \param [in] linear_id The local index of the element. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* \param [in] linear_id The local index of the element. | |
* \param [in] linear_id The linear id of the element. |
* \param [in] lghost_tree The local index of the ghost tree. | ||
* \param [in] linear_id The local index of the element. | ||
* \param [in] element_level The level of the element. | ||
* \param [out] loc_ghost_id The local id of the ghost. -1 if no ghost was found. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We have to be very careful with the documentation and usage here.
The value of loc_ghost_id is the local index of the Ghost within its tree. (The return value of t8_ghost_get_ghost_id_in_tree)
It is not the id as in "The index in the elements + ghosts array that we use for example in ghost_exchange_data".
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The current documention is in mho too unclear about that.
@@ -69,6 +69,30 @@ t8_forest_ghost_get_tree_element_offset (t8_forest_t forest, t8_locidx_t lghost_ | |||
t8_locidx_t | |||
t8_forest_ghost_tree_num_elements (t8_forest_t forest, t8_locidx_t lghost_tree); | |||
|
|||
/** Retrieves the ghost index of an element in a specific ghost tree. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment on documentation below.
t8_locidx_t | ||
t8_ghost_get_ghost_id_in_tree (t8_forest_t forest, t8_locidx_t lghost_tree, t8_element_t *ghost_element) | ||
{ | ||
T8_ASSERT (t8_forest_is_committed (forest)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add an assertion that the forest is not transitioned/does not have subelements.
The current version does not work with subelements since all subelements of the same elements have the same linear id, thus the search may find a different element, even if it exists.
We can either extend this search or (if there is not time) keep it but abort if it is used with subelements.
@@ -52,3 +55,46 @@ t8_forest_get_tree_element_array_mutable (const t8_forest_t forest, t8_locidx_t | |||
{ | |||
return (t8_element_array_t*) t8_forest_get_tree_element_array (forest, ltreeid); | |||
} | |||
|
|||
/* TODO: should return t8_locidx_t */ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/* TODO: should return t8_locidx_t */ |
/** Search for a linear element id (at forest->maxlevel) in a sorted array of | ||
* elements. If the element does not exist, return the largest index i | ||
* such that the element at position i has a smaller id than the given one. | ||
* If no such i exists, return -1. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* If no such i exists, return -1. | |
* If no such i exists, return -1. | |
* \note This search does not work for subelements. |
Describe your changes here:
I just drafted the code and it compiles without warning. I never executed the code. Giving it to our Hydrotec advisor @holke.
Note: The typos and indentation are from the base branch of this branch and I did not correct them since the base branch is still WIP. But this branch should be (if the new code works) usable by Hydrotec.
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
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):
Scripts and Wiki
script/find_all_source_files.scp
to check the indentation of these files.License
doc/
(or already has one)