                 catch( dg::Fail& fail){ // a specific exception
                     DG_RANK0 std::cerr << "ERROR failed to converge to "<<fail.epsilon()<<"\n";
                     DG_RANK0 std::cerr << "Does simulation respect CFL condition?"<<std::endl;
-                    abort_program();
+                    DG_RANK0 std::cerr << "Writing last Output and exit..."<<std::endl;
+                    abort = true; // exit gracefully
                 }
                 catch( std::exception& fail) { // more generic exception
                     DG_RANK0 std::cerr << "ERROR in timestepper\n";
                     DG_RANK0 std::cerr << fail.what()<<std::endl;
-                    abort_program();
+                    DG_RANK0 std::cerr << "Writing last Output and exit..."<<std::endl;
+                    abort = true;
                 }
                 dg::Timer tti;
                 tti.tic();


                tti.toc();
                DG_RANK0 std::cout << " Time for internal diagnostics "<<tti.diff()<<"s\n";
            }
            ti.toc();
            //----------------Test if ampere equation holds
            if( p.beta != 0)
            {
                feltor.compute_lapMperpA( resultD);
                double norm  = dg::blas2::dot( resultD, feltor.vol3d(), resultD);

            DG_RANK0 err = nc_close(ncid);
            ti.toc();
            DG_RANK0 std::cout << "\n\t Time for output: "<<ti.diff()<<"s\n\n"<<std::flush;
            if( abort) break;
        }
        t.toc();
        unsigned hour = (unsigned)floor(t.diff()/3600);
