Skip to content

Commit 06fa723

Browse files
committed
Merge pull request #148 from memmett/feature/reorg-opts
Rework how options are handled. That looks really cool. I'll try to add a little documentation later.
2 parents 7022b7f + 8042987 commit 06fa723

File tree

13 files changed

+175
-216
lines changed

13 files changed

+175
-216
lines changed

examples/advection_diffusion/advection_diffusion_sweeper.hpp

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,15 @@ namespace pfasst
4747
class AdvectionDiffusionSweeper
4848
: public encap::IMEXSweeper<time>
4949
{
50-
private:
51-
static void init_config_options(po::options_description& opts)
50+
public:
51+
static void init_opts()
5252
{
53-
opts.add_options()
54-
("spatial_dofs", po::value<size_t>(), "number of spatial degrees of freedom")
55-
;
53+
pfasst::config::options::add_option<size_t>("Adv/Diff Sweeper", "spatial_dofs", "Number of spatial degrees of freedom");
5654
}
5755

58-
public:
59-
static void enable_config_options(size_t index = -1)
56+
static void init_logs()
6057
{
61-
config::Options::get_instance()
62-
.register_init_function("Advection-Diffusion Sweeper",
63-
std::function<void(po::options_description&)>(init_config_options),
64-
index);
58+
pfasst::log::add_custom_logger("Advec");
6559
}
6660

6761
private:

examples/advection_diffusion/serial_mlsdc.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,9 @@ namespace pfasst
9797
#ifndef PFASST_UNIT_TESTING
9898
int main(int argc, char** argv)
9999
{
100-
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::enable_config_options();
101-
pfasst::init(argc, argv);
102-
pfasst::log::add_custom_logger("Advec");
103-
100+
pfasst::init(argc, argv,
101+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_opts,
102+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_logs);
104103
pfasst::examples::advection_diffusion::run_serial_mlsdc(3);
105104
}
106105
#endif

examples/advection_diffusion/serial_mlsdc_autobuild.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,9 @@ namespace pfasst
9797
#ifndef PFASST_UNIT_TESTING
9898
int main(int argc, char** argv)
9999
{
100-
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::enable_config_options();
101-
pfasst::init(argc, argv);
102-
pfasst::log::add_custom_logger("Advec");
103-
100+
pfasst::init(argc, argv,
101+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_opts,
102+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_logs);
104103
pfasst::examples::advection_diffusion::run_serial_mlsdc_autobuild();
105104
}
106105
#endif

examples/advection_diffusion/vanilla_sdc.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,9 @@ namespace pfasst
2727
{
2828
SDC<> sdc;
2929

30-
const size_t nsteps = config::get_value<size_t>("num_steps", 4);
31-
const double dt = config::get_value<double>("delta_step", 0.01);
32-
const size_t nnodes = config::get_value<size_t>("num_nodes", 3);
33-
const size_t ndofs = config::get_value<size_t>("spatial_dofs", 64);
34-
const size_t niters = config::get_value<size_t>("num_iter", 4);
35-
const quadrature::QuadratureType quad_type = \
30+
auto const nnodes = config::get_value<size_t>("num_nodes", 3);
31+
auto const ndofs = config::get_value<size_t>("spatial_dofs", 64);
32+
auto const quad_type = \
3633
config::get_value<quadrature::QuadratureType>("nodes_type", quadrature::QuadratureType::GaussLegendre);
3734

3835
auto quad = quadrature::quadrature_factory(nnodes, quad_type);
@@ -44,7 +41,8 @@ namespace pfasst
4441
sweeper->set_residual_tolerances(abs_residual_tol, 0.0);
4542

4643
sdc.add_level(sweeper);
47-
sdc.set_duration(0.0, nsteps*dt, dt, niters);
44+
sdc.set_duration(0.0, 4*0.01, 0.01, 4);
45+
sdc.set_options();
4846
sdc.setup();
4947

5048
auto q0 = sweeper->get_start_state();
@@ -64,10 +62,9 @@ namespace pfasst
6462
#ifndef PFASST_UNIT_TESTING
6563
int main(int argc, char** argv)
6664
{
67-
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::enable_config_options();
68-
pfasst::init(argc, argv);
69-
pfasst::log::add_custom_logger("Advec");
70-
65+
pfasst::init(argc, argv,
66+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_opts,
67+
pfasst::examples::advection_diffusion::AdvectionDiffusionSweeper<>::init_logs);
7168
pfasst::examples::advection_diffusion::run_vanilla_sdc(0.0);
7269
}
7370
#endif

examples/boris/boris_sdc.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ namespace pfasst
6464
#ifndef PFASST_UNIT_TESTING
6565
int main(int argc, char** argv)
6666
{
67-
pfasst::examples::boris::enable_config_options<double>();
68-
pfasst::init(argc, argv);
67+
pfasst::init(argc, argv, pfasst::examples::boris::init_opts<double>);
6968

7069
const size_t nsteps = pfasst::config::get_value<size_t>("num_steps", 1);
7170
const double dt = pfasst::config::get_value<double>("delta_step", 0.015625);

examples/boris/boris_sweeper.hpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -76,26 +76,14 @@ namespace pfasst
7676

7777

7878
template<typename scalar>
79-
static void init_config_options(po::options_description& opts)
79+
static void init_opts()
8080
{
81-
opts.add_options()
82-
("num_particles", po::value<size_t>(), "number of particles in the cloud")
83-
("epsilon", po::value<scalar>(), "Boris' epsilon")
84-
("omega_e", po::value<scalar>(), "E-field constant")
85-
("omega_b", po::value<scalar>(), "B-field constant")
86-
;
81+
pfasst::config::options::add_option<size_t>("Boris-SDC", "num_particles", "number of particles in the cloud");
82+
pfasst::config::options::add_option<scalar>("Boris-SDC", "epsilon", "Boris' epsilon");
83+
pfasst::config::options::add_option<scalar>("Boris-SDC", "omega_e", "E-field constant");
84+
pfasst::config::options::add_option<scalar>("Boris-SDC", "omega_b", "B-field constant");
8785
}
8886

89-
template<typename scalar>
90-
static void enable_config_options(size_t index = -1)
91-
{
92-
config::Options::get_instance()
93-
.register_init_function("Boris-SDC",
94-
std::function<void(po::options_description&)>(pfasst::examples::boris::init_config_options<scalar>),
95-
index);
96-
}
97-
98-
9987
template<
10088
typename scalar,
10189
typename time
@@ -318,7 +306,7 @@ namespace pfasst
318306
time dt = this->get_controller()->get_time_step();
319307

320308
C omega_tilde = sqrt(-2.0 * epsilon) * omega_e;
321-
q.positions()[0][2] = (z0 * cos(omega_tilde * (scalar)(dt))
309+
q.positions()[0][2] = (z0 * cos(omega_tilde * (scalar)(dt))
322310
+ w0 / omega_tilde * sin(omega_tilde * (scalar)(dt))).real();
323311

324312
C sqrt_in_omega = sqrt(pow(omega_b, 2) + 4.0 * epsilon * pow(omega_e, 2));
@@ -440,7 +428,7 @@ namespace pfasst
440428

441429
// building rules for Q_E and Q_I:
442430
// Q_E is striclty lower diagonal matrix with delta nodes of column index
443-
// Q_I is lower diagonal matrix with first row and column all zero and delta nodes of
431+
// Q_I is lower diagonal matrix with first row and column all zero and delta nodes of
444432
// column index minus one
445433
Matrix<time> qe_mat = Matrix<time>(nnodes, nnodes);
446434
qe_mat.fill(time(0.0));

include/pfasst.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,16 @@
99

1010
namespace pfasst
1111
{
12-
inline static void init(int argc, char** argv)
12+
inline static void init(int argc, char** argv, std::function<void()> opts=nullptr, std::function<void()> logs=nullptr)
1313
{
14-
SDC<>::enable_config_options(0);
15-
Quadrature::enable_config_options(0);
16-
config::init_config();
14+
if (opts) {
15+
opts();
16+
}
17+
config::init();
1718
log::start_log(argc, argv);
19+
if (logs) {
20+
logs();
21+
}
1822
config::read_commandline(argc, argv);
1923
}
2024
} // ::pfasst

0 commit comments

Comments
 (0)