asq_dsl_s.h

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //  $Id: asq_dsl_s.h,v 3.3 2007/09/01 18:53:55 edwards Exp $
00003 /*! \file
00004  *  \brief The "asq" or "asqtad" dslash operator D'
00005  */
00006 
00007 #ifndef __asqdslash_h__
00008 #define __asqdslash_h__
00009 
00010 #include "linearop.h"
00011 #include "actions/ferm/fermstates/asqtad_state.h"
00012 
00013 
00014 namespace Chroma 
00015 { 
00016   //! The "asq" or "asqtad" dslash operator D'
00017   /*!
00018    * \ingroup linop
00019    *
00020    * This routine is specific to staggered fermions!
00021    *
00022    * Description:
00023    *
00024    * This routine applies the "asq" or "asqtad" operator D' to Psi, 
00025    * putting the result in Chi.
00026    *
00027    *           Nd-1
00028    *           ---
00029    *           \                     F                     
00030    *   chi(x)  :=  >  isign eta  (x) [U  (x) psi(x+mu)
00031    *           /             mu      mu
00032    *           ---
00033    *           mu=0
00034    *
00035    *                    + c_3 U  (x) U  (x+mu) U  (x+2mu) psi(x+3mu) ]
00036    *                             mu     mu        mu
00037    *
00038    *                 Nd-1
00039    *                 ---
00040    *                 \                      +F
00041    *                -    >  isign eta  (x)  [U  (x-mu) psi(x-mu)
00042    *                 /             mu       mu
00043    *                 ---
00044    *                 mu=0
00045    *
00046    *                             +      +          +
00047    *                    + c_3 U  (x) U  (x-2mu) U  (x-3mu) psi(x-3mu) ]
00048    *                             mu     mu         mu
00049    * Note the KS phase factors are already included in the U's!
00050    */
00051 
00052   class QDPStaggeredDslash : public DslashLinearOperator< 
00053     LatticeStaggeredFermion, multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
00054   {  
00055   public:
00056     // Typedefs to save typing
00057     typedef LatticeStaggeredFermion      T;
00058     typedef multi1d<LatticeColorMatrix>  P;
00059     typedef multi1d<LatticeColorMatrix>  Q;
00060 
00061     //! Empty constructor. Must use create later
00062     QDPStaggeredDslash() {}
00063  
00064     //! Full constructor
00065     QDPStaggeredDslash(Handle<AsqtadConnectStateBase> state_)
00066     {create(state_);}
00067  
00068     //! Creation routine  
00069     void create(Handle<AsqtadConnectStateBase> state_);
00070  
00071     //! No real need for cleanup here
00072     ~QDPStaggeredDslash() {}
00073 
00074     /*! Arguments:
00075      *
00076      *  \param u_fat     Fat7 links                                     (Read)
00077      *  \param u_triple  triple links                                   (Read)
00078      *  \param psi       Pseudofermion field - Source                   (Read)
00079      *  \param isign     D' or D'^+  ( +1 | -1 ) respectively           (Read)
00080      *  \param cb              Checkerboard of OUTPUT vector                    (Read) 
00081      */
00082     void apply (LatticeStaggeredFermion& chi, const LatticeStaggeredFermion& psi, 
00083                 enum PlusMinus isign, int cb) const;
00084   
00085     //! Subset is all here
00086     const Subset& subset() const {return all;}
00087     
00088     //! Return the fermion BC object for this linear operator
00089     const FermBC<T,P,Q>& getFermBC() const {return state->getBC();}
00090 
00091   private:
00092     Handle<AsqtadConnectStateBase> state;
00093   };
00094 
00095 } // End Namespace Chroma
00096 
00097 
00098 #endif
00099 
00100 

Generated on Sun Nov 22 04:28:49 2009 for CHROMA by  doxygen 1.4.7