00001 // -*- C++ -*- 00002 // $Id: asqtad_cps_wrapper_qprop.h,v 3.7 2007/12/08 11:26:53 mcneile Exp $ 00003 /*! \file 00004 * \brief Propagator solver for an even-odd non-preconditioned fermion operator 00005 * 00006 * Solve for the propagator of an even-odd non-preconditioned fermion operator 00007 */ 00008 00009 #ifndef ASQTAD_CPS_WRAPPER_QPROP_H 00010 #define ASQTAD_CPS_WRAPPER_QPROP_H 00011 00012 00013 #include "chromabase.h" 00014 #include "handle.h" 00015 //#include "invtype.h" 00016 #include "syssolver.h" 00017 #include "linearop.h" 00018 #include "fermact.h" 00019 #include "actions/ferm/invert/syssolver_cg_params.h" 00020 #include "state.h" 00021 #include "actions/ferm/invert/syssolver_cg_params.h" 00022 #include "stagtype_fermact_s.h" 00023 #include "actions/ferm/fermstates/asqtad_state.h" 00024 00025 namespace Chroma 00026 { 00027 00028 //! QPROP for wrapping CPS asqtad QPROP 00029 /*! \ingroup qprop 00030 * 00031 */ 00032 class AsqtadCPSWrapperQprop : public SystemSolver<LatticeStaggeredFermion> 00033 { 00034 public: 00035 // Typedefs to save typing 00036 typedef LatticeStaggeredFermion T; 00037 typedef multi1d<LatticeColorMatrix> P; 00038 typedef multi1d<LatticeColorMatrix> Q; 00039 00040 //! Constructor 00041 /*! 00042 // Keeping the same interface as for the ordinary staggered 00043 // qprop... 00044 // 00045 // But the M_ and A_ linop handles are no longer kept 00046 // (are ignored) -- is there a nice way around this ? 00047 // Perhaps not 00048 */ 00049 AsqtadCPSWrapperQprop( 00050 const EvenOddStaggeredTypeFermAct<T,P,Q>& S_, 00051 Handle< FermState<T,P,Q> > state, 00052 const SysSolverCGParams& invParam_); 00053 00054 //! Destructor is automatic 00055 ~AsqtadCPSWrapperQprop(); 00056 00057 //! Return the subset on which the operator acts 00058 const Subset& subset() const {return all;} 00059 00060 //! Solver the linear system 00061 /*! 00062 * \param psi quark propagator ( Modify ) 00063 * \param chi source ( Read ) 00064 * \return number of CG iterations 00065 */ 00066 SystemSolverResults_t operator() (LatticeStaggeredFermion& psi, const LatticeStaggeredFermion& chi) const; 00067 00068 00069 private: 00070 // Hide default constructor 00071 AsqtadCPSWrapperQprop() {} 00072 00073 Real Mass; 00074 SysSolverCGParams invParam; 00075 // Handle< FermState<T,P,Q> > state; 00076 Handle<AsqtadConnectStateBase> state; 00077 00078 Handle< EvenOddLinearOperator<T,P,Q> > M; 00079 00080 }; 00081 00082 } // End namespace 00083 00084 #endif 00085
1.4.7