00001
00009
00010 #ifndef _ALG_SMEAR_CD_
00011 #define _ALG_SMEAR_CD_
00012 #include <config.h>
00013 #include <alg/alg_base.h>
00014 #include <alg/ape_smear_arg.h>
00015
00016
00017
00018
00019 CPS_START_NAMESPACE
00020
00022
00036 class AlgSmear2:public Alg
00037 {
00038 private:
00039 char *cname;
00040
00041 int bool_su3_proj;
00042 Float tolerance ;
00043 int orthog ;
00044 Matrix* lat_back ;
00045
00046 public:
00047
00048 AlgSmear2( Lattice& lat,
00049 CommonArg* ca ,
00050 int su3_proj );
00051
00052 virtual ~AlgSmear2();
00053
00055 void run();
00056
00058
00062 void set_orthog( int i ) { orthog=i; }
00063
00065
00068 int get_orthog() const { return orthog; }
00069
00071 void set_tol( Float x ) { tolerance = x; }
00072
00074 Float get_tol() const { return tolerance; }
00075
00076 protected:
00077
00079
00084 virtual void smear_link2( Matrix& link,
00085 int* pos,
00086 int mu )=0;
00087
00088
00089 };
00090
00092 void three_staple2(Lattice& latt, Matrix& link, int *pos, int u, int orth);
00093
00095
00096
00098
00099
00101
00102
00104 int su3_proj( Matrix& x , Float tolerance );
00105
00106
00108
00116 class AlgApeSmear2:public AlgSmear2
00117 {
00118 private:
00119
00121 Float c;
00122 char *cname;
00123
00124 public:
00125
00132 AlgApeSmear2(Lattice& lat,
00133 CommonArg* ca ,
00134 ApeSmearArg* asa );
00135
00136 ~AlgApeSmear2()
00137 {;}
00138
00143 void run();
00144
00145 void set_coef( Float x ) { c = x ; }
00146
00147 protected:
00148
00149 void smear_link2( Matrix& mat,
00150 int* pos,
00151 int mu );
00152 };
00153
00154
00155 CPS_END_NAMESPACE
00156 #endif
00157