Skip to content

Enhance SamplingShaper so it can work on low order Blueprint meshes#1875

Open
BradWhitlock wants to merge 93 commits into
developfrom
feature/whitlock/sampling_low_order_blueprint_mesh
Open

Enhance SamplingShaper so it can work on low order Blueprint meshes#1875
BradWhitlock wants to merge 93 commits into
developfrom
feature/whitlock/sampling_low_order_blueprint_mesh

Conversation

@BradWhitlock

@BradWhitlock BradWhitlock commented May 27, 2026

Copy link
Copy Markdown
Member

This PR resolves #1692 so the quest::SamplingShaper can operate on Blueprint low order meshes.

  • Moved SamplingShaper MFEM state into a state object that can be used among helper routines
  • Added a BlueprintState object to support Blueprint state
  • Enhanced various methods to operate on both types of state, templating as needed
  • Separated "shaping_helpers.{cpp,hpp}" into MFEM and Blueprint files
  • Quadrature enhancements: an enum and some more methods to generate quadrature points
  • Blueprint sampling will generate sample points at quadrature as with HO and then sample shapes at those points, ultimately converting to material fields on the Blueprint mesh
  • Changed CMake logic so SamplingShaper can be built when either MFEM or Conduit (or both) are present -- enables a shaper that works without MFEM
  • When MFEM is present, we can shape MFEM contours onto Blueprint mesh in 2D
  • Enhanced shaping_driver so it can work with blueprint only mode, currently selected via inline blueprint mesh
  • Added a test of Blueprint-only mode for STL spheres
  • Made IntersectionShaper use BlueprintState where needed
  • Enhancements that allow shaping on Blueprint meshes via conduit::Node or via sidre::Group.

return it->second;
}

void compute_interpolatory_weights(const axom::Array<double>& nodes,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this method could use a brief doxygen header to explain what it does, even if it isn't user-facing.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done

for(int npts = 1; npts <= maxNpts; ++npts)
{
const auto rule = getRule(npts);
const int exactDegree = getExactDegree(npts);

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now that there's a lot of quadrature rules to keep track of, do you think it's generally useful enough to have a helper function like get_exact_degree(numerics::QuadartureType, npts)? Even if it isn't necessary to actually execute it most of the time, its source code could provide a useful compendium of which rules evaluate which order polynomials.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had codex move code into a get_exact_degree helper function and update the tests.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support (low order) blueprint meshes in sample-based shaper

2 participants