@@ -16,6 +16,7 @@ using namespace std;
1616#include < fftw3.h>
1717
1818#include < pfasst.hpp>
19+ #include < pfasst/logging.hpp>
1920#include < pfasst/controller/pfasst.hpp>
2021#include < pfasst/mpi_communicator.hpp>
2122#include < pfasst/encap/automagic.hpp>
@@ -40,17 +41,24 @@ namespace pfasst
4041 *
4142 * @ingroup AdvectionDiffusion
4243 */
43- error_map run_mpi_pfasst (double abs_residual_tol, size_t niters=4 )
44+ error_map run_mpi_pfasst (const double abs_res_tol, const double rel_res_tol,
45+ const size_t niters, const size_t nsteps, const double dt,
46+ const size_t ndofs_f, const size_t ndofs_c,
47+ const size_t nnodes_f, const size_t nnodes_c)
4448 {
45- const size_t nsteps = 4 ;
46- const double dt = 0.01 ;
47-
49+ CLOG (INFO, " Advec" ) << " abs_res_tol: " << abs_res_tol << " , "
50+ << " rel_res_tol: " << rel_res_tol << " , "
51+ << " niter: " << niters << " , "
52+ << " nsteps: " << nsteps << " , "
53+ << " dt: " << dt << " , "
54+ << " ndofs (f-c): " << ndofs_f << " -" << ndofs_c << " , "
55+ << " nnodes (f-c): " << nnodes_f << " -" << nnodes_c;
4856 vector<pair<size_t , quadrature::QuadratureType>> nodes = {
49- { 3 , quadrature::QuadratureType::GaussLobatto },
50- { 5 , quadrature::QuadratureType::GaussLobatto }
57+ { nnodes_c , quadrature::QuadratureType::GaussLobatto },
58+ { nnodes_f , quadrature::QuadratureType::GaussLobatto }
5159 };
5260
53- vector<size_t > ndofs = { 64 , 128 };
61+ vector<size_t > ndofs = { ndofs_c, ndofs_f };
5462
5563 auto build_level = [ndofs](size_t level) {
5664 auto factory = make_shared<MPIVectorFactory<double >>(ndofs[level]);
@@ -75,7 +83,7 @@ namespace pfasst
7583 pf.set_comm (&comm);
7684 pf.set_duration (0.0 , nsteps * dt, dt, niters);
7785 pf.set_nsweeps ({2 , 1 });
78- pf.get_finest <AdvectionDiffusionSweeper<>>()->set_residual_tolerances (abs_residual_tol, 0.0 );
86+ pf.get_finest <AdvectionDiffusionSweeper<>>()->set_residual_tolerances (abs_res_tol, rel_res_tol );
7987 pf.set_options ();
8088 pf.run ();
8189
@@ -94,7 +102,22 @@ int main(int argc, char** argv)
94102 pfasst::init (argc, argv,
95103 pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_opts,
96104 pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_logs);
97- pfasst::examples::advection_diffusion::run_mpi_pfasst (0.0 );
105+
106+ const double tend = pfasst::config::get_value<double >(" tend" , 0.04 );
107+ const double dt = pfasst::config::get_value<double >(" dt" , 0.01 );
108+ const size_t nnodes_f = pfasst::config::get_value<size_t >(" num_nodes" , 5 );
109+ const size_t ndofs_f = pfasst::config::get_value<size_t >(" spatial_dofs" , 128 );
110+ const size_t niters = pfasst::config::get_value<size_t >(" num_iter" , 4 );
111+ const double abs_res_tol = pfasst::config::get_value<double >(" abs_res_tol" , 0.0 );
112+ const double rel_res_tol = pfasst::config::get_value<double >(" rel_res_tol" , 0.0 );
113+
114+ const size_t nsteps = tend / dt;
115+ const size_t nnodes_c = (nnodes_f + 1 ) / 2 ;
116+ const size_t ndofs_c = ndofs_f / 2 ;
117+
118+ pfasst::examples::advection_diffusion::run_mpi_pfasst (abs_res_tol, rel_res_tol,
119+ niters, nsteps, dt,
120+ ndofs_f, ndofs_c, nnodes_f, nnodes_c);
98121 fftw_cleanup ();
99122 MPI_Finalize ();
100123}
0 commit comments