00001
00002
00003
00004
00005
00006
00007 #ifndef AVP_BGLF_SOLVER_H
00008 #define AVP_BGLF_SOLVER_H
00009
00010 #include "chromabase.h"
00011 #include "avp_inverter_interface.h"
00012
00013 extern "C" {
00014 struct MIT_bluelightf_DWF_Gauge;
00015 struct MIT_bluelightf_DWF_Fermion;
00016 };
00017
00018 namespace Chroma
00019 {
00020
00021
00022
00023
00024
00025
00026 namespace AVPSolver
00027 {
00028
00029 class BGLDWFSolverF : public AVPSolverInterface< MIT_bluelightf_DWF_Gauge, MIT_bluelightf_DWF_Fermion >
00030 {
00031 public:
00032 protected:
00033 MIT_bluelightf_DWF_Fermion* loadFermionRHS(const void* OuterFermion) const;
00034 MIT_bluelightf_DWF_Fermion* loadFermionGuess(const void *OuterFermion) const;
00035 MIT_bluelightf_DWF_Fermion* allocateFermion(void) const ;
00036 void saveFermionSolver(void *OuterFermion,
00037 MIT_bluelightf_DWF_Fermion* CGFermion) const;
00038
00039 void saveFermionOperator(void *OuterFermion,
00040 MIT_bluelightf_DWF_Fermion* CGFermion) const;
00041
00042 void deleteFermion(MIT_bluelightf_DWF_Fermion* ptr) const;
00043 int cgInternal(MIT_bluelightf_DWF_Fermion *psi,
00044 double *out_eps,
00045 int *out_iter,
00046 double M,
00047 double m_f,
00048 const MIT_bluelightf_DWF_Fermion *x0,
00049 const MIT_bluelightf_DWF_Fermion *eta,
00050 double eps,
00051 int min_iter,
00052 int max_iter) const;
00053 public:
00054 void loadGauge(const void *u,
00055 const void *v);
00056
00057 void deleteGauge(void);
00058
00059
00060 int init(const int lattice[5],
00061 void *(*allocator)(size_t size),
00062 void (*deallocator)(void *));
00063
00064
00065 void fini(void);
00066 private:
00067 MIT_bluelightf_DWF_Gauge *g;
00068 };
00069 }
00070
00071
00072 }
00073
00074 #endif