mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-04 14:04:32 +00:00 
			
		
		
		
	Domain wall fermions now invert ; have the basis set up for
Tanh/Zolo * (Cayley/PartFrac/ContFrac) * (Mobius/Shamir/Wilson) Approx Representation Kernel. All are done with space-time taking part in checkerboarding, Ls uncheckerboarded Have only so far tested the Domain Wall limit of mobius, and at that only checked that it i) Inverts ii) 5dim DW == Ls copies of 4dim D2 iii) MeeInv Mee == 1 iv) Meo+Mee+Moe+Moo == M unprec. v) MpcDagMpc is hermitan vi) Mdag is the adjoint of M between stochastic vectors. That said, the RB schur solve, RB MpcDagMpc solve, Unprec solve all converge and the true residual becomes small; so pretty good tests.
This commit is contained in:
		@@ -125,39 +125,7 @@ namespace Grid {
 | 
			
		||||
     };
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    // Chroma interface defining GaugeAction
 | 
			
		||||
    /*
 | 
			
		||||
      template<typename P, typename Q>   class GaugeAction
 | 
			
		||||
  virtual const CreateGaugeState<P,Q>& getCreateState() const = 0;
 | 
			
		||||
  virtual GaugeState<P,Q>* createState(const Q& q) const
 | 
			
		||||
  virtual const GaugeBC<P,Q>& getGaugeBC() const
 | 
			
		||||
  virtual const Set& getSet(void) const = 0;
 | 
			
		||||
  virtual void deriv(P& result, const Handle< GaugeState<P,Q> >& state) const 
 | 
			
		||||
  virtual Double S(const Handle< GaugeState<P,Q> >& state) const = 0;
 | 
			
		||||
 | 
			
		||||
  class LinearGaugeAction : public GaugeAction< multi1d<LatticeColorMatrix>, multi1d<LatticeColorMatrix> >
 | 
			
		||||
  typedef multi1d<LatticeColorMatrix>  P;
 | 
			
		||||
  typedef multi1d<LatticeColorMatrix>  Q;
 | 
			
		||||
  virtual void staple(LatticeColorMatrix& result,
 | 
			
		||||
		      const Handle< GaugeState<P,Q> >& state,
 | 
			
		||||
		      int mu, int cb) const = 0;
 | 
			
		||||
    */
 | 
			
		||||
 | 
			
		||||
    // Chroma interface defining FermionAction
 | 
			
		||||
    /*
 | 
			
		||||
     template<typename T, typename P, typename Q>  class FermAct4D : public FermionAction<T,P,Q>
 | 
			
		||||
     virtual LinearOperator<T>* linOp(Handle< FermState<T,P,Q> > state) const = 0;
 | 
			
		||||
     virtual LinearOperator<T>* lMdagM(Handle< FermState<T,P,Q> > state) const = 0;
 | 
			
		||||
     virtual LinOpSystemSolver<T>* invLinOp(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     virtual MdagMSystemSolver<T>* invMdagM(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     virtual LinOpMultiSystemSolver<T>* mInvLinOp(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     virtual MdagMMultiSystemSolver<T>* mInvMdagM(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     virtual MdagMMultiSystemSolverAccumulate<T>* mInvMdagMAcc(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     virtual SystemSolver<T>* qprop(Handle< FermState<T,P,Q> > state,
 | 
			
		||||
     class DiffFermAct4D : public FermAct4D<T,P,Q>
 | 
			
		||||
     virtual DiffLinearOperator<T,Q,P>* linOp(Handle< FermState<T,P,Q> > state) const = 0;
 | 
			
		||||
     virtual DiffLinearOperator<T,Q,P>* lMdagM(Handle< FermState<T,P,Q> > state) const = 0;
 | 
			
		||||
    */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -58,6 +58,8 @@
 | 
			
		||||
 | 
			
		||||
/* Compute the partial fraction expansion coefficients (alpha) from the
 | 
			
		||||
 * factored form */
 | 
			
		||||
namespace Grid {
 | 
			
		||||
namespace Approx {
 | 
			
		||||
 | 
			
		||||
static void construct_partfrac(izd *z) {
 | 
			
		||||
  int dn = z -> dn, dd = z -> dd, type = z -> type;
 | 
			
		||||
@@ -291,7 +293,7 @@ static void sncndnFK(INTERNAL_PRECISION u, INTERNAL_PRECISION k,
 | 
			
		||||
 * Set type = 0 for the Zolotarev approximation, which is zero at x = 0, and
 | 
			
		||||
 * type = 1 for the approximation which is infinite at x = 0. */
 | 
			
		||||
 | 
			
		||||
zolotarev_data* bfm_zolotarev(PRECISION epsilon, int n, int type) {
 | 
			
		||||
zolotarev_data* grid_zolotarev(PRECISION epsilon, int n, int type) {
 | 
			
		||||
  INTERNAL_PRECISION A, c, cp, kp, ksq, sn, cn, dn, Kp, Kj, z, z0, t, M, F,
 | 
			
		||||
    l, invlambda, xi, xisq, *tv, s, opl;
 | 
			
		||||
  int m, czero, ts;
 | 
			
		||||
@@ -412,7 +414,7 @@ zolotarev_data* bfm_zolotarev(PRECISION epsilon, int n, int type) {
 | 
			
		||||
  return zd;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
zolotarev_data* bfm_higham(PRECISION epsilon, int n) {
 | 
			
		||||
zolotarev_data* grid_higham(PRECISION epsilon, int n) {
 | 
			
		||||
  INTERNAL_PRECISION A, M, c, cp, z, z0, t, epssq;
 | 
			
		||||
  int m, czero;
 | 
			
		||||
  zolotarev_data *zd;
 | 
			
		||||
@@ -502,6 +504,7 @@ zolotarev_data* bfm_higham(PRECISION epsilon, int n) {
 | 
			
		||||
  free(d);
 | 
			
		||||
  return zd;
 | 
			
		||||
}
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
#ifdef TEST
 | 
			
		||||
 | 
			
		||||
@@ -707,4 +710,6 @@ int main(int argc, char** argv) {
 | 
			
		||||
 | 
			
		||||
  return EXIT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif /* TEST */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,8 @@
 | 
			
		||||
/* -*- Mode: C; comment-column: 22; fill-column: 79; -*- */
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
namespace Grid {
 | 
			
		||||
namespace Approx {
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#define HVERSION Header Time-stamp: <14-OCT-2004 09:26:51.00 adk@MISSCONTRARY>
 | 
			
		||||
@@ -76,10 +77,10 @@ typedef struct {
 | 
			
		||||
 * zolotarev_data structure. The arguments must satisfy the constraints that
 | 
			
		||||
 * epsilon > 0, n > 0, and type = 0 or 1. */
 | 
			
		||||
 | 
			
		||||
ZOLOTAREV_DATA* bfm_higham(PRECISION epsilon, int n) ;
 | 
			
		||||
ZOLOTAREV_DATA* bfm_zolotarev(PRECISION epsilon, int n, int type);
 | 
			
		||||
ZOLOTAREV_DATA* grid_higham(PRECISION epsilon, int n) ;
 | 
			
		||||
ZOLOTAREV_DATA* grid_zolotarev(PRECISION epsilon, int n, int type);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
}}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user