@@ -70,7 +70,6 @@ namespace pfasst
7070
7171 if (interp_initial) {
7272 this ->interpolate_initial (dst, src);
73- return ;
7473 }
7574
7675 size_t nfine = fine.get_nodes ().size ();
@@ -131,7 +130,6 @@ namespace pfasst
131130
132131 if (restrict_initial) {
133132 this ->restrict_initial (dst, src);
134- return ;
135133 }
136134
137135 int trat = (int (num_fine) - 1 ) / (int (num_crse) - 1 );
@@ -167,11 +165,11 @@ namespace pfasst
167165 auto crse_factory = crse.get_factory ();
168166 auto fine_factory = fine.get_factory ();
169167
170- EncapVecT crse_int (ncrse - 1 ), fine_int (nfine - 1 ), rstr_int (ncrse - 1 );
168+ EncapVecT crse_int (ncrse), fine_int (nfine), rstr_int (ncrse);
171169
172- for (size_t m = 0 ; m < ncrse - 1 ; m++) { crse_int[m] = crse_factory->create (solution); }
173- for (size_t m = 0 ; m < ncrse - 1 ; m++) { rstr_int[m] = crse_factory->create (solution); }
174- for (size_t m = 0 ; m < nfine - 1 ; m++) { fine_int[m] = fine_factory->create (solution); }
170+ for (size_t m = 0 ; m < ncrse; m++) { crse_int[m] = crse_factory->create (solution); }
171+ for (size_t m = 0 ; m < ncrse; m++) { rstr_int[m] = crse_factory->create (solution); }
172+ for (size_t m = 0 ; m < nfine; m++) { fine_int[m] = fine_factory->create (solution); }
175173
176174 // compute '0 to node' integral on the coarse level
177175 crse.integrate (dt, crse_int);
@@ -181,27 +179,27 @@ namespace pfasst
181179
182180 // restrict '0 to node' fine integral
183181 int trat = (int (nfine) - 1 ) / (int (ncrse) - 1 );
184- for (size_t m = 1 ; m < ncrse; m++) {
185- this ->restrict (rstr_int[m - 1 ], fine_int[m * trat - 1 ]);
182+ for (size_t m = 0 ; m < ncrse; m++) {
183+ this ->restrict (rstr_int[m], fine_int[m * trat]);
186184 }
187185
188186 // compute 'node to node' tau correction
189- EncapVecT tau (ncrse - 1 ), rstr_and_crse (2 * ( ncrse - 1 ) );
190- for (size_t m = 0 ; m < ncrse - 1 ; m++) { tau[m] = crse.get_tau (m); }
191- for (size_t m = 0 ; m < ncrse - 1 ; m++) { rstr_and_crse[m] = rstr_int[m]; }
192- for (size_t m = 0 ; m < ncrse - 1 ; m++) { rstr_and_crse[ncrse - 1 + m] = crse_int[m]; }
187+ EncapVecT tau (ncrse), rstr_and_crse (2 * ncrse);
188+ for (size_t m = 0 ; m < ncrse; m++) { tau[m] = crse.get_tau (m); }
189+ for (size_t m = 0 ; m < ncrse; m++) { rstr_and_crse[m] = rstr_int[m]; }
190+ for (size_t m = 0 ; m < ncrse; m++) { rstr_and_crse[ncrse + m] = crse_int[m]; }
193191
194192 if (fmat.rows () == 0 ) {
195- fmat.resize (ncrse - 1 , 2 * ( ncrse - 1 ) );
193+ fmat.resize (ncrse, 2 * ncrse);
196194 fmat.fill (0.0 );
197195
198- for (size_t m = 0 ; m < ncrse - 1 ; m++) {
196+ for (size_t m = 0 ; m < ncrse; m++) {
199197 fmat (m, m) = 1.0 ;
200- fmat (m, ncrse - 1 + m) = -1.0 ;
198+ fmat (m, ncrse + m) = -1.0 ;
201199
202200 for (size_t n = 0 ; n < m; n++) {
203201 fmat (m, n) = -1.0 ;
204- fmat (m, ncrse - 1 + n) = 1.0 ;
202+ fmat (m, ncrse + n) = 1.0 ;
205203 }
206204 }
207205 }
0 commit comments