diff --git a/examples/compute_tof_from_files.cpp b/examples/compute_tof_from_files.cpp index fd78e404..4b9e20ce 100644 --- a/examples/compute_tof_from_files.cpp +++ b/examples/compute_tof_from_files.cpp @@ -133,6 +133,10 @@ main(int argc, char** argv) } else { use_multidim_upwind = param.getDefault("use_multidim_upwind", false); } + bool compute_tracer = param.getDefault("compute_tracer", false); + if (use_dg && compute_tracer) { + THROW("DG for tracer not yet implemented."); + } // Write parameters used for later reference. bool output = param.getDefault("output", true); @@ -158,12 +162,17 @@ main(int argc, char** argv) Opm::time::StopWatch transport_timer; transport_timer.start(); std::vector tof; + std::vector tracer; if (use_dg) { Opm::TransportModelTracerTofDiscGal tofsolver(grid, use_cvi, use_limiter); tofsolver.solveTof(&flux[0], &porevol[0], &src[0], dg_degree, tof); } else { Opm::TransportModelTracerTof tofsolver(grid, use_multidim_upwind); - tofsolver.solveTof(&flux[0], &porevol[0], &src[0], tof); + if (compute_tracer) { + tofsolver.solveTofTracer(&flux[0], &porevol[0], &src[0], tof, tracer); + } else { + tofsolver.solveTof(&flux[0], &porevol[0], &src[0], tof); + } } transport_timer.stop(); double tt = transport_timer.secsSinceStart(); @@ -175,5 +184,14 @@ main(int argc, char** argv) std::ofstream tof_stream(tof_filename.c_str()); tof_stream.precision(16); std::copy(tof.begin(), tof.end(), std::ostream_iterator(tof_stream, "\n")); + if (compute_tracer) { + std::string tracer_filename = output_dir + "/tracer.txt"; + std::ofstream tracer_stream(tracer_filename.c_str()); + tracer_stream.precision(16); + const int nt = tracer.size()/grid.number_of_cells; + for (int i = 0; i < nt*grid.number_of_cells; ++i) { + tracer_stream << tracer[i] << (((i + 1) % nt == 0) ? '\n' : ' '); + } + } } }