-
Notifications
You must be signed in to change notification settings - Fork 53
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
palace::Mesh
and libCEED quadrature data refactor
#166
Conversation
37672e3
to
f17ab7d
Compare
74e0b26
to
1905d0b
Compare
1905d0b
to
7ac1abc
Compare
… handle material property coefficients on the mesh
…aredFaceTransformations and the need for passing around a local to shared face map
…tance for palace::FiniteElementSpace
Includes MUMPS fix for wave ports.
…or wave ports (no external dependencies, resolves some singular matrix issues)
…ore eigenvalue solver is destroyed)
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.
Mostly just minor things, typos, range loops etc. There's the possibility of some a slightly different design on the restricted coefficients, and some slightly expanded or simplified interface on integrators. Suggestions on hughcars/mat-coeff-revisions
use whatever you like. Almost certainly missed some stuff as this was a lot of files to read.
for (auto it = bdr_attr_map.begin(); it != bdr_attr_map.end(); ++it) | ||
{ |
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.
for (const auto &[k,v] : bdr_attr_map)
{
loc_attr_list.Append(v);
}
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.
Sure, but I don't think this is substantially better than the iterator-based for loop.
// Use default | ||
case config::LinearSolverData::SymFactType::METIS: | ||
this->SetReorderingStrategy(strumpack::ReorderingStrategy::METIS); | ||
// this->SetReorderingStrategy(strumpack::ReorderingStrategy::AND); |
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.
debris
break; | ||
case config::LinearSolverData::SymFactType::AMD: | ||
this->SetReorderingStrategy(strumpack::ReorderingStrategy::AMD); | ||
// this->SetReorderingStrategy(strumpack::ReorderingStrategy::MMD); |
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.
debris?
7ac1abc
to
776ce39
Compare
Minor fixes following #166
This PR aims to refactor the quadrature data construction for libCEED operators by precomputing the geometric factors (element Jacobian determinants, inverse, etc.) and using these in QFunctions rather than assembling and storing quadrature data for every operator. This also necessitates changing how material properties are handled as coefficients. The end result is improved memory usage and operator setup time (especially on GPUs, coming soon).
Summary of changes:
MaterialPropertyCoefficient
class which contains a mapping from attribute to material property and a list of material properties. This also introduces the concept of different domain and boundary element attributes: The MFEM attributes (global, starting at 1, do not need to be contiguous) are associated with the mesh. There are now libCEED attributes which are local to a process and contiguous, and conversions between the two.MaterialPropertyOperator
andMaterialPropertyCoefficient
objects work with the libCEED attributes. For certain models with hundreds or even thousands of attributes, this improves scalability. This set of changes simplifies a lot of the models and their interaction with material properties (for example, boundary conditions with dependence on neighboring element material properties, see wave ports). It is fully functional with boundarySubMesh
objects.palace::Mesh
class which composes anmfem::ParMesh
with data for Palace (similar topalace::FiniteElementSpace
which composes anmfem::ParFiniteElementSpace
and libCEED objects). Thepalace::Mesh
includes functionality for precomputing libCEED geometry factor quadrature data like the libCEED attributes and Jacobian data, to be used in QFunctions.CeedBasis
andCeedElemRestriction
objects directly to their associatedFiniteElementSpace
. This makes up a lot of the large number of file changes, and the changes are the same across all files. The unit tests are comprehensive here and ensure correctness across all integrators. Performance against the previous implementation has been validated.Resolves #122