aportelli / Hadrons

Grid-based workflow management system for lattice field theory simulations
GNU General Public License v2.0
23 stars 32 forks source link

Module support for higher representations #87

Open edbennett opened 2 years ago

edbennett commented 2 years ago

Even after the fix in #86, one cannot use Hadrons for many things in higher representations, as none of the modules support any inputs other than the fundamental rep.

To rectify this, most modules need to have higher-representation versions registered and instantiated.

The most obvious way I can see to achieve this is to take lines 75–80 of Global.hpp and duplicate them to create FIMPL_ADJ, FIMPL_ASY and FIMPL_SYM (or similar), and then look for every (or at least almost every) instantiation of a module using FIMPL and duplicate it for the three higher representations.

I have a prototype that takes this approach just enough to allow a spectrum computation in the adjoint rep (so editing just MSource::Z2, MAction::Wilson, MSolver::RBPrecCG, MFermion::GaugeProp, and MContraction::Meson, and referring to WilsonAdjImplR explicitly), and it does seem work (giving compatible results with HiRep's measure_spectrum using Z2SEMWall sources).

(The solution is complicated by contractions—in that case there would be a minor combinatoric explosion if every combination of representations had to be dealt with (which presumably it would need to if you wanted to allow for chimera baryons and such things). I'm not sure how best to deal with that.)

@aportelli Does that seem a reasonable starting point for an implementation? (I ask because I'm happy to implement and PR it.) Or do you prefer a different solution that I haven't spotted? (Or is there some other way that I've missed of doing this without needing to implement the template instantiations and module registrations the Hadrons source—e.g. registering my own versions of the modules? The instantiation issues I've had suggest that that won't work, but it's entirely possible that I've missed something.)

Thanks!