Skip to content
maddyscientist edited this page Nov 23, 2021 · 1 revision

QUDA has multiple options for using clover fermions with the host application. One can either use the application-provided clover field, or delegate responsibility for the construction of the clover field to QUDA. The latter is preferable in terms of reducing exposure to host-device transfer overheads, however, at present the clover-field construction in QUDA does not support anisotropic lattices. Furthermore, the clover field constructed in QUDA can be copied back to the host application if desired.

The interface options of relevance here are these members, belonging to QudaInvertParam:

    int compute_clover;                    /**< Whether to compute the clover field */
    int compute_clover_inverse;            /**< Whether to compute the clover inverse field */
    int return_clover;                     /**< Whether to copy back the clover matrix field */
    int return_clover_inverse;             /**< Whether to copy back the inverted clover matrix field */

When it comes to implementing preconditioned clover fermions, one has the choice as to whether to explicitly store the clover inverse (doubling the memory footprint for clover storage) or to dynamically invert each clover matrix on demand. The CMake option QUDA_CLOVER_DYNAMIC controls whether this is enabled or not. For twisted-clover fermions, it is almost always preferable to utilize this option, to avoid loading both the clover field, and the inverse of its square.

Finally, the CMake option QUDA_CLOVER_RECONSTRUCT determines whether the full clover matrix is stored (72 numbers per site for Nc=3), or if it is compressed when stored in memory (56 numbers per site for Nc=3), and reconstructed on demand when loaded for computation. Clover reconstruction requires QUDA_CLOVER_DYNAMIC=ON, since only the clover field, and not its inverse, possess the required symmetry. If applied, clover reconstruction will be applied for all internal computations in QUDA, and explicit storage of the full clover field will only be applied when interfacing with the host.

The default option in QUDA is to enable both QUDA_CLOVER_RECONSTRUCT and QUDA_CLOVER_DYNAMIC.

Clone this wiki locally