-
Notifications
You must be signed in to change notification settings - Fork 32
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
levelset: rework overall design #422
Conversation
45f0d83
to
638036c
Compare
638036c
to
62dfd28
Compare
7ad8f62
to
6751186
Compare
6751186
to
f0dc451
Compare
e2d7ff6
to
c473bdb
Compare
The final implementation is not 100% compatible with the current version. The names of a couple of classes have changed, but, overall, I think that adapting an existing code to the new implementation should be easy. |
4f3cfee
to
e038aa8
Compare
…r Cartesian meshes Intersections between mesh bounding box and segments should be performed without inflating the bounding box of the mesh.
The initialization of the constructor is now handled by the kernel object itself.
Immutable objects were introduced to reduce the memory footprint of the levelset. In the next commits a different strategy for reducing the memory reduced by the levelset will be introduced.
The main purpose of the rework is to reduce the memory footprint of the levelset. To achieve this goal, the values computed by the levelset are stored in separate caches. Each cache can be enabled separately form the other and can operate in one of the following modes: values can be cached as their are evaluated; values can be pre-computed inside the narrow band; values can be pre-computed on the whole domain. When no caches are enabled, the only memory used by the levelset is the memory that each object uses to store its own information (for example the object that evaluates the levelset of a segmentation stored information about the normals of the segmentation). When no cached are enabled, the evaluation of the levelset is thread safe and this allows to use the levelset object inside parallel OpenMP regions.
e038aa8
to
80893e9
Compare
I fixed a problem with the update of empty objects. Hopefully, this should address the last problems we had with this branch. |
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.
I tested in a complex geometry case. Differences are very small and results very similar.
The main purpose of the rework is to reduce the memory footprint of the levelset. To achieve this goal, the values computed by the levelset are stored in separate caches. Each cache can be enabled separately form the other and can operate in one of the following modes:
When no caches are enabled, the only memory used by the levelset is the memory that each object uses to store its own information (for example the object that evaluates the levelset of a segmentation stored information about the normals of the segmentation).
When no cached are enabled, the evaluation of the levelset is thread safe and this allows to use the levelset object inside parallel OpenMP regions.
This new levelset aims to be 100% compatible with the existing levelset. Some functions are now deprecated, but thay should still work as before.
The pull request is a draft, because more tests should be performed.