std::size_t hash_##AXIS = bspline_##AXIS##_.hash(); \
\
D_##AXIS##_ .hdflink(format("rad-D-%.4lx.hdf", hash_##AXIS)); \
S_##AXIS##_ .hdflink(format("rad-S-%.4lx.hdf", hash_##AXIS)); \
Mm1_##AXIS##_ .hdflink(format("rad-Mm1-%.4lx.hdf", hash_##AXIS)); \
Mm2_##AXIS##_ .hdflink(format("rad-Mm2-%.4lx.hdf", hash_##AXIS)); \
\
D_##AXIS##_ .populate([=](int m, int n) -> Complex { return computeD(bspline_##AXIS##_, g_##AXIS##_, m, n); }); \
S_##AXIS##_ .populate([=](int m, int n) -> Complex { return computeM(bspline_##AXIS##_, g_##AXIS##_, 0, m, n, bspline_##AXIS##_.Rmin(), bspline_##AXIS##_.Rmax(), false); }); \
Mm1_##AXIS##_ .populate([=](int m, int n) -> Complex { return computeM(bspline_##AXIS##_, g_##AXIS##_, -1, m, n, r##AXIS##min_, r##AXIS##max_, false); }); \
Mm2_##AXIS##_ .populate([=](int m, int n) -> Complex { return computeM(bspline_##AXIS##_, g_##AXIS##_, -2, m, n, bspline_##AXIS##_.Rmin(), bspline_##AXIS##_.Rmax(), false); }); \
\
if (not shared_scratch or IamMaster) \
{ \
D_##AXIS##_ .hdfsave(); \
S_##AXIS##_ .hdfsave(); \
Mm1_##AXIS##_ .hdfsave(); \
Mm2_##AXIS##_ .hdfsave(); \
}