 //        }
 //};
 
-ANCFSystem::ANCFSystem() {
-
-	tol = 1e-7;
+ANCFSystem::ANCFSystem()
+{
 	maxNewtonIterations = 20;
+
+	// Set default tolerance for Newton iteration
+	// (note that this also sets the rel and abs tolerances for Spike)
+	setTolerance(1e-7);
 
 	// spike stuff
 	partitions = 1;
 	solverOptions.safeFactorization = true;
 	solverOptions.trackReordering = true;
-	solverOptions.relTol = 1e-2 * tol;
-	solverOptions.absTol = 1e-10;
 	solverOptions.maxNumIterations = 10000;
 	solverOptions.precondType = spike::None;
 	//solverOptions.solverType = spike::CG;

		cudaEventRecord(start2, 0);

		bool success = mySolver->solve(*m_spmv, eAll, delta);

		if(!success) {
				isHealthy = 0;

				char filename[100];
				sprintf(filename, "./data/lhs%d.txt",timeIndex);
				cusp::io::write_matrix_market_file(lhs, filename);

				char filename1[100];
				sprintf(filename1, "./data/rhs%d.txt",timeIndex);
				cusp::io::write_matrix_market_file(eAll, filename1);

				std::cout << "STOP" << std::endl;
				exit(0);
		}

		cudaEventRecord(stop2, 0);

		float elapsedTime2;
		cudaEventElapsedTime(&elapsedTime2, start2, stop2);

		spikeSolveTime[it-1] = stats.timeSolve;
		spikeNumIter[it-1] = stats.numIterations;

