Simplify work with walberla kernels
RudolfWeeber opened this issue · 0 comments
RudolfWeeber commented
When adding new kernels, a lot of manual work is currently needed
- write the actual kernel generation in
maintainer/walberla_kernels/generate_*.py
- generate, format and copy kernels to
src/walberla_bridge/src/lattice_boltzmann/generated_kernels
the following have to be done 4x per kernel, single/double precision, cpu/gpu
- Add kernel cpp files to the CMake file there
- include headers of the new kernels in
kernel_traits.hpp
- add the kernel classes in the
KernelTraits
classes for the respective architectures - lastly, kernels are currently imported into the actual
LBWalberlaImpl
class template via ausing
statement.
There is probably some potential for streamlingin:
- the various kernel generation steps described in the readme in
maintainer/walberla_kernels
can probably mostly be put into a shell script - at the time of kernel generation, all information needed for the
kernel_traits.hpp
is in princicle known. We could generate that file from a Jinja template - Having one
using
statement per Kernel inLBWalberlaImpl
could also be avoided, this would, however result in extratypenames
throughout the code. Might still be worth it.
using Kernels = detail::KernelTraits<FloatType, Architecture>;
// ...
auto m_initial_pdf_setter = std::make_shared<typename Kernels::InitialPDFSetter>;