[on hold] Draft/demo: Use Boost.PFR to reflect record dimension #148
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Do not merge this PR! For now this is just a demo.
Using Boost.PFR we can reflect existing structures and explores the possibilities:
llama::One<T>
should also no longer be needed.view(x, y)->pos.x
instead ofview(x, y)(tag::Pos{}, tag::X{})
during reading.Datum domain definition before:
using Particle = llama::DS< llama::DE<tag::Pos, llama::DS< llama::DE<tag::X, FP>, llama::DE<tag::Y, FP>, llama::DE<tag::Z, FP> >>, llama::DE<tag::Vel, llama::DS< llama::DE<tag::X, FP>, llama::DE<tag::Y, FP>, llama::DE<tag::Z, FP> >>, llama::DE<tag::Mass, FP> >;
After:
Compare the change of the n-body pPInteraction function from:
to:
Also consider the particle creation loop changed from:
to:
This prototype has a drawback, because it invokes the mapping function unnecessarily. During each datum access
view(x, y)->
, a full datum is fetched which is used for navigation. The compiler discards the unused loads and computations in the mapping function. But this still leads to wrong results if the mapping function is stateful.