JeffersonLab / chroma

The Chroma Software System for Lattice QCD
http://jeffersonlab.github.io/chroma
Other
58 stars 50 forks source link

feature/swf #62

Open GioPede opened 3 years ago

GioPede commented 3 years ago

Hello, this is a modification to the QDPCloverTerm and CloverFermActParams classes to allow calculations with the exponential version of the Wilson Clover Action (or Stabilized Wilson Fermions), see DOI: 10.1016/j.cpc.2020.107355 for more details. I had contacted B. Joo about a year ago, the solution I made then (and that I have been using since) was not really the optimal one, as it required a lot of file duplication. This version here instead adds an optional parameter to the clover action , which defaults to false, the regular case. If it is true then some small changes are made in the creation of the CloverTerm linear operator and an exponentiate function is called.

The changes to the file lib/actions/ferm/linop/clover_term_qdp_w.h are minimal, and hopefully not breaking for any existing code. The changes in the lib/actions/ferm/fermacts/clover_fermact_params_w.h and lib/actions/ferm/fermacts/clover_fermact_params_w.cc since the new parameter default to false surely are non breaking. There is just a new file that I called lib/actions/ferm/linop/clover_term_qdp_stabilized_helpers.h that contains the exponentiation of the clover term at the lattice site level. This latter is also added to the proper Makefile.am. (Probably one needs to add it to the CMakeLists.txt file, but I have little experience with those for chroma, so I'd rather have a later commit fix it)

The implementation right now only works with solvers that load the linear operator from the CPU and do not build it directly on an accelerator. I have tested this with the regular CLOVER solver, the QUDA_CLOVER_INVERTER and QPHIX_CLOVER_INVERTER solvers, all with results that are within the solver precision. These have also been compared with my old implementation which was tested against the openQCD version of the solver used in the paper linked above.

This only works for spectroscopy, not for gauge generation, as there are no derivatives implemented for this new action yet.