-
Notifications
You must be signed in to change notification settings - Fork 301
Make is_prepared() more fine-grained #3759
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
base: devel
Are you sure you want to change the base?
Conversation
|
Does "do not merge" also mean "do not review"? |
It's already bad enough to need fixing, huh? ;-) Nah, please jump in as you see fit. I've got more I'm wanting to add here, but if there's flaws in the foundation then it's probably better to fix them before I put more layers on top. |
lindsayad
left a comment
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.
Just looking at the header this seems like a great foundation to me
7c8c1d1 to
fc6ee94
Compare
fc6ee94 to
e39fc75
Compare
|
This might actually be in shape to merge soon. My remaining concerns:
|
|
Job Coverage, step Generate coverage on b0367ec wanted to post the following: CoverageInconsistent report tags were found between the head and base reports. Inconsistent tags: This comment will be updated on new commits. |
cc7fd1a to
9e6f0db
Compare
7143591 to
6febe53
Compare
We need things like neighbor pointers, and in general we'd like to assert that we're never assembling or solving on unprepared meshes.
We can rebuild point locators or element caches, but we don't want to use an already-built invalid cache by accident.
If we're skipping partitioning, we shouldn't mark ourselves as partitioned if we're not, and we shouldn't expect that we're marked as partitioned.
|
I'm moving the "incredibly careful assertions" part of this PR to a new branch, https://github.com/roystgnr/libmesh/tree/mesh_preparation_assertions, which I'll put into a new PR for after this one goes in. That (plus the other PRs I've just factored out, plus one more bugfix PR that'll wait on #4394 because it requires a commit there) should get this PR down to just the functionality promised in the title, and should leave it in a ready-to-review state. |
6febe53 to
b0367ec
Compare
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.
This looks good to me, but @roystgnr and I discussed changing the names of the new APIs, e.g. set_hasnt_neighbor_ptrs() -> unset_has_neighbor_ptrs(), which I preferred. This would also include eventually deprecating set_isnt_prepared() in favor of unset_is_prepared().
include/mesh/mesh_base.h
Outdated
| /** | ||
| * Flags indicating in what ways a mesh has been prepared for use. | ||
| */ | ||
| struct Preparation { |
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 usually do all opening curly brace on next line.
|
I feel like 90% of the work on this PR has been fixes, not for bugs in the PR, but for bugs exposed by the PR. Along with the API name changes I figured I'd throw in a couple more unit tests, despite the fact that they would surely be redundant with all the test coverage I got in the branch I'm following this one with ... and, long story short, there'll be a couple more non-trivial commits coming along with the name changes and the new tests: a bug fix in the MeshBase copy constructor, and some changes to allow copying and cloning of some types of badly-unprepared meshes. |
Not sure how we missed this for so long.
My unit tests (in an upcoming commit) uncovered that it was impossible to copy a mesh with orphaned nodes that have boundary conditions, because copy_nodes_and_elements would helpfully delete them despite BoundaryInfo expecting to find them. But we do want to be able to copy even unprepared meshes without throwing an error. Instead of whining that it would be hard to break backwards compatibility here, I should have just added an option to drop backwards compatibility here.
If we have a parallel-inconsistent partitioning then we may have a real problem, but we might temporarily have nodes that need to be repartitioned, and we'd like to be able to copy them anyway.
This hits the easiest-to-set-up partially-unprepared cases, and even that was enough to expose a subtle bug or two.
I'm still trying to figure out how to make this easy to use, but I'd like to at least test that what I've got so far still passes CI.