00001 // -*- C++ -*- 00002 // $Id: asqtad_mdagm_s.h,v 3.1 2007/02/22 21:11:46 bjoo Exp $ 00003 /*! \file 00004 * \brief Unpreconditioned Wilson fermion linear operator 00005 */ 00006 // NEW $Id: asqtad_linop_s.h 2003/11/13 steve 00007 // Asqtad Staggered fermion linear operator 00008 00009 #ifndef __asqtad_mdagm_s_h__ 00010 #define __asqtad_mdagm_s_h__ 00011 00012 #include "linearop.h" 00013 #include "actions/ferm/linop/asqtad_dslash.h" 00014 00015 00016 00017 namespace Chroma 00018 { 00019 //! Asqtad Staggered-Dirac operator 00020 /*! 00021 * \ingroup linop 00022 * 00023 * This routine is specific to Staggered fermions! 00024 * 00025 * + 00026 * This subroutine applies the matrix or (M M) to the vector 00027 * E,E 00028 * Psi, 00029 * 00030 * { ~ 00031 * { M(U) . Psi if ISign = PLUS 00032 * Chi = { 00033 * { ~ + 00034 * { M(U) . Psi if ISign = MINUS 00035 * NEED TO THINK MORE ABOUT THE ISIGN HERE AS IS IT NOT REALLY NEEDED!!! 00036 * FOR NOW JUST CALL THIS ROUTINE WITH A PLUS!! 00037 00038 * Algorithm: 00039 00040 * The kernel for Staggered fermions is 00041 * + 00042 * (M M) = 4m**2 - D D 00043 * E EO OE 00044 */ 00045 00046 class AsqtadMdagM : public DiffLinearOperator<LatticeStaggeredFermion, 00047 multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> > 00048 { 00049 public: 00050 //! Partial constructor 00051 AsqtadMdagM() {} 00052 00053 //! Full constructor 00054 AsqtadMdagM(Handle<AsqtadConnectStateBase> state, const Real& Mass_) 00055 {create(state, Mass_);} 00056 00057 //! Creation routine 00058 void create(Handle<AsqtadConnectStateBase> state, const Real& Mass_); 00059 00060 //! Destructor is automatic 00061 ~AsqtadMdagM() {} 00062 00063 //! Only defined on the even subset 00064 const Subset& subset() const {return rb[0];} 00065 00066 //! Return the fermion BC object for this linear operator 00067 const FermBC<LatticeStaggeredFermion, 00068 multi1d<LatticeColorMatrix>, 00069 multi1d<LatticeColorMatrix> >& getFermBC() const {return D.getFermBC();} 00070 00071 //! Apply the operator onto a source vector 00072 void operator() (LatticeStaggeredFermion& chi, const LatticeStaggeredFermion& psi, enum PlusMinus isign) const; 00073 00074 private: 00075 Real Mass; 00076 AsqtadDslash D; 00077 }; 00078 00079 00080 } // End Namespace Chroma 00081 00082 00083 #endif
1.4.7