Skip to content

Commit 7b30818

Browse files
committed
PFASST + other problem classes
1 parent 61c4221 commit 7b30818

File tree

2 files changed

+38
-38
lines changed

2 files changed

+38
-38
lines changed

pySDC/implementations/problem_classes/GeneralizedFisher_1D_PETSc.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from pySDC.core.Errors import ParameterError
55
from pySDC.core.Problem import ptype
6-
from pySDC.implementations.datatype_classes.petsc_dmda_grid import petsc_data, rhs_2comp_petsc_data, rhs_imex_petsc_data
6+
from pySDC.implementations.datatype_classes.petsc_vec import petsc_vec, petsc_vec_imex, petsc_vec_comp2
77

88

99
class Fisher_full(object):
@@ -182,7 +182,7 @@ class petsc_fisher_multiimplicit(ptype):
182182
"""
183183
Problem class implementing the multi-implicit 1D generalized Fisher equation with periodic BC and PETSc
184184
"""
185-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=rhs_2comp_petsc_data):
185+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec_comp2):
186186
"""
187187
Initialization routine
188188
@@ -345,13 +345,13 @@ def eval_f(self, u, t):
345345
"""
346346

347347
f = self.dtype_f(self.init)
348-
self.A.mult(u.values, f.comp1.values)
349-
fa1 = self.init.getVecArray(f.comp1.values)
348+
self.A.mult(u, f.comp1)
349+
fa1 = self.init.getVecArray(f.comp1)
350350
fa1[0] = 0
351351
fa1[-1] = 0
352352

353-
fa2 = self.init.getVecArray(f.comp2.values)
354-
xa = self.init.getVecArray(u.values)
353+
fa2 = self.init.getVecArray(f.comp2)
354+
xa = self.init.getVecArray(u)
355355
for i in range(self.xs, self.xe):
356356
fa2[i] = self.params.lambda0 ** 2 * xa[i] * (1 - xa[i] ** self.params.nu)
357357
fa2[0] = 0
@@ -376,7 +376,7 @@ def solve_system_1(self, rhs, factor, u0, t):
376376
me = self.dtype_u(u0)
377377

378378
self.ksp.setOperators(self.get_sys_mat(factor))
379-
self.ksp.solve(rhs.values, me.values)
379+
self.ksp.solve(rhs, me)
380380

381381
self.ksp_itercount += self.ksp.getIterationNumber()
382382
self.ksp_ncalls += 1
@@ -406,7 +406,7 @@ def solve_system_2(self, rhs, factor, u0, t):
406406
J = self.init.createMatrix()
407407
self.snes.setJacobian(target.formJacobian, J)
408408

409-
self.snes.solve(rhs.values, me.values)
409+
self.snes.solve(rhs, me)
410410

411411
self.snes_itercount += self.snes.getIterationNumber()
412412
self.snes_ncalls += 1
@@ -427,7 +427,7 @@ def u_exact(self, t):
427427
lam1 = self.params.lambda0 / 2.0 * ((self.params.nu / 2.0 + 1) ** 0.5 + (self.params.nu / 2.0 + 1) ** (-0.5))
428428
sig1 = lam1 - np.sqrt(lam1 ** 2 - self.params.lambda0 ** 2)
429429
me = self.dtype_u(self.init)
430-
xa = self.init.getVecArray(me.values)
430+
xa = self.init.getVecArray(me)
431431
for i in range(self.xs, self.xe):
432432
xa[i] = (1 + (2 ** (self.params.nu / 2.0) - 1) *
433433
np.exp(-self.params.nu / 2.0 * sig1 *
@@ -441,7 +441,7 @@ class petsc_fisher_fullyimplicit(petsc_fisher_multiimplicit):
441441
Problem class implementing the fully-implicit 2D Gray-Scott reaction-diffusion equation with periodic BC and PETSc
442442
"""
443443

444-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=petsc_data):
444+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec):
445445
"""
446446
Initialization routine
447447
@@ -468,10 +468,10 @@ def eval_f(self, u, t):
468468
"""
469469

470470
f = self.dtype_f(self.init)
471-
self.A.mult(u.values, f.values)
471+
self.A.mult(u, f)
472472

473-
fa2 = self.init.getVecArray(f.values)
474-
xa = self.init.getVecArray(u.values)
473+
fa2 = self.init.getVecArray(f)
474+
xa = self.init.getVecArray(u)
475475
for i in range(self.xs, self.xe):
476476
fa2[i] += self.params.lambda0 ** 2 * xa[i] * (1 - xa[i] ** self.params.nu)
477477
fa2[0] = 0
@@ -501,7 +501,7 @@ def solve_system(self, rhs, factor, u0, t):
501501
self.snes.setFunction(target.formFunction, self.F)
502502
self.snes.setJacobian(target.formJacobian, self.J)
503503

504-
self.snes.solve(rhs.values, me.values)
504+
self.snes.solve(rhs, me)
505505

506506
self.snes_itercount += self.snes.getIterationNumber()
507507
self.snes_ncalls += 1
@@ -514,7 +514,7 @@ class petsc_fisher_semiimplicit(petsc_fisher_multiimplicit):
514514
Problem class implementing the semi-implicit 2D Gray-Scott reaction-diffusion equation with periodic BC and PETSc
515515
"""
516516

517-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=rhs_imex_petsc_data):
517+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec_imex):
518518
"""
519519
Initialization routine
520520
@@ -541,13 +541,13 @@ def eval_f(self, u, t):
541541
"""
542542

543543
f = self.dtype_f(self.init)
544-
self.A.mult(u.values, f.impl.values)
545-
fa1 = self.init.getVecArray(f.impl.values)
544+
self.A.mult(u, f.impl)
545+
fa1 = self.init.getVecArray(f.impl)
546546
fa1[0] = 0
547547
fa1[-1] = 0
548548

549-
fa2 = self.init.getVecArray(f.expl.values)
550-
xa = self.init.getVecArray(u.values)
549+
fa2 = self.init.getVecArray(f.expl)
550+
xa = self.init.getVecArray(u)
551551
for i in range(self.xs, self.xe):
552552
fa2[i] = self.params.lambda0 ** 2 * xa[i] * (1 - xa[i] ** self.params.nu)
553553
fa2[0] = 0
@@ -572,7 +572,7 @@ def solve_system(self, rhs, factor, u0, t):
572572
me = self.dtype_u(u0)
573573

574574
self.ksp.setOperators(self.get_sys_mat(factor))
575-
self.ksp.solve(rhs.values, me.values)
575+
self.ksp.solve(rhs, me)
576576

577577
self.ksp_itercount += self.ksp.getIterationNumber()
578578
self.ksp_ncalls += 1

pySDC/implementations/problem_classes/GrayScott_2D_PETSc_periodic.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from pySDC.core.Errors import ParameterError
55
from pySDC.core.Problem import ptype
6-
from pySDC.implementations.datatype_classes.petsc_dmda_grid import petsc_data, rhs_2comp_petsc_data, rhs_imex_petsc_data
6+
from pySDC.implementations.datatype_classes.petsc_vec import petsc_vec, petsc_vec_imex, petsc_vec_comp2
77

88

99
class GS_full(object):
@@ -235,7 +235,7 @@ class petsc_grayscott_multiimplicit(ptype):
235235
Problem class implementing the multi-implicit 2D Gray-Scott reaction-diffusion equation with periodic BC and PETSc
236236
"""
237237

238-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=rhs_2comp_petsc_data):
238+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec_comp2):
239239
"""
240240
Initialization routine
241241
@@ -404,10 +404,10 @@ def eval_f(self, u, t):
404404
"""
405405

406406
f = self.dtype_f(self.init)
407-
self.A.mult(u.values, f.comp1.values)
407+
self.A.mult(u, f.comp1)
408408

409-
fa = self.init.getVecArray(f.comp2.values)
410-
xa = self.init.getVecArray(u.values)
409+
fa = self.init.getVecArray(f.comp2)
410+
xa = self.init.getVecArray(u)
411411
for i in range(self.xs, self.xe):
412412
for j in range(self.ys, self.ye):
413413
fa[i, j, 0] = -xa[i, j, 0] * xa[i, j, 1] ** 2 + self.params.A * (1 - xa[i, j, 0])
@@ -431,7 +431,7 @@ def solve_system_1(self, rhs, factor, u0, t):
431431

432432
me = self.dtype_u(u0)
433433
self.ksp.setOperators(self.Id - factor * self.A)
434-
self.ksp.solve(rhs.values, me.values)
434+
self.ksp.solve(rhs, me)
435435

436436
self.ksp_ncalls += 1
437437
self.ksp_itercount += self.ksp.getIterationNumber()
@@ -460,7 +460,7 @@ def solve_system_2(self, rhs, factor, u0, t):
460460
J = self.init.createMatrix()
461461
self.snes.setJacobian(target.formJacobian, J)
462462

463-
self.snes.solve(rhs.values, me.values)
463+
self.snes.solve(rhs, me)
464464

465465
self.snes_ncalls += 1
466466
self.snes_itercount += self.snes.getIterationNumber()
@@ -481,7 +481,7 @@ def u_exact(self, t):
481481
assert t == 0, 'ERROR: u_exact is only valid for the initial solution'
482482

483483
me = self.dtype_u(self.init)
484-
xa = self.init.getVecArray(me.values)
484+
xa = self.init.getVecArray(me)
485485
for i in range(self.xs, self.xe):
486486
for j in range(self.ys, self.ye):
487487
xa[i, j, 0] = 1.0 - 0.5 * np.power(np.sin(np.pi * i * self.dx / 100) *
@@ -497,7 +497,7 @@ class petsc_grayscott_fullyimplicit(petsc_grayscott_multiimplicit):
497497
Problem class implementing the fully-implicit 2D Gray-Scott reaction-diffusion equation with periodic BC and PETSc
498498
"""
499499

500-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=petsc_data):
500+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec):
501501
"""
502502
Initialization routine
503503
@@ -524,10 +524,10 @@ def eval_f(self, u, t):
524524
"""
525525

526526
f = self.dtype_f(self.init)
527-
self.A.mult(u.values, f.values)
527+
self.A.mult(u, f)
528528

529-
fa = self.init.getVecArray(f.values)
530-
xa = self.init.getVecArray(u.values)
529+
fa = self.init.getVecArray(f)
530+
xa = self.init.getVecArray(u)
531531
for i in range(self.xs, self.xe):
532532
for j in range(self.ys, self.ye):
533533
fa[i, j, 0] += -xa[i, j, 0] * xa[i, j, 1] ** 2 + self.params.A * (1 - xa[i, j, 0])
@@ -558,7 +558,7 @@ def solve_system(self, rhs, factor, u0, t):
558558
J = self.init.createMatrix()
559559
self.snes.setJacobian(target.formJacobian, J)
560560

561-
self.snes.solve(rhs.values, me.values)
561+
self.snes.solve(rhs, me)
562562

563563
self.snes_ncalls += 1
564564
self.snes_itercount += self.snes.getIterationNumber()
@@ -571,7 +571,7 @@ class petsc_grayscott_semiimplicit(petsc_grayscott_multiimplicit):
571571
Problem class implementing the semi-implicit 2D Gray-Scott reaction-diffusion equation with periodic BC and PETSc
572572
"""
573573

574-
def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=rhs_imex_petsc_data):
574+
def __init__(self, problem_params, dtype_u=petsc_vec, dtype_f=petsc_vec_imex):
575575
"""
576576
Initialization routine
577577
@@ -598,10 +598,10 @@ def eval_f(self, u, t):
598598
"""
599599

600600
f = self.dtype_f(self.init)
601-
self.A.mult(u.values, f.impl.values)
601+
self.A.mult(u, f.impl)
602602

603-
fa = self.init.getVecArray(f.expl.values)
604-
xa = self.init.getVecArray(u.values)
603+
fa = self.init.getVecArray(f.expl)
604+
xa = self.init.getVecArray(u)
605605
for i in range(self.xs, self.xe):
606606
for j in range(self.ys, self.ye):
607607
fa[i, j, 0] = -xa[i, j, 0] * xa[i, j, 1] ** 2 + self.params.A * (1 - xa[i, j, 0])
@@ -625,7 +625,7 @@ def solve_system(self, rhs, factor, u0, t):
625625

626626
me = self.dtype_u(u0)
627627
self.ksp.setOperators(self.Id - factor * self.A)
628-
self.ksp.solve(rhs.values, me.values)
628+
self.ksp.solve(rhs, me)
629629

630630
self.ksp_ncalls += 1
631631
self.ksp_itercount += self.ksp.getIterationNumber()

0 commit comments

Comments
 (0)