Skip to content

Commit 6244bad

Browse files
committed
Merge pull request #138 from torbjoernk/feature/examples-namespaces
Move all examples into separate namespaces
2 parents 4b3414e + f7f4284 commit 6244bad

16 files changed

+1059
-965
lines changed

examples/advection_diffusion/advection_diffusion_sweeper.hpp

Lines changed: 222 additions & 215 deletions
Large diffs are not rendered by default.

examples/advection_diffusion/fft.hpp

Lines changed: 59 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -12,66 +12,75 @@
1212
#include <cstddef>
1313

1414
#include <pfasst/encap/vector.hpp>
15+
typedef pfasst::encap::VectorEncapsulation<double> DVectorT;
1516

1617
#include <fftw3.h>
1718

18-
typedef pfasst::encap::VectorEncapsulation<double> DVectorT;
1919

20-
class FFT
20+
namespace pfasst
2121
{
22-
struct workspace {
23-
fftw_plan ffft;
24-
fftw_plan ifft;
25-
fftw_complex* wk;
26-
complex<double>* z;
27-
};
22+
namespace examples
23+
{
24+
namespace advection_diffusion
25+
{
26+
class FFT
27+
{
28+
struct workspace {
29+
fftw_plan ffft;
30+
fftw_plan ifft;
31+
fftw_complex* wk;
32+
complex<double>* z;
33+
};
2834

29-
map<size_t, shared_ptr<workspace>> workspaces;
35+
map<size_t, shared_ptr<workspace>> workspaces;
3036

31-
public:
32-
~FFT()
33-
{
34-
for (auto& x : workspaces) {
35-
shared_ptr<workspace> wk = std::get<1>(x);
36-
fftw_free(wk->wk);
37-
fftw_destroy_plan(wk->ffft);
38-
fftw_destroy_plan(wk->ifft);
39-
}
40-
workspaces.clear();
41-
}
37+
public:
38+
~FFT()
39+
{
40+
for (auto& x : workspaces) {
41+
shared_ptr<workspace> wk = std::get<1>(x);
42+
fftw_free(wk->wk);
43+
fftw_destroy_plan(wk->ffft);
44+
fftw_destroy_plan(wk->ifft);
45+
}
46+
workspaces.clear();
47+
}
4248

43-
shared_ptr<workspace> get_workspace(size_t ndofs)
44-
{
45-
if (workspaces.find(ndofs) == workspaces.end()) {
46-
shared_ptr<workspace> wk = make_shared<workspace>();
47-
wk->wk = fftw_alloc_complex(ndofs);
48-
wk->ffft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_FORWARD, FFTW_ESTIMATE);
49-
wk->ifft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_BACKWARD, FFTW_ESTIMATE);
50-
wk->z = reinterpret_cast<complex<double>*>(wk->wk);
51-
workspaces.insert(pair<size_t, shared_ptr<workspace>>(ndofs, wk));
52-
}
49+
shared_ptr<workspace> get_workspace(size_t ndofs)
50+
{
51+
if (workspaces.find(ndofs) == workspaces.end()) {
52+
shared_ptr<workspace> wk = make_shared<workspace>();
53+
wk->wk = fftw_alloc_complex(ndofs);
54+
wk->ffft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_FORWARD, FFTW_ESTIMATE);
55+
wk->ifft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_BACKWARD, FFTW_ESTIMATE);
56+
wk->z = reinterpret_cast<complex<double>*>(wk->wk);
57+
workspaces.insert(pair<size_t, shared_ptr<workspace>>(ndofs, wk));
58+
}
5359

54-
return workspaces[ndofs];
55-
}
60+
return workspaces[ndofs];
61+
}
5662

57-
complex<double>* forward(const DVectorT& x)
58-
{
59-
shared_ptr<workspace> wk = get_workspace(x.size());
60-
for (size_t i = 0; i < x.size(); i++) {
61-
wk->z[i] = x[i];
62-
}
63-
fftw_execute_dft(wk->ffft, wk->wk, wk->wk);
64-
return wk->z;
65-
}
63+
complex<double>* forward(const DVectorT& x)
64+
{
65+
shared_ptr<workspace> wk = get_workspace(x.size());
66+
for (size_t i = 0; i < x.size(); i++) {
67+
wk->z[i] = x[i];
68+
}
69+
fftw_execute_dft(wk->ffft, wk->wk, wk->wk);
70+
return wk->z;
71+
}
6672

67-
void backward(DVectorT& x)
68-
{
69-
shared_ptr<workspace> wk = get_workspace(x.size());
70-
fftw_execute_dft(wk->ifft, wk->wk, wk->wk);
71-
for (size_t i = 0; i < x.size(); i++) {
72-
x[i] = real(wk->z[i]);
73-
}
74-
}
75-
};
73+
void backward(DVectorT& x)
74+
{
75+
shared_ptr<workspace> wk = get_workspace(x.size());
76+
fftw_execute_dft(wk->ifft, wk->wk, wk->wk);
77+
for (size_t i = 0; i < x.size(); i++) {
78+
x[i] = real(wk->z[i]);
79+
}
80+
}
81+
};
82+
} // ::pfasst::examples::advection_diffusion
83+
} // ::pfasst::examples
84+
} // ::pfasst
7685

7786
#endif

examples/advection_diffusion/mpi_pfasst.cpp

Lines changed: 55 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
* This example uses MPI PFASST.
55
*/
66

7-
#include <memory>
87
#include <cassert>
8+
#include <memory>
9+
#include <vector>
10+
#include <utility>
11+
using namespace std;
912

1013
#include <mpi.h>
1114
#include <fftw3.h>
@@ -18,59 +21,67 @@
1821

1922
#include "advection_diffusion_sweeper.hpp"
2023
#include "spectral_transfer_1d.hpp"
21-
22-
using namespace std;
23-
using namespace pfasst;
2424
using namespace pfasst::encap;
2525
using namespace pfasst::mpi;
2626

27-
error_map run_mpi_pfasst()
28-
{
29-
const size_t nsteps = 4;
30-
const double dt = 0.01;
31-
const size_t niters = 4;
32-
33-
vector<pair<size_t, pfasst::quadrature::QuadratureType>> nodes = {
34-
{ 3, pfasst::quadrature::QuadratureType::GaussLobatto },
35-
{ 5, pfasst::quadrature::QuadratureType::GaussLobatto }
36-
};
37-
38-
vector<size_t> ndofs = { 64, 128 };
3927

40-
auto build_level = [ndofs](size_t level) {
41-
auto factory = make_shared<MPIVectorFactory<double>>(ndofs[level]);
42-
auto sweeper = make_shared<AdvectionDiffusionSweeper<>>(ndofs[level]);
43-
auto transfer = make_shared<SpectralTransfer1D<>>();
44-
45-
return AutoBuildTuple<>(sweeper, transfer, factory);
46-
};
47-
48-
auto initial = [](shared_ptr<EncapSweeper<>> sweeper, shared_ptr<Encapsulation<>> q0) {
49-
auto ad = dynamic_pointer_cast<AdvectionDiffusionSweeper<>>(sweeper);
50-
assert(ad);
51-
ad->exact(q0, 0.0);
52-
};
53-
54-
MPICommunicator comm(MPI_COMM_WORLD);
55-
PFASST<> pf;
56-
57-
auto_build(pf, nodes, build_level);
58-
auto_setup(pf, initial);
59-
60-
pf.set_comm(&comm);
61-
pf.set_duration(0.0, nsteps * dt, dt, niters);
62-
pf.set_nsweeps({2, 1});
63-
pf.run();
28+
namespace pfasst
29+
{
30+
namespace examples
31+
{
32+
namespace advection_diffusion
33+
{
34+
error_map run_mpi_pfasst()
35+
{
36+
const size_t nsteps = 4;
37+
const double dt = 0.01;
38+
const size_t niters = 4;
39+
40+
vector<pair<size_t, quadrature::QuadratureType>> nodes = {
41+
{ 3, quadrature::QuadratureType::GaussLobatto },
42+
{ 5, quadrature::QuadratureType::GaussLobatto }
43+
};
44+
45+
vector<size_t> ndofs = { 64, 128 };
46+
47+
auto build_level = [ndofs](size_t level) {
48+
auto factory = make_shared<MPIVectorFactory<double>>(ndofs[level]);
49+
auto sweeper = make_shared<AdvectionDiffusionSweeper<>>(ndofs[level]);
50+
auto transfer = make_shared<SpectralTransfer1D<>>();
51+
52+
return AutoBuildTuple<>(sweeper, transfer, factory);
53+
};
54+
55+
auto initial = [](shared_ptr<EncapSweeper<>> sweeper, shared_ptr<Encapsulation<>> q0) {
56+
auto ad = dynamic_pointer_cast<AdvectionDiffusionSweeper<>>(sweeper);
57+
assert(ad);
58+
ad->exact(q0, 0.0);
59+
};
60+
61+
MPICommunicator comm(MPI_COMM_WORLD);
62+
PFASST<> pf;
63+
64+
auto_build(pf, nodes, build_level);
65+
auto_setup(pf, initial);
66+
67+
pf.set_comm(&comm);
68+
pf.set_duration(0.0, nsteps * dt, dt, niters);
69+
pf.set_nsweeps({2, 1});
70+
pf.run();
71+
72+
auto fine = pf.get_finest<AdvectionDiffusionSweeper<>>();
73+
return fine->get_errors();
74+
}
75+
} // ::pfasst::examples::advection_diffusion
76+
} // ::pfasst::examples
77+
} // ::pfasst
6478

65-
auto fine = pf.get_finest<AdvectionDiffusionSweeper<>>();
66-
return fine->get_errors();
67-
}
6879

6980
#ifndef PFASST_UNIT_TESTING
7081
int main(int argc, char** argv)
7182
{
7283
MPI_Init(&argc, &argv);
73-
run_mpi_pfasst();
84+
pfasst::examples::advection_diffusion::run_mpi_pfasst();
7485
fftw_cleanup();
7586
MPI_Finalize();
7687
}

0 commit comments

Comments
 (0)