PFASST++
vanilla_sdc.cpp
Go to the documentation of this file.
1 
8 #include <cstdlib>
9 #include <memory>
10 
11 #include <fftw3.h>
12 
13 #include <pfasst.hpp>
14 #include <pfasst/logging.hpp>
15 #include <pfasst/config.hpp>
17 #include <pfasst/encap/vector.hpp>
18 
20 
21 namespace pfasst
22 {
23  namespace examples
24  {
25  namespace advection_diffusion
26  {
34  error_map run_vanilla_sdc(double abs_residual_tol, double rel_residual_tol=0.0)
35  {
36  SDC<> sdc;
37 
38  auto const nnodes = config::get_value<size_t>("num_nodes", 3);
39  auto const ndofs = config::get_value<size_t>("spatial_dofs", 64);
40  auto const quad_type = \
41  config::get_value<quadrature::QuadratureType>("nodes_type", quadrature::QuadratureType::GaussLegendre);
42 
43  auto quad = quadrature::quadrature_factory(nnodes, quad_type);
44  auto factory = make_shared<encap::VectorFactory<double>>(ndofs);
45  auto sweeper = make_shared<AdvectionDiffusionSweeper<>>(ndofs);
46 
47  sweeper->set_quadrature(quad);
48  sweeper->set_factory(factory);
49  sweeper->set_residual_tolerances(abs_residual_tol, rel_residual_tol);
50 
51  sdc.add_level(sweeper);
52  sdc.set_duration(0.0, 4*0.01, 0.01, 4);
53  sdc.set_options();
54  sdc.setup();
55 
56  auto q0 = sweeper->get_start_state();
57  sweeper->exact(q0, 0.0);
58 
59  sdc.run();
60 
61  return sweeper->get_errors();
62  }
63  } // ::pfasst::examples::advection_diffusion
64  } // ::pfasst::examples
65 } // ::pfasst
66 
67 
68 #ifndef PFASST_UNIT_TESTING
69 int main(int argc, char** argv)
70 {
71  pfasst::init(argc, argv,
75  fftw_cleanup();
76 }
77 #endif
virtual void run()
Run vanilla SDC.
Definition: sdc_impl.hpp:22
virtual void set_options(bool all_sweepers=true)
Set options from command line etc.
map< tuple< size_t, size_t >, double > error_map
virtual void add_level(shared_ptr< ISweeper< time >> sweeper, shared_ptr< ITransfer< time >> transfer=shared_ptr< ITransfer< time >>(nullptr), bool coarse=true)
Adding a level to the controller.
error_map run_vanilla_sdc(double abs_residual_tol, double rel_residual_tol=0.0)
Advection/diffusion example using an encapsulated IMEX sweeper.
Definition: vanilla_sdc.cpp:34
static void init(int argc, char **argv, std::function< void()> opts=nullptr, std::function< void()> logs=nullptr)
Definition: pfasst.hpp:13
virtual void set_duration(time t0, time tend, time dt, size_t niters)
Set basic time scope of the Controller.
shared_ptr< IQuadrature< precision > > quadrature_factory(const size_t nnodes, const QuadratureType qtype)
Instantiates quadrature handler for given number of nodes and type descriptor.
Definition: quadrature.hpp:53
int main(int argc, char **argv)
Definition: vanilla_sdc.cpp:69
Vanilla SDC controller.
Definition: sdc.hpp:24
advection-diffusion sweeper with semi-implicit time-integration.
virtual void setup()
Basic setup routine for this controller.