@@ -40,17 +40,17 @@ namespace pfasst
4040 *
4141 * @ingroup AdvectionDiffusion
4242 */
43- error_map run_mpi_pfasst (double abs_residual_tol, size_t niters=4 )
43+ error_map run_mpi_pfasst (const double abs_res_tol, const double rel_res_tol,
44+ const size_t niters, const size_t nsteps, const double dt,
45+ const size_t ndofs_f, const size_t ndofs_c,
46+ const size_t nnodes_f, const size_t nnodes_c)
4447 {
45- const size_t nsteps = 4 ;
46- const double dt = 0.01 ;
47-
4848 vector<pair<size_t , quadrature::QuadratureType>> nodes = {
49- { 3 , quadrature::QuadratureType::GaussLobatto },
50- { 5 , quadrature::QuadratureType::GaussLobatto }
49+ { nnodes_c , quadrature::QuadratureType::GaussLobatto },
50+ { nnodes_f , quadrature::QuadratureType::GaussLobatto }
5151 };
5252
53- vector<size_t > ndofs = { 64 , 128 };
53+ vector<size_t > ndofs = { ndofs_c, ndofs_f };
5454
5555 auto build_level = [ndofs](size_t level) {
5656 auto factory = make_shared<MPIVectorFactory<double >>(ndofs[level]);
@@ -75,7 +75,7 @@ namespace pfasst
7575 pf.set_comm (&comm);
7676 pf.set_duration (0.0 , nsteps * dt, dt, niters);
7777 pf.set_nsweeps ({2 , 1 });
78- pf.get_finest <AdvectionDiffusionSweeper<>>()->set_residual_tolerances (abs_residual_tol, 0.0 );
78+ pf.get_finest <AdvectionDiffusionSweeper<>>()->set_residual_tolerances (abs_res_tol, rel_res_tol );
7979 pf.set_options ();
8080 pf.run ();
8181
@@ -94,7 +94,20 @@ int main(int argc, char** argv)
9494 pfasst::init (argc, argv,
9595 pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_opts,
9696 pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_logs);
97- pfasst::examples::advection_diffusion::run_mpi_pfasst (0.0 );
97+
98+ const double tend = pfasst::config::get_value<double >(" tend" , 0.04 );
99+ const double dt = pfasst::config::get_value<double >(" dt" , 0.01 );
100+ const size_t nnodes_f = pfasst::config::get_value<size_t >(" num_nodes" , 5 );
101+ const size_t ndofs_f = pfasst::config::get_value<size_t >(" spatial_dofs" , 128 );
102+ const size_t niters = pfasst::config::get_value<size_t >(" num_iter" , 4 );
103+ const double abs_res_tol = pfasst::config::get_value<double >(" abs_res_tol" , 0.0 );
104+ const double rel_res_tol = pfasst::config::get_value<double >(" rel_res_tol" , 0.0 );
105+
106+ const size_t nsteps = tend / dt;
107+ const size_t nnodes_c = (nnodes_f + 1 ) / 2 ;
108+ const size_t ndofs_c = ndofs_f / 2 ;
109+
110+ pfasst::examples::advection_diffusion::run_mpi_pfasst (abs_res_tol, rel_res_tol, niters, nsteps, dt, ndofs_f, ndofs_c, nnodes_f, nnodes_c);
98111 fftw_cleanup ();
99112 MPI_Finalize ();
100113}
0 commit comments