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
1.4.7