Skip to content

Commit fd8e4ef

Browse files
committed
examples: boris: enable residual control for MLSDC
1 parent 7a37bdd commit fd8e4ef

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

examples/boris/boris_mlsdc.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ namespace pfasst
2222
{
2323
template<typename scalar>
2424
error_map<scalar> run_boris_sdc(const size_t nsteps, const scalar dt, const size_t nnodes,
25-
const size_t nparticles, const size_t niters)
25+
const size_t nparticles, const size_t niters,
26+
const double abs_res_tol, const double rel_res_tol)
2627
{
2728
MLSDC<> controller;
2829

@@ -33,6 +34,7 @@ namespace pfasst
3334
make_shared<bindings::WrapperSimplePhysicsSolver<double, double>>();
3435
bindings::setup(dynamic_pointer_cast<bindings::WrapperSimplePhysicsSolver<double, double>>(impl_solver));
3536

37+
// fine level
3638
auto quad1 = quadrature::quadrature_factory<double>(nnodes,
3739
quadrature::QuadratureType::GaussLobatto);
3840
auto factory1 = make_shared<ParticleCloudFactory<double>>(nparticles, 3, mass, charge);
@@ -43,8 +45,10 @@ namespace pfasst
4345
auto transfer1 = make_shared<InjectiveTransfer<double, double>>();
4446
sweeper1->set_quadrature(quad1);
4547
sweeper1->set_factory(factory1);
48+
sweeper1->set_residual_tolerances(abs_res_tol, rel_res_tol);
4649
controller.add_level(sweeper1, transfer1);
4750

51+
// coarse level
4852
auto quad2 = quadrature::quadrature_factory<double>(nnodes,
4953
quadrature::QuadratureType::GaussLobatto);
5054
auto factory2 = make_shared<ParticleCloudFactory<double>>(nparticles, 3, mass, charge);
@@ -95,13 +99,17 @@ int main(int argc, char** argv)
9599
const size_t nnodes = pfasst::config::get_value<size_t>("num_nodes", 5);
96100
const size_t nparticles = pfasst::config::get_value<size_t>("num_particles", 1);
97101
const size_t niters = pfasst::config::get_value<size_t>("num_iter", 2);
102+
const double abs_res_tol = pfasst::config::get_value<double>("abs_res_tol", 0.0);
103+
const double rel_res_tol = pfasst::config::get_value<double>("rel_res_tol", 0.0);
98104

99105
LOG(INFO) << "nsteps=" << nsteps << ", "
100106
<< "dt=" << dt << ", "
101107
<< "nnodes=" << nnodes << ", "
102108
<< "nparticles=" << nparticles << ", "
103-
<< "niter=" << niters;
109+
<< "niter=" << niters << ", "
110+
<< "abs res=" << abs_res_tol << ", "
111+
<< "rel res=" << rel_res_tol;
104112

105-
pfasst::examples::boris::run_boris_sdc<double>(nsteps, dt, nnodes, nparticles, niters);
113+
pfasst::examples::boris::run_boris_sdc<double>(nsteps, dt, nnodes, nparticles, niters, abs_res_tol, rel_res_tol);
106114
}
107115
#endif

0 commit comments

Comments
 (0)