@@ -27,8 +27,9 @@ namespace pfasst
2727 public:
2828 virtual ~PolyInterpMixin () { }
2929
30+
3031 virtual void interpolate_initial (shared_ptr<ISweeper<time>> dst,
31- shared_ptr<const ISweeper<time>> src)
32+ shared_ptr<const ISweeper<time>> src) override
3233 {
3334 auto & fine = as_encap_sweeper (dst);
3435 auto & crse = as_encap_sweeper (src);
@@ -47,9 +48,10 @@ namespace pfasst
4748 fine.evaluate (0 );
4849 }
4950
51+
5052 virtual void interpolate (shared_ptr<ISweeper<time>> dst,
5153 shared_ptr<const ISweeper<time>> src,
52- bool interp_initial)
54+ bool interp_initial) override
5355 {
5456 auto & fine = as_encap_sweeper (dst);
5557 auto & crse = as_encap_sweeper (src);
@@ -69,22 +71,11 @@ namespace pfasst
6971 for (size_t m = 0 ; m < nfine; m++) { fine_state[m] = fine.get_state (m); }
7072 for (size_t m = 0 ; m < ncrse; m++) { fine_delta[m] = fine_factory->create (solution); }
7173
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- // }
77-
7874 auto crse_delta = crse_factory->create (solution);
7975 size_t m0 = interp_initial ? 0 : 1 ;
8076 for (size_t m = m0; m < ncrse; m++) {
8177 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- // }
78+ crse_delta->saxpy (-1.0 , crse.get_saved_state (m));
8879 interpolate (fine_delta[m], crse_delta);
8980 }
9081
@@ -97,35 +88,29 @@ namespace pfasst
9788 for (size_t m = m0; m < nfine; m++) { fine.evaluate (m); }
9889 }
9990
100- virtual void restrict (shared_ptr<ISweeper<time>> dst,
101- shared_ptr<const ISweeper<time>> src,
102- bool restrict_initial,
103- bool restrict_initial_only)
104- {
105- shared_ptr<EncapSweeper<time>> crse = dynamic_pointer_cast<EncapSweeper<time>>(dst);
106- assert (crse);
107- shared_ptr<const EncapSweeper<time>> fine = dynamic_pointer_cast<const EncapSweeper<time>>(src);
108- assert (fine);
10991
110- this ->restrict (crse, fine, restrict_initial, restrict_initial_only);
92+ virtual void restrict_initial (shared_ptr<ISweeper<time>> dst,
93+ shared_ptr<const ISweeper<time>> src) override
94+ {
95+ auto & crse = as_encap_sweeper (dst);
96+ auto & fine = as_encap_sweeper (src);
97+ this ->restrict (crse.get_state (0 ), fine.get_state (0 ));
11198 }
11299
113- virtual void restrict (shared_ptr<EncapSweeper<time>> crse,
114- shared_ptr<const EncapSweeper <time>> fine ,
115- bool restrict_initial ,
116- bool restrict_initial_only)
100+
101+ virtual void restrict ( shared_ptr<ISweeper <time>> dst ,
102+ shared_ptr< const ISweeper<time>> src ,
103+ bool restrict_initial) override
117104 {
118- if (restrict_initial_only) {
119- this ->restrict (crse->get_state (0 ), fine->get_state (0 ));
120- return ;
121- }
105+ auto & crse = as_encap_sweeper (dst);
106+ auto & fine = as_encap_sweeper (src);
122107
123- auto dnodes = crse-> get_nodes ();
124- auto snodes = fine-> get_nodes ();
108+ auto dnodes = crse. get_nodes ();
109+ auto snodes = fine. get_nodes ();
125110
126- size_t ncrse = crse-> get_nodes ().size ();
111+ size_t ncrse = crse. get_nodes ().size ();
127112 assert (ncrse > 1 );
128- size_t nfine = fine-> get_nodes ().size ();
113+ size_t nfine = fine. get_nodes ().size ();
129114
130115 int trat = (int (nfine) - 1 ) / (int (ncrse) - 1 );
131116
@@ -134,31 +119,24 @@ namespace pfasst
134119 if (dnodes[m] != snodes[m * trat]) {
135120 throw NotImplementedYet (" coarse nodes must be nested" );
136121 }
137- this ->restrict (crse-> get_state (m), fine-> get_state (m * trat));
122+ this ->restrict (crse. get_state (m), fine. get_state (m * trat));
138123 }
139124
140- for (size_t m = m0; m < ncrse; m++) { crse-> evaluate (m); }
125+ for (size_t m = m0; m < ncrse; m++) { crse. evaluate (m); }
141126 }
142127
128+
143129 virtual void fas (time dt, shared_ptr<ISweeper<time>> dst,
144- shared_ptr<const ISweeper<time>> src)
130+ shared_ptr<const ISweeper<time>> src) override
145131 {
146- shared_ptr<EncapSweeper<time>> crse = dynamic_pointer_cast<EncapSweeper<time>>(dst);
147- assert (crse);
148- shared_ptr<const EncapSweeper<time>> fine = dynamic_pointer_cast<const EncapSweeper<time>>(src);
149- assert (fine);
132+ auto & crse = as_encap_sweeper (dst);
133+ auto & fine = as_encap_sweeper (src);
150134
151- this -> fas (dt, crse, fine );
152- }
135+ size_t ncrse = crse. get_nodes (). size (); assert (ncrse >= 1 );
136+ size_t nfine = fine. get_nodes (). size (); assert (nfine >= 1 );
153137
154- virtual void fas (time dt, shared_ptr<EncapSweeper<time>> crse,
155- shared_ptr<const EncapSweeper<time>> fine)
156- {
157- size_t ncrse = crse->get_nodes ().size (); assert (ncrse >= 1 );
158- size_t nfine = fine->get_nodes ().size (); assert (nfine >= 1 );
159-
160- auto crse_factory = crse->get_factory ();
161- auto fine_factory = fine->get_factory ();
138+ auto crse_factory = crse.get_factory ();
139+ auto fine_factory = fine.get_factory ();
162140
163141 EncapVecT crse_z2n (ncrse - 1 ), fine_z2n (nfine - 1 ), rstr_z2n (ncrse - 1 );
164142
@@ -167,13 +145,13 @@ namespace pfasst
167145 for (size_t m = 0 ; m < nfine - 1 ; m++) { fine_z2n[m] = fine_factory->create (solution); }
168146
169147 // compute '0 to node' integral on the coarse level
170- crse-> integrate (dt, crse_z2n);
148+ crse. integrate (dt, crse_z2n);
171149 for (size_t m = 1 ; m < ncrse - 1 ; m++) {
172150 crse_z2n[m]->saxpy (1.0 , crse_z2n[m - 1 ]);
173151 }
174152
175153 // compute '0 to node' integral on the fine level
176- fine-> integrate (dt, fine_z2n);
154+ fine. integrate (dt, fine_z2n);
177155 for (size_t m = 1 ; m < nfine - 1 ; m++) {
178156 fine_z2n[m]->saxpy (1.0 , fine_z2n[m - 1 ]);
179157 }
@@ -186,7 +164,7 @@ namespace pfasst
186164
187165 // compute 'node to node' tau correction
188166 EncapVecT tau (ncrse - 1 ), rstr_and_crse (2 * (ncrse - 1 ));
189- for (size_t m = 0 ; m < ncrse - 1 ; m++) { tau[m] = crse-> get_tau (m); }
167+ for (size_t m = 0 ; m < ncrse - 1 ; m++) { tau[m] = crse. get_tau (m); }
190168 for (size_t m = 0 ; m < ncrse - 1 ; m++) { rstr_and_crse[m] = rstr_z2n[m]; }
191169 for (size_t m = 0 ; m < ncrse - 1 ; m++) { rstr_and_crse[ncrse - 1 + m] = crse_z2n[m]; }
192170
0 commit comments