Skip to content

Commit 2c90d75

Browse files
committed
ad: Tidy/WIP.
Signed-off-by: Matthew Emmett <[email protected]>
1 parent 32397aa commit 2c90d75

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

examples/ad/main.cpp

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
#define PFASST_ENABLE_GNUPLOT
66

77
#include <algorithm>
8-
#include <cmath>
98
#include <complex>
9+
#include <cmath>
1010
#include <map>
11+
#include <tuple>
1112

1213
#include <pfasst.hpp>
1314
#include <pfasst-imex.hpp>
@@ -35,7 +36,7 @@ typedef double scalar;
3536

3637
using namespace std;
3738
using pfasst::encap::Encapsulation;
38-
using dvector = pfasst::encap::VectorEncapsulation<double,double>;
39+
using dvector = pfasst::encap::VectorEncapsulation<scalar,double>;
3940

4041
//
4142
// fft helper
@@ -102,7 +103,7 @@ class ADIMEX : public pfasst::imex::IMEX<time> {
102103
vector<complex<scalar>> ddx, lap;
103104

104105
scalar v = 1.0;
105-
scalar t0 = 1.0;
106+
time t0 = 1.0;
106107
scalar nu = 0.02;
107108

108109
public:
@@ -191,7 +192,7 @@ class ADIMEX : public pfasst::imex::IMEX<time> {
191192
fft.backward(f);
192193
}
193194

194-
void f2comp(Encapsulation<scalar> *F, Encapsulation<scalar> *Q, scalar t, scalar dt, Encapsulation<scalar> *RHS)
195+
void f2comp(Encapsulation<scalar> *F, Encapsulation<scalar> *Q, time t, time dt, Encapsulation<scalar> *RHS)
195196
{
196197
auto& f = *dynamic_cast<dvector*>(F);
197198
auto& q = *dynamic_cast<dvector*>(Q);
@@ -208,8 +209,8 @@ class ADIMEX : public pfasst::imex::IMEX<time> {
208209

209210
};
210211

211-
template<typename scalar>
212-
class ADTRANS : public pfasst::encap::PolyInterpMixin<scalar> {
212+
template<typename scalar, typename time>
213+
class ADTRANS : public pfasst::encap::PolyInterpMixin<time> {
213214
public:
214215

215216
void interpolate(Encapsulation<scalar> *dst, const Encapsulation<scalar> *src) {
@@ -250,15 +251,23 @@ class ADTRANS : public pfasst::encap::PolyInterpMixin<scalar> {
250251
// main
251252
//
252253

254+
template<typename scalar, typename argsT, typename controllerT, typename buildT>
255+
void auto_add(controllerT c, vector<pair<int,string>> nodes, vector<argsT> args, buildT build) {
256+
for (int l=0; l<nodes.size(); l++) {
257+
auto nds = pfasst::compute_nodes<double>(get<0>(nodes[l]), get<1>(nodes[l]));
258+
tuple<pfasst::ISweeper*,pfasst::ITransfer*,pfasst::encap::EncapsulationFactory<scalar>*> t = build(args[l]);
259+
}
260+
}
261+
253262
int main(int argc, char **argv)
254263
{
255264
int ndofs = 256;
256265
int nnodes = 5;
257266

258267
if (nlevs == 1) {
259-
pfasst::SDC<scalar> sdc;
268+
pfasst::SDC<double> sdc;
260269

261-
auto nodes = pfasst::compute_nodes<scalar>(nnodes, "gauss-lobatto");
270+
auto nodes = pfasst::compute_nodes<double>(nnodes, "gauss-lobatto");
262271
auto* factory = new pfasst::encap::VectorFactory<scalar,double>(ndofs);
263272
auto* sweeper = new ADIMEX<scalar>(ndofs);
264273

@@ -275,13 +284,25 @@ int main(int argc, char **argv)
275284

276285
sdc.run();
277286
} else {
278-
pfasst::MLSDC<scalar> mlsdc;
287+
pfasst::MLSDC<double> mlsdc;
288+
289+
// vector<pair<int,string>> nodes = { { 3, "gauss-lobatto" }, { 5, "gauss-lobatto" } };
290+
// vector<int> ndofs = { 256, 512 };
291+
292+
auto builder = [] (int nx) {
293+
auto* factory = new pfasst::encap::VectorFactory<scalar,double>(nx);
294+
auto* sweeper = new ADIMEX<scalar>(nx);
295+
auto* transfer = new ADTRANS<scalar,double>();
296+
return make_tuple(sweeper, transfer, factory);
297+
};
298+
299+
// auto_add<scalar>(mlsdc, nodes, ndofs, builder);
279300

280301
for (int l=0; l<nlevs; l++) {
281-
auto nodes = pfasst::compute_nodes<scalar>(nnodes, "gauss-lobatto");
302+
auto nodes = pfasst::compute_nodes<double>(nnodes, "gauss-lobatto");
282303
auto* factory = new pfasst::encap::VectorFactory<scalar,double>(ndofs);
283304
auto* sweeper = new ADIMEX<scalar>(ndofs);
284-
auto* transfer = new ADTRANS<scalar>();
305+
auto* transfer = new ADTRANS<scalar,double>();
285306

286307
sweeper->set_nodes(nodes);
287308
sweeper->set_factory(factory);

0 commit comments

Comments
 (0)