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

IsoGeometric Analysis testing in Moose #18768

Open
roystgnr opened this issue Sep 3, 2021 · 2 comments
Open

IsoGeometric Analysis testing in Moose #18768

roystgnr opened this issue Sep 3, 2021 · 2 comments
Assignees
Labels
C: Framework C: TestHarness T: task An enhancement to the software.

Comments

@roystgnr
Copy link
Contributor

roystgnr commented Sep 3, 2021

Reason

libMesh has had support added for IsoGeometric Analysis via custom-created or DynaIO-formatted meshes, but is now getting additional read support for new IGA extensions to the ExodusII format, the features of which make such meshes far more practical for users.

Design

Small example meshes and simulations employing them should be added to the Moose test suite, as demonstrations of capability, as tests for compatibility of various Moose features with IGA meshes, and as regression tests against any problems from future refactoring and upgrades of the IGA capabilities in libMesh.

Impact

The IGA extensions require a newer version of ExodusII to be enabled in libMesh, which requires HDF5 as a prerequisite, so to avoid foisting another compilation prerequisite on all Moose users we'll need TestHarness support for checking the libMesh ExodusII version and for skipping any tests which require a newer version.

Ideally no other changes will be needed, but part of the reason for adding IGA tests will be to uncover any Moose subsystems for which that isn't true. We can add new issues for any specific subsystem problems we uncover if/when we uncover some.

@roystgnr roystgnr added C: Framework C: TestHarness T: task An enhancement to the software. labels Sep 3, 2021
@roystgnr roystgnr self-assigned this Sep 3, 2021
@roystgnr
Copy link
Contributor Author

roystgnr commented Sep 8, 2021

The IGA extensions require a newer version of ExodusII to be enabled in libMesh, which requires HDF5 as a prerequisite

And it turns out, (at least with current HDF5 versions? with libMesh's old NetCDF version?), the new ExodusII is using flock to request an exclusive lock when it opens a file ... which then fails, because Moose has already acquired a lock on the same file (in an attempt to prevent realtime viz programs from opening the file and then reading to the "end" before the end has been written, @permcody tells me).

I'm still trying to figure out what the right solution here is.

It would have been ideal to just turn off the flock call in the underlying (ExodusII->NetCDF->HDF5) library and let higher-level code continue to manage locking, but I can't see any way to set locking behavior at the NetCDF level, much less at the ExodusII level.

Cody suggests that we can just disable the higher-level locking in cases where we know the lower-level libraries are doing locking for us. I like this too (it appears to me that the libMesh Exodus objects will end up hanging on to a lock the whole time in between the first write attempt and an explicit close() or destructor, so we shouldn't have any race conditions), I'm just not sure how to accomplish the "we know" part. I had to dig through a dozen stack levels to find where the actual bug was occurring, and none of the higher-level or mid-level API docs seem to say anything about file locking, so I'm not sure where the behavior appeared and I can't see how we'll detect it if-and-when the locking behavior is removed in the future.

@roystgnr
Copy link
Contributor Author

roystgnr commented Sep 8, 2021

I can't see any way to set locking behavior at the NetCDF level, much less at the ExodusII level.

On the other hand, I do see a way to set locking behavior at the HDF5 level from arbitrary higher levels: with the environment variable $HDF5_USE_FILE_LOCKING set to FALSE my tests all start passing. Looks like this is tested by getenv at HDF5 subpackage initialization time ... and nothing gets initialized until our first ExodusII_IO_Helper::create() call, so we may be able to just putenv() right in there, in the cases where we detect that we're configured with HDF5.

What's astonishing is that this bug hadn't bit us before. I can reproduce it even with an old Exodus version, so long as I configure libMesh with HDF5 support.

roystgnr added a commit to roystgnr/moose that referenced this issue Sep 14, 2021
We could try updating to a newer exodiff, but I'd be almost sure that
would break compatibility with Exodus 5.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Sep 15, 2021
We could try updating to a newer exodiff, but I'd be almost sure that
would break compatibility with Exodus 5.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Oct 11, 2021
Refs idaholab#18768 - we need this on any non-trivial isogeometric mesh
roystgnr added a commit to roystgnr/moose that referenced this issue Oct 11, 2021
Refs idaholab#18768 - we need this on any non-trivial isogeometric mesh
roystgnr added a commit to roystgnr/moose that referenced this issue Oct 13, 2021
Refs idaholab#18768 - we need this on any non-trivial isogeometric mesh
roystgnr added a commit to roystgnr/moose that referenced this issue Nov 16, 2021
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Dec 16, 2021
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Dec 16, 2021
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Dec 19, 2021
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Dec 19, 2021
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Jan 10, 2022
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Jan 10, 2022
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
brianmoose pushed a commit to brianmoose/moose that referenced this issue Mar 3, 2022
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
brianmoose pushed a commit to brianmoose/moose that referenced this issue Mar 3, 2022
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 23, 2022
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 23, 2022
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 24, 2022
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 24, 2022
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 1, 2022
This lets us choose to load an IsoGeometric Analysis mesh without spline
nodes and spline node constraints, whether for debugging purposes or to
experiment with solver behavior or just because libMesh doesn't
parallelize those constraints efficiently enough yet.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 1, 2022
This first mesh file has no sidesets, so we'll do a transient solve, to
get a decent run with only Neumann BCs.

Refs idaholab#18768
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 13, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 14, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 14, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 14, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 14, 2022
aeslaughter added a commit to aeslaughter/moose that referenced this issue Apr 14, 2022
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 15, 2023
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Jun 27, 2023
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Oct 11, 2023
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Nov 8, 2023
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Jan 29, 2024
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Feb 22, 2024
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 7, 2024
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Mar 11, 2024
This gets us a lot more flexibility with what IGA meshes we can support.

Refs idaholab#18768
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 10, 2024
Refs idaholab#18768

This lets us run with IGA meshes using more flexible extraction
operators than the body-fit meshes we've been restricted to previously.
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 12, 2024
Refs idaholab#18768

This lets us run with IGA meshes using more flexible extraction
operators than the body-fit meshes we've been restricted to previously.
roystgnr added a commit to roystgnr/moose that referenced this issue Apr 24, 2024
Refs idaholab#18768

This lets us run with IGA meshes using more flexible extraction
operators than the body-fit meshes we've been restricted to previously.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C: Framework C: TestHarness T: task An enhancement to the software.
Projects
None yet
Development

No branches or pull requests

1 participant