Skip to content

Commit 9d74c04

Browse files
committed
encap: Fix FAS correction.
Signed-off-by: Matthew Emmett <[email protected]>
1 parent 3b6d1e6 commit 9d74c04

File tree

3 files changed

+16
-20
lines changed

3 files changed

+16
-20
lines changed

include/pfasst/encap/encap_sweeper.hpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,10 @@ namespace pfasst
108108
}
109109

110110
if (coarse) {
111-
size_t num_fas = this->quadrature->left_is_node() ? num_nodes - 1 : num_nodes;
112-
for (size_t m = 0; m < num_fas; m++) {
111+
for (size_t m = 0; m < num_nodes; m++) {
113112
this->fas_corrections.push_back(this->get_factory()->create(pfasst::encap::solution));
114113
}
115114
}
116-
117115
}
118116

119117
//! @{

include/pfasst/encap/imex_sweeper.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ namespace pfasst
353353
}
354354
if (this->fas_corrections.size() > 0) {
355355
for (size_t m = 0; m < this->s_integrals.size(); m++) {
356-
this->s_integrals[m]->saxpy(1.0, this->fas_corrections[m]);
356+
this->s_integrals[m]->saxpy(1.0, this->fas_corrections[m+1]);
357357
}
358358
}
359359

include/pfasst/encap/poly_interp.hpp

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)