Staggered fermions (UK style)

Introduction

This page describes staggered fermions in the Chroma library from a UK perspective. There are two groups of  people using staggered fermions in Chroma. One group is based in the UK (at the moment at least), and the other group is led by Kostas Orginos. This page deals with the UK based code. The differences between the two groups are on the main programs and top level routines. They both share the same inverters and data structures.

In Chroma there are inverters for:
  • Asqtad improved staggered fermions
  • HISQ improved staggered fermions
In principle it should be easy to also include naive staggered fermions, but why bother, since they have large O(a**2) errors. There is no code in Chroma to compute the force, so the code is used for measurements. The plan is use the MILC code for improved staggered configuration generation..

Data structures.

Some important data structures for staggered fermions in Chroma. To access the internal structure you need to use the peek and poke function. The staggered data structures are the same as for the Wilson like fermions, except that the number of spin indices are hard wired to be one.


 Chroma type
 Base type
 hidden indicies
 LatticeStaggeredFermion Complex spacetime-volume,  colour_src
 LatticeStaggeredPropagator Complex
spacetime-volume,colour-src,colour-sink
 


The improved staggered inverter

 
Below is a piece of code that computes an improved staggered quark propagator from a single source.

// Typedefs to save typing
  typedef LatticeStaggeredFermion      T;
  typedef multi1d<LatticeColorMatrix>  P;
  typedef multi1d<LatticeColorMatrix>  Q;

Handle< StaggeredTypeFermAct< T,P,Q> > fermact(TheStagTypeFermActFactory::Instance().createObject(input.param.fermact.id, fermact_reader, input.param.fermact.path));
  // Cast of a pointer to a reference?
  StaggeredTypeFermAct<T,P,Q>& S_f= *(fermact);


  // Set up a state for the current u, (gauge fields)
  // (compute fat & triple links)
  // Use S_f.createState so that S_f can pass in u0

  Handle< FermState<T,P,Q> > state(S_f.createState(u)) ;

  // Compute the propagator for given source colour
  SystemSolverResults_t res = (*qprop)(psi, q_source);
   ncg_had += res.n_count;

There is an interface to the SciDac qopqdp library. There are some notes on how to compile the code to take advantage of this optimized code. These are attached at the bottom of this page.

The HISQ inverter

Chroma ncludes a HISQ inverter as the action described in:
 Highly improved staggered quarks on the lattice, with applications to charm physics.
By HPQCD Collaboration and UKQCD Collaboration (E. Follana et al.)..
Published in Phys.Rev.D75:054502,2007, e-Print: hep-lat/0610092

The code has been tested against Eduardo Follana's code for a small lattice.

The code has now been integrated into the Chroma world view,
so that either the HISQ or ASQTAD action can be selected at
run time. See: chroma/tests/spectrum_s/
The correction to the Naik term, epsilon (equation 24 in the above paper) is NOT
automatically included, so must be loaded from the input file.
This correction will (maybe) be computed in perturbation theory one day.

       <FermionAction>
          <FermAct>HISQ</FermAct>
          <Mass>0.1</Mass>
<u0>1.0</u0>
<epsilon>-0.21</epsilon>
          <FermState>
            <Name>SIMPLE_FERM_STATE</Name>
            <FermionBC>
              <FermBC>SIMPLE_FERMBC</FermBC>
              <boundary>1 1 1 1</boundary>
            </FermionBC>
          </FermState>
        </FermionAction>


No doubt having epsilon as a input parameter will cause some confusion.
The HISQ inverter ignores the value of U0.



Application codes.

The main work program used is mainprogs/main/spectrum_s.cc
There are some example input xml files in  the directory tests/spectrum_s/

The spectrum_s application code is written in the style of chroma that was typically used around 2004. We have not found time to upgrade to the more modern xml
programming style. Essentially different measurements are slotted by switching on and off boolean variables in the XML.

The applications that code will do are:
  • Computation of the correlators Goldstone Pion with local or stochastic wall sources
  • Computation of variational smearing of meson operators
  • Computation of disconnected diagrams for the pseudo-scalar and scalar channels using a variety of variance redictiion techniques
  • Computation of vector correlators
  • Computation of all 8 scalar and pseudo-scalar correlators for operators on a specific time slice
  • Computation of the correlators for the local nucleon operator
You should carefully check any routines that you use.

There are simpler simpler wrappers to the inverters in the directory chroma/mainprogs/tests

Developers guide to staggered fermions in Chroma


History of staggered development in Chroma

The original Asqtad inverter was recoded from SZIN and debugged by Steve Miller (Liverpool graduate student). The code was checked against the MILC code.
The staggered measurement code was developed by Eric Gregory, Alan Irving, Craig McNeile,  Chris Richards, and Zbyszek Sroczynski. Balint Joo made a
number of important changes and design decisions.
ċ
readme_level3_staggered.txt
(4k)
Craig McNeile,
26 Mar 2009, 04:54
Comments