Skip to content

Commit d2d49c2

Browse files
committed
fixed libpfasst discrepancy, added flexibility for residual
1 parent f3e6e67 commit d2d49c2

File tree

4 files changed

+17
-3
lines changed

4 files changed

+17
-3
lines changed

pySDC/core/Level.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ def __init__(self, params):
77
self.dt = None
88
self.restol = 0.0
99
self.nsweeps = 1
10+
self.residual_type = 'full_abs'
1011
for k, v in params.items():
1112
setattr(self, k, v)
1213
# freeze class, no further attributes allowed from this point

pySDC/core/Sweeper.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,17 @@ def compute_residual(self):
277277
res_norm.append(abs(res[m]))
278278

279279
# find maximal residual over the nodes
280-
L.status.residual = max(res_norm)
280+
if L.params.residual_type == 'full_abs':
281+
L.status.residual = max(res_norm)
282+
elif L.params.residual_type == 'last_abs':
283+
L.status.residual = res_norm[-1]
284+
elif L.params.residual_type == 'full_rel':
285+
L.status.residual = max(res_norm) / abs(L.u[0])
286+
elif L.params.residual_type == 'last_rel':
287+
L.status.residual = res_norm[-1] / abs(L.u[0])
288+
else:
289+
raise ParameterError(f'residual_type = {L.params.residual_type} not implemented, choose '
290+
f'full_abs, last_abs, full_rel or last_rel instead')
281291

282292
# indicate that the residual has seen the new values
283293
L.status.updated = False

pySDC/implementations/problem_classes/GrayScott_MPIFFT.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def __init__(self, problem_params, dtype_u=parallel_mesh, dtype_f=parallel_imex_
5555
self.ndim = len(problem_params['nvars'])
5656
axes = tuple(range(self.ndim))
5757
self.fft = PFFT(problem_params['comm'], list(problem_params['nvars']), axes=axes, dtype=np.float64,
58-
collapse=True)
58+
collapse=True, backend='fftw')
5959

6060
# get test data to figure out type and dimensions
6161
tmp_u = newDistArray(self.fft, problem_params['spectral'])

pySDC/playgrounds/mpifft/grayscott.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from pySDC.implementations.sweeper_classes.multi_implicit import multi_implicit
1111
from pySDC.implementations.problem_classes.GrayScott_MPIFFT import grayscott_imex_diffusion, grayscott_imex_linear, \
1212
grayscott_mi_diffusion, grayscott_mi_linear
13+
# from pySDC.implementations.problem_classes.GrayScott_FFT import grayscott_imex_linear
1314
from pySDC.implementations.transfer_classes.TransferMesh_MPIFFT import fft_to_fft
1415

1516

@@ -31,6 +32,7 @@ def run_simulation(spectral=None, splitting_type=None, ml=None, num_procs=None):
3132
level_params['restol'] = 1E-12
3233
level_params['dt'] = 1E-00
3334
level_params['nsweeps'] = [1]
35+
level_params['residual_type'] = 'last_abs'
3436

3537
# initialize sweeper parameters
3638
sweeper_params = dict()
@@ -58,7 +60,6 @@ def run_simulation(spectral=None, splitting_type=None, ml=None, num_procs=None):
5860
problem_params['newton_maxiter'] = 100
5961
problem_params['newton_tol'] = 1E-11
6062

61-
6263
# initialize step parameters
6364
step_params = dict()
6465
step_params['maxiter'] = 500
@@ -128,10 +129,12 @@ def run_simulation(spectral=None, splitting_type=None, ml=None, num_procs=None):
128129

129130
plt.figure()
130131
plt.imshow(P.fft.backward(uend[..., 0]))#, vmin=0, vmax=1)
132+
# plt.imshow(np.fft.irfft2(uend.values[..., 0]))#, vmin=0, vmax=1)
131133
plt.title('u')
132134
plt.colorbar()
133135
plt.figure()
134136
plt.imshow(P.fft.backward(uend[..., 1]))#, vmin=0, vmax=1)
137+
# plt.imshow(np.fft.irfft2(uend.values[..., 1]))#, vmin=0, vmax=1)
135138
plt.title('v')
136139
plt.colorbar()
137140
# plt.figure()

0 commit comments

Comments
 (0)