END_CODE("EvenOddPrecWilsonTypeFermActArray::qprop");
END_CODE("EvenOddPrecWilsonTypeFermActArray::qpropT");
void qprop_t(const EvenOddPrecWilsonTypeFermAct< multi1d<T> >& me,	     multi1d<T>& psi, 	     Handle<const ConnectState> state, 	     const multi1d<T>& chi, 	     enum InvType invType,	     const Real& RsdCG, 	     int MaxCG, int& ncg_had){  START_CODE("EvenOddPrecWilsonTypeFermActArray::qprop");  int n_count;    /* Construct the linear operator */  /* This allocates field for the appropriate action */  Handle<const EvenOddPrecLinearOperator< multi1d<T> > > A(me.linOp(state));  /* Step (i) */  /* chi_tmp =  chi_o - D_oe * A_ee^-1 * chi_e */  multi1d<T> chi_tmp(me.size());  {    multi1d<T> tmp1(me.size());    multi1d<T> tmp2(me.size());    A->evenEvenInvLinOp(tmp1, chi, PLUS);    A->oddEvenLinOp(tmp2, tmp1, PLUS);    for(int n=0; n < me.size(); ++n)      chi_tmp[n][rb[1]] = chi[n] - tmp2[n];  }  switch(invType)  {  case CG_INVERTER:   {    /* chi_1 = M_dag(u) * chi_1 */    multi1d<T> tmp(me.size());    (*A)(tmp, chi_tmp, MINUS);        /* psi = (M^dag * M)^(-1) chi */    InvCG2 (*A, tmp, psi, RsdCG, MaxCG, n_count);  }  break;  #if 0  case MR_INVERTER:    /* psi = M^(-1) chi */    InvMR (*A, chi, psi, MRover, RsdCG, MaxCG, n_count);    break;  case BICG_INVERTER:    /* psi = M^(-1) chi */    InvBiCG (*A, chi, psi, RsdCG, MaxCG, n_count);    break;#endif    default:    QDP_error_exit("Unknown inverter type", invType);  }    if ( n_count == MaxCG )    QDP_error_exit("no convergence in the inverter", n_count);    ncg_had = n_count;    /* Step (ii) */  /* psi_e = A_ee^-1 * [chi_e  -  D_eo * psi_o] */  {    multi1d<T> tmp1(me.size());    multi1d<T> tmp2(me.size());    A->evenOddLinOp(tmp1, psi, PLUS);    for(int n=0; n < me.size(); ++n)      tmp2[n][rb[0]] = chi[n] - tmp1[n];    A->evenEvenInvLinOp(psi, tmp2, PLUS);  }    END_CODE("EvenOddPrecWilsonTypeFermActArray::qprop");}