int solve_cg(int k,int l, double q_off, double eps_sq) {
int solve_cg(int k,int l, double q_off, double eps_sq, const int rel_prec) {
int solve_cg(int k,int l, double q_off, double eps_sq) {  static double normsq,pro,err,alpha_cg,beta_cg,squarenorm;  int iteration;    /* initialize residue r and search vector p */    if(g_use_clover_flag == 1){    Q_psi(DUM_SOLVER,k,q_off);    Q_psi(DUM_SOLVER,DUM_SOLVER,q_off);  }  else{    Qtm_pm_psi(spinor_field[DUM_SOLVER], spinor_field[k]);   }  diff(spinor_field[DUM_SOLVER+1],spinor_field[l],spinor_field[DUM_SOLVER], VOLUME/2);  assign(spinor_field[DUM_SOLVER+2], spinor_field[DUM_SOLVER+1], VOLUME/2);  normsq=square_norm(spinor_field[DUM_SOLVER+1], VOLUME/2);  /* main loop */   for(iteration=1;iteration<=ITER_MAX_CG;iteration++) {     if(g_use_clover_flag == 1){       Q_psi(DUM_SOLVER,DUM_SOLVER+2,q_off);       Q_psi(DUM_SOLVER,DUM_SOLVER,q_off);     }     else {       Qtm_pm_psi(spinor_field[DUM_SOLVER], spinor_field[DUM_SOLVER+2]);     }     pro=scalar_prod_r(spinor_field[DUM_SOLVER+2], spinor_field[DUM_SOLVER], VOLUME/2);     alpha_cg=normsq/pro;     assign_add_mul_r(spinor_field[k], spinor_field[DUM_SOLVER+2], alpha_cg, VOLUME/2);     squarenorm = square_norm(spinor_field[k], VOLUME/2);     assign_mul_add_r(spinor_field[DUM_SOLVER], -alpha_cg, spinor_field[DUM_SOLVER+1], VOLUME/2);     err=square_norm(spinor_field[DUM_SOLVER], VOLUME/2);     if (err <= eps_sq){       break;     }     beta_cg = err/normsq;     assign_mul_add_r(spinor_field[DUM_SOLVER+2], beta_cg, spinor_field[DUM_SOLVER], VOLUME/2);     assign(spinor_field[DUM_SOLVER+1], spinor_field[DUM_SOLVER], VOLUME/2);     normsq=err;   }   if(g_proc_id==0) {     sout = fopen(solvout, "a");     fprintf(sout, "CG: iterations: %d  mu: %f eps_sq: %e \n", iteration, g_mu, eps_sq);      fprintf(sout, "Squarenorm is %f\n", squarenorm);     fclose(sout);   }   return iteration;}