@@ -27,79 +27,74 @@ namespace pfasst
2727 public:
2828 virtual ~PolyInterpMixin () { }
2929
30- virtual void interpolate (shared_ptr<ISweeper<time>> dst,
31- shared_ptr<const ISweeper<time>> src,
32- bool interp_delta_from_initial,
33- bool interp_initial,
34- bool interp_initial_only)
30+ virtual void interpolate_initial (shared_ptr<ISweeper<time>> dst,
31+ shared_ptr<const ISweeper<time>> src)
3532 {
36- shared_ptr<EncapSweeper<time>> fine = dynamic_pointer_cast<EncapSweeper<time>>(dst);
37- assert (fine);
38- shared_ptr<const EncapSweeper<time>> crse = dynamic_pointer_cast<const EncapSweeper<time>>(src);
39- assert (crse);
33+ auto & fine = as_encap_sweeper (dst);
34+ auto & crse = as_encap_sweeper (src);
35+
36+ auto crse_factory = crse.get_factory ();
37+ auto fine_factory = fine.get_factory ();
38+
39+ auto crse_delta = crse_factory->create (solution);
40+ this ->restrict (crse_delta, fine.get_state (0 ));
41+ crse_delta->saxpy (-1.0 , crse.get_state (0 ));
42+
43+ auto fine_delta = fine_factory->create (solution);
44+ this ->interpolate (fine_delta, crse_delta);
45+ fine.get_state (0 )->saxpy (-1.0 , fine_delta);
4046
41- this -> interpolate ( fine, crse, interp_delta_from_initial, interp_initial, interp_initial_only );
47+ fine. evaluate ( 0 );
4248 }
4349
44- virtual void interpolate (shared_ptr<EncapSweeper<time>> fine,
45- shared_ptr<const EncapSweeper<time>> crse,
46- bool interp_delta_from_initial,
47- bool interp_initial,
48- bool interp_initial_only)
50+ virtual void interpolate (shared_ptr<ISweeper<time>> dst,
51+ shared_ptr<const ISweeper<time>> src,
52+ bool interp_initial)
4953 {
54+ auto & fine = as_encap_sweeper (dst);
55+ auto & crse = as_encap_sweeper (src);
56+
5057 if (tmat.size1 () == 0 ) {
51- tmat = pfasst::compute_interp<time>(fine-> get_nodes (), crse-> get_nodes ());
58+ tmat = pfasst::compute_interp<time>(fine. get_nodes (), crse. get_nodes ());
5259 }
5360
54- size_t nfine = fine->get_nodes ().size ();
55- size_t ncrse = crse->get_nodes ().size ();
56-
57- auto crse_factory = crse->get_factory ();
58- auto fine_factory = fine->get_factory ();
59-
60- if (interp_initial_only) {
61- auto crse_delta = crse_factory->create (solution);
62- this ->restrict (crse_delta, fine->get_state (0 ));
63- crse_delta->saxpy (-1.0 , crse->get_state (0 ));
61+ size_t nfine = fine.get_nodes ().size ();
62+ size_t ncrse = crse.get_nodes ().size ();
6463
65- auto fine_delta = fine_factory->create (solution);
66- this ->interpolate (fine_delta, crse_delta);
67- fine->get_state (0 )->saxpy (-1.0 , fine_delta);
68-
69- fine->evaluate (0 );
70- return ;
71- }
64+ auto crse_factory = crse.get_factory ();
65+ auto fine_factory = fine.get_factory ();
7266
7367 EncapVecT fine_state (nfine), fine_delta (ncrse);
7468
75- for (size_t m = 0 ; m < nfine; m++) { fine_state[m] = fine-> get_state (m); }
69+ for (size_t m = 0 ; m < nfine; m++) { fine_state[m] = fine. get_state (m); }
7670 for (size_t m = 0 ; m < ncrse; m++) { fine_delta[m] = fine_factory->create (solution); }
7771
78- if (interp_delta_from_initial) {
79- for (size_t m = 1 ; m < nfine; m++) {
80- fine_state[m]->copy (fine_state[0 ]);
81- }
82- }
72+ // if (interp_delta_from_initial) {
73+ // for (size_t m = 1; m < nfine; m++) {
74+ // fine_state[m]->copy(fine_state[0]);
75+ // }
76+ // }
8377
8478 auto crse_delta = crse_factory->create (solution);
8579 size_t m0 = interp_initial ? 0 : 1 ;
8680 for (size_t m = m0; m < ncrse; m++) {
87- crse_delta->copy (crse->get_state (m));
88- if (interp_delta_from_initial) {
89- crse_delta->saxpy (-1.0 , crse->get_state (0 ));
90- } else {
91- crse_delta->saxpy (-1.0 , crse->get_saved_state (m));
92- }
81+ crse_delta->copy (crse.get_state (m));
82+ // if (interp_delta_from_initial) {
83+ // crse_delta->saxpy(-1.0, crse->get_saved_state(0));
84+ // // crse_delta->saxpy(-1.0, crse->get_state(0));
85+ // } else {
86+ crse_delta->saxpy (-1.0 , crse.get_saved_state (m));
87+ // }
9388 interpolate (fine_delta[m], crse_delta);
9489 }
9590
9691 if (!interp_initial) {
9792 fine_delta[0 ]->zero ();
9893 }
9994
100- fine-> get_state (0 )->mat_apply (fine_state, 1.0 , tmat, fine_delta, false );
95+ fine. get_state (0 )->mat_apply (fine_state, 1.0 , tmat, fine_delta, false );
10196
102- for (size_t m = m0; m < nfine; m++) { fine-> evaluate (m); }
97+ for (size_t m = m0; m < nfine; m++) { fine. evaluate (m); }
10398 }
10499
105100 virtual void restrict (shared_ptr<ISweeper<time>> dst,
0 commit comments